Tezim için, android çerçeveyi değiştirerek ve kaynak oluşturuyorum (4.1.1 Jelly Bean). Tam bir yapıya sahip olabilirim, ancak bu çok zaman alıcı olduğu için (ubuntu 12.04 64bit sanal makinede geliştiriyorum) ayrı modüller oluşturmak istiyorum.Dexpreopt ile ayrı ayrı Android modülleri oluşturma
Örneğin: konum modüllerine değişiklik yaparken , sadece değiştirilen modülü oluşturmak ve yeni bir sistem görüntüsü yapmak mümkün olmalıdır:
mmm frameworks/base
make snod
Ancak bu işe yaramaz. Ben önyükleme Her seferinde yeni sistem görüntüsü nedeniyle önyükleme olmaz: Biraz araştırmadan sonra
I/dalvikvm(1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
, ben çevre değişkenleri
export $WITH_DEXPREOPT=false
ve
export $DISABLE_DEXPREOPT=true
ile dexpreopt devre dışı bırakmak için çalıştı
ve 'make installclean' ile tam bir yeniden oluşturma. Tam yeniden oluşturma çalışır ve yapıdaki değişiklikler yapıda bulunur. Ancak, yeni bir değişiklik yaptıktan sonra, hala 'mmm çerçeveler/temel' ve 'snod yapmak' dexpreopt uyuşmazlığıyla sonuçlanır. 'Uyarı: dexpreopt etkinken, tam yeniden gerekebilir.', Makefile bu hat geliyor:
ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif
'snod yapmak' dan inşa/çekirdek/makefile da uyarı verir
Bu, $ WITH_DEXPREOPT değişkeninin doğru ayarlanmadığını veya okunmadığına inanmamı sağlıyor? Şimdiye kadar temiz, tam bir yeniden yapılandırma yapmadan önyüklenebilir bir sistem görüntüsü alamadım. Dexpreopt'u devre dışı bırakmak için doğru olan prosedür uygulanır mı, yoksa çerçeve üzerinde değişiklikler yapıp yeni bir sistem görüntüsü alıp ayrı modüller oluşturmanın başka yolları var mı?
Oluşturma hedefi 'full-eng'.
make showcommands WITH_DEXPREOPT=false
:
Teşekkürler! Bazı sebeplerden dolayı kaynak koddaki değişiklikler temiz bir yeniden oluşturmanın ardından bile emülatöre yansıtılmıyordu. Değişkeni temizledikten ve kurduktan sonra ayarlamak düzeltildi. Ancak, kodda başka bir değişiklik yaptığımda, mmm framework/base kullanılan ve sonra snod yapmak, emülatör önyükleme (yani "android" ekranda sıkışmış anlamı "). make showcommands kullanarak build WITH_DEXPREOPT = false? make snod kullandınız mı ya da sürekli kullandığınız WITH_DEXPREOPT = her değişiklik yaptığınızda sürekli yanlışlık var mı? –
make_comtre WITH_DEXPREOPT = false komutunu kullanarak test etmedim, sadece BoardConfig'te değiştirdim. mk ve temiz ve tam bir yeniden inşa yaptım.Bu noktadan sonra, örneğin Konum modülünde değişiklikler yapmak, 'mmm çerçeveler/temel' ve 'snod' yaptıktan sonra yapıda kalmıştır. Emülatörünüz önyükleme yapmıyorsa, sorunu saptamak için 'adb logcat' komutunu kullanın. – b74ckb1rd