के साथ अलग एंड्रॉइड मॉड्यूल का निर्माण करना मेरे थीसिस के लिए, मैं एंड्रॉइड फ्रेमवर्क को संशोधित कर रहा हूं और स्रोत (4.1.1 जेली बीन) का निर्माण कर रहा हूं। मैं एक पूर्ण निर्माण कर सकता हूं, लेकिन क्योंकि यह बहुत समय ले रहा है (मैं उबंटू 12.04 64 बिट आभासी मशीन पर विकास कर रहा हूं) मैं अलग मॉड्यूल बनाना चाहता हूं।dexpreopt अक्षम
उदाहरण के लिए: जब स्थान मॉड्यूल में परिवर्तन कर रही है, यह सिर्फ बदली हुई मॉड्यूल का निर्माण, और एक नया सिस्टम छवि बनाने के लिए संभव हो जाना चाहिए:
mmm frameworks/base
make snod
लेकिन यह काम नहीं करता। हर बार जब मैं बूट करने के लिए प्रयास करते हैं, नई प्रणाली छवि की वजह से बूट नहीं करेगा:
I/dalvikvm(1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
कुछ शोध के बाद, मैं पर्यावरण चर
export $WITH_DEXPREOPT=false
और
export $DISABLE_DEXPREOPT=true
साथ dexpreopt को निष्क्रिय करने की कोशिश की
और 'इंस्टॉल इंस्टॉल करें' के साथ एक पूर्ण पुनर्निर्माण कर रहा है। पूर्ण पुनर्निर्माण कार्य करता है, और ढांचे में परिवर्तन निर्माण में मौजूद हैं। लेकिन एक नया बदलाव करने के बाद भी, 'mmm ढांचे/आधार' और 'स्नोड' परिणाम का परिणाम dexpreopt mismatch में होता है। 'चेतावनी:: dexpreopt के साथ सक्षम, आप एक पूर्ण पुनर्निर्माण पड़ सकता है।' है, जो makefile में इस लाइन से आता है:
ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif
निर्माण/कोर/'snod बनाने' से makefile भी चेतावनी देता है
इससे मुझे विश्वास है कि $ WITH_DEXPREOPT चर सही ढंग से सेट या पढ़ा नहीं गया है? अभी तक मैं एक पूर्ण पूर्ण पुनर्निर्माण किए बिना बूट करने योग्य सिस्टम छवि प्राप्त करने में सक्षम नहीं हूं। क्या प्रक्रिया मैं dexpreopt को अक्षम करने के लिए सही का पालन करता हूं, या ढांचे में परिवर्तन करने और नई प्रणाली छवि प्राप्त करने के बाद अलग मॉड्यूल बनाने के अन्य तरीके हैं?
बिल्ड लक्ष्य 'पूर्ण-इंजन' है।
धन्यवाद! कुछ कारणों से एक स्वच्छ पुनर्निर्माण के बाद भी स्रोत कोड में परिवर्तन एमुलेटर में दिखाई नहीं दे रहा था। एक क्लीन साफ करने के बाद चर सेट करना और इसे ठीक करना इंस्टॉल करें। हालांकि, जब मैंने कोड में एक और परिवर्तन किया, तो एमएमएम फ्रेमवर्क/बेस का इस्तेमाल किया, और फिर स्नोड बना दिया, एम्यूलेटर बूट नहीं होगा (जिसका अर्थ है कि यह "एंड्रॉइड" स्क्रीन पर फंस गया था ")। साफ करने के बाद आपके सटीक आदेश क्या थे शोकॉमैंड्स का उपयोग करके निर्माण करें I_DEXPREOPT = झूठी? क्या आपने हर बार स्नोड बनाया है या हर बार जब आप परिवर्तन करते हैं तो हमेशा के साथ इन_डीएक्सपीआरओपीटी = झूठी का उपयोग करते हैं? –
मैंने मेक शोकैंड्स का उपयोग करके इसका परीक्षण नहीं किया है IDEXPREOPT = false कमांड, मैंने इसे बोर्ड कॉन्फिग में बदल दिया है। एमके और एक साफ साफ और एक पूर्ण पुनर्निर्माण किया था।इस बिंदु से परिवर्तन के लिए उदाहरण के लिए स्थान मॉड्यूल 'एमएमएम फ्रेमवर्क/बेस' और 'स्नोड' बनाने के बाद निर्माण में बने रहे। यदि आपका एमुलेटर बूट नहीं करता है, तो समस्या को इंगित करने के लिए 'adb logcat' का उपयोग करके जांचें। – b74ckb1rd