2012-10-30 7 views
22

Sto lavorando su un codice sorgente Android che ho scaricato da source.android.com.Creazione di un modulo particolare nel codice sorgente Android

Dopo una compilazione completa ho visitato questo sito http://elinux.org/Android_Build_System che spiega il sistema di generazione di Android.

quando faccio i cambiamenti nel codice/webkit esterna e costruire con

make -j4 libwebcore compila il file corrispondente e aggiorna il libwebcore.so, e mi risparmiare un sacco di tempo. La stessa cosa si applica alle applicazioni e anche per la costruzione di apk.

Il problema sorge quando apporto modifiche nel framework e do il comando come make -j4 framework non compila i file corrispondenti. Qualcuno può aiutarmi!

risposta

36

La cartella frameworks contiene molte cose, devi essere più specifico sul raccontare fare cosa costruire.

Ad esempio, ho apportato una modifica in: frameworks/base/cmds/input/src/com/android/commands/input/Input.java. Il file Android.mk corrispondente si trova in: frameworks/base/cmds/input/Android.mk, che contiene una riga che dice: LOCAL_MODULE := input.

Così il modulo viene costruire dalla sorgente si chiama input, così mi chiamano:

$ make input 

che ricostruisce quel modulo specifico.

Come informazioni bonus, è possibile utilizzare il mmm aiuto e si può specificare il percorso del modulo di costruire in questo modo:

$ mmm frameworks/base/cmds/input 

o utilizzando mm che ha appena costruisce il modulo in voi directory di lavoro corrente:

$ cd frameworks/base/cmds/input 
$ mm 

Normalmente utilizzo lo mmm come strumento preferito.


Aggiornamento

Oh, vedo che potrebbe essere parlando specificamente del modulo chiamato framework

ho solo cercato di modificare: frameworks/base/core/java/android/app/Dialog.java, e fare un: make framework.

Questo sembra ricompilare il framework bene. In quale file apporti esattamente le modifiche prima di eseguire make framework?


In risposta al tuo commento

ho solo cercato di modificare frameworks/base/core/java/android/webkit/WebView.java. mmm frameworks/base e make framework funziona perfettamente per me.

Se non funziona per te, puoi aggiornare la tua domanda con ulteriori informazioni su quale versione di Android stai creando, quali comandi stai digitando esattamente e l'output che stai vedendo?

+0

voglio costruire quadri/base/core/java/android/webkit/WebView.java e ho visto solo 3 file .mk che penso correlato alla classe specificata 1) framework/base/core/java/res/Android.mk 2) framework/base/core/java/jni/Android.mk 3) framework/base/Android.mk In il 3) file ho visto LOCAL_MODEULE: = framework dovrei usare il comando make -j4 framework –

+0

@YSBhai: vedere la mia risposta aggiornata. –

+0

@ BjarkeFreund-Hansen Nessuna risorsa di recupero privata per TARGET_DEVICE foo –

20

Ecco una descrizione più completa di mm, mmm, e altre comode funzioni fornite dal file di sourcing 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.