2012-10-30 30 views
10

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 

:

cevap

11

Görünüşe WITH_DEXPREOPT ortam değişkeni false bu değiştirme veya google gruplarına insanlara göre, bir marka başlayan

build/target/board/generic/BoardConfig.mk 

bir iç WITH_DEXPREOPT değişkeni tarafından yazılır hile yapar. Belirli bir modülü oluşturmak ve yeni bir sistem görüntüsü oluşturmak artık önyüklenebilir bir yapıyla sonuçlanıyor.

(Kaynak: https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)

+1

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ı? –

+1

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

İlgili konular