2012-10-30 14 views
10

Dla mojej pracy magisterskiej modyfikuję strukturę systemu Android i buduję źródło (4.1.1 Jelly Bean). Mogę wykonać pełną kompilację, ale ponieważ jest to bardzo czasochłonne (rozwijam się na maszynie wirtualnej Ubuntu 12.04 z 64-bitową maszyną) chciałbym zbudować osobne moduły.Budowanie osobnych modułów Androida z dexpreopt wyłączone

Na przykład: Podczas zmiany modułów lokalizacyjnych, powinno być możliwe, aby po prostu zbudować moduł zmieniły i zrobić nowy obraz systemu:

mmm frameworks/base 
make snod 

Ale to nie działa. Za każdym razem staram się uruchomić nowy system obraz nie chce się uruchomić z powodu:

I/dalvikvm(1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex' 

Po kilku badań, próbowałem wyłączyć dexpreopt ze zmiennymi Enviroment

export $WITH_DEXPREOPT=false 

i

export $DISABLE_DEXPREOPT=true 

i wykonanie pełnej przebudowy za pomocą polecenia "make installclean". Pełna przebudowa działa, a zmiany w strukturze są obecne w kompilacji. Ale po dokonaniu nowej zmiany, nadal "ramy mmm/base" i "make snod" powodują niedopasowanie dexpreopt.

Build/core/makefile z 'make snod' daje również ostrzeżenie: 'Uwaga: z włączonym dexpreopt, może być konieczne pełne odbudować.', Który pochodzi z tej linii w makefile:

ifeq (true,$(WITH_DEXPREOPT)) 
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.) 
endif 

To prowadzi mnie do przekonania, że ​​zmienna $ WITH_DEXPREOPT nie jest poprawnie ustawiona lub przeczytana? Do tej pory nie udało mi się uzyskać obrazu systemu startowego bez wykonania czystego pełnego przebudowania. Czy procedura, którą stosuję, jest poprawna, aby wyłączyć dexpreopt, czy istnieją inne sposoby na zbudowanie oddzielnych modułów po wprowadzeniu zmian w strukturze i uzyskaniu nowego obrazu systemu?

Celem budowy jest "full-eng".

Odpowiedz

11

Widocznie zmienna WITH_DEXPREOPT jest zastępowany przez zmienną WITH_DEXPREOPT wewnętrznego

build/target/board/generic/BoardConfig.mk 

Zmiana ta false, lub według ludzi w grupach google rozpoczynając markę z:

make showcommands WITH_DEXPREOPT=false 

Zrób sztuczkę. Budowanie konkretnego modułu i tworzenie nowego obrazu systemu powoduje teraz rozruchową kompilację.

(źródło: https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)

+1

Dzięki! Z jakiegoś powodu zmiany w kodzie źródłowym nie były odzwierciedlane w emulatorze nawet po czystej odbudowie. Ustawienie zmiennej po make clean i install poprawiło ją. Jednakże, kiedy dokonałem kolejnej zmiany w kodzie, używanym ramie/bazie mmm, a następnie zrobiłem snod, emulator się nie uruchomił (co oznacza, że ​​utknął na "androidowym" ekranie "). Jakie były twoje dokładne polecenia po wyczyszczeniu buduj przy użyciu make showcounts WITH_DEXPREOPT = false? Czy używałeś make snod w ogóle lub ciągle używałeś WITH_DEXPREOPT = false za każdym razem gdy wprowadzałeś zmiany? –

+1

Nie przetestowałem go za pomocą polecenia make polecenia WITH_DEXPREOPT = false, właśnie zmieniłem to w BoardConfig. mk i zrobił czysty i pełny remont.Od tego momentu wprowadzanie zmian na przykład w module Location trwało w kompilacji po "frameworkach mmm/base" i "make snod". Jeśli twój emulator się nie uruchamia, sprawdź "adb logcat", aby zlokalizować problem. – b74ckb1rd

Powiązane problemy