2012-10-30 17 views
22

Pracuję nad kodem źródłowym Androida, który pobrałem z source.android.com.Budowanie konkretnego modułu w kodzie źródłowym Androida

Po pełnej kompilacji przejrzałem tę stronę http://elinux.org/Android_Build_System, która wyjaśnia system budowania Androida.

Kiedy dokonać zmian w zewnętrznym kodzie/WebKit i zbudować go z

make -j4 libwebcore to kompiluje odpowiedni plik i aktualizuje libwebcore.so i zaoszczędzić mi dużo czasu. To samo dotyczy aplikacji, a także budowania apków.

Problem powstaje, gdy wprowadzam zmiany w strukturze i wydaje polecenie, że nie kompiluje odpowiednich plików. Czy ktoś może mi pomóc!

Odpowiedz

36

Folder frameworks zawiera wiele rzeczy, musisz dokładniej opisać, co trzeba zrobić.

Na przykład dokonałem zmiany w: frameworks/base/cmds/input/src/com/android/commands/input/Input.java. Teraz odpowiedni plik Android.mk znajduje się w: frameworks/base/cmds/input/Android.mk, który zawiera wiersz z następującym napisem: LOCAL_MODULE := input.

Zatem moduł budować od źródła nazywa input, więc wzywam:

$ make input 

Które odbudowuje tego konkretnego modułu.

Jako informacji premiowej, można użyć mmm pomocnika można określić ścieżkę modułu budować tak:

$ mmm frameworks/base/cmds/input 

lub używając mm który właśnie buduje moduł w ciebie bieżącym katalogu roboczym:

$ cd frameworks/base/cmds/input 
$ mm 

Zwykle używam mmm jako preferowanego narzędzia.


Aktualizacja

Och, widzę można mówić konkretnie o moduł o nazwie framework

Właśnie próbuje zmodyfikować: frameworks/base/core/java/android/app/Dialog.java, i zrobić: make framework.

To wydaje się rekompilować ramy dobrze. Który z plików dokładnie wprowadzasz zmiany przed uruchomieniem make framework?


W odpowiedzi na Twój komentarz

Właśnie próbował modyfikować frameworks/base/core/java/android/webkit/WebView.java. mmm frameworks/base oraz make framework działa idealnie dla mnie.

Jeśli to nie działa, czy możesz zaktualizować swoje pytanie, dodając dodatkowe informacje o tym, która wersja Androida jest tworzona, które polecenia dokładnie piszesz i jakie dane wyjściowe widzisz?

+0

Chcę zbudować ramy/base/core/java/android/WebKit/WebView.java i widziałem tylko 3 pliki .mk, które według mnie odnoszą się do określonej klasy 1) framework/base/core/java/res/Android.mk 2) frameworks/base/core/java/jni/Android.mk 3) frameworks/base/Android.mk In 3) widziałem plik LOCAL_MODEULE: = framework powinienem użyć polecenia make -j4 framework –

+0

@YSBhai: Zobacz moją zaktualizowaną odpowiedź. –

+0

@ BjarkeFreund-Hansen Brak prywatnych zasobów odzyskiwania dla TARGET_DEVICE foo –

20

Oto pełniejsze opisy mm, mmm i innych wygodnych funkcji oferowanych przez pozyskiwanie plik build/envsetup.sh:

Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment: 
    lunch: lunch <product_name>-<build_variant> 
    tapas: tapas [<App1> <App2> ...] [arm|x86|mips|armv5] [eng|userdebug|user] 
    croot: Changes directory to the top of the tree. 
    m:  Makes from the top of the tree. 
    mm:  Builds all of the modules in the current directory, but not their dependencies. 
    mmm:  Builds all of the modules in the supplied directories, but not their dependencies. 
      To limit the modules being built use the syntax: mmm dir/:target1,target2. 
    mma:  Builds all of the modules in the current directory, and their dependencies. 
    mmma: Builds all of the modules in the supplied directories, and their dependencies. 
    cgrep: Greps on all local C/C++ files. 
    jgrep: Greps on all local Java files. 
    resgrep: Greps on all local res/*.xml files. 
    godir: Go to the directory containing a file. 
Powiązane problemy