Je travaille sur un code source Android que j'ai téléchargé sur source.Android.com.
Après une construction complète, je suis passé par ce site http://elinux.org/Android_Build_System qui explique le Android système de construction.
Quand je fais des changements dans le code externe/webkit et que je le construis avec
make -j4 libwebcore
il compile le fichier correspondant et met à jour le libwebcore.so, et cela me fait gagner beaucoup de temps. La même chose s'applique aux applications et également à la construction d'apks.
Le problème se pose lorsque j'apporte des modifications dans le cadre et donne la commande comme make -j4 framework
sa ne compile pas les fichiers correspondants. Quelqu'un peut-il m'aider!
Le dossier frameworks
contient beaucoup de choses, vous devez être plus précis sur ce que vous voulez construire.
Par exemple, j'ai modifié: frameworks/base/cmds/input/src/com/Android/commands/input/Input.Java
. Le fichier Android.mk
Correspondant se trouve maintenant dans: frameworks/base/cmds/input/Android.mk
, Qui contient une ligne disant: LOCAL_MODULE := input
.
Ainsi le module en cours de construction à partir de la source s'appelle input
, donc j'appelle:
$ make input
Ce qui reconstruit ce module spécifique.
En bonus, vous pouvez utiliser l'assistant mmm
et vous pouvez spécifier le chemin du module à construire comme ceci:
$ mmm frameworks/base/cmds/input
ou en utilisant mm
qui construit simplement le module dans votre répertoire de travail actuel:
$ cd frameworks/base/cmds/input
$ mm
J'utilise normalement mmm
comme outil préféré.
Mise à jour
Oh, je vois que vous pourriez parler spécifiquement du module appelé framework
J'ai juste essayé de modifier: frameworks/base/core/Java/Android/app/Dialog.Java
, Et de faire un: make framework
.
Cela semble recompiler le cadre très bien. Dans quel fichier effectuez-vous des modifications avant d'exécuter make framework
?
En réponse à votre commentaire
J'ai juste essayé de modifier frameworks/base/core/Java/Android/webkit/WebView.Java
. mmm frameworks/base
Ainsi que make framework
Me conviennent parfaitement.
Si cela ne fonctionne pas pour vous, pouvez-vous mettre à jour votre question avec des informations supplémentaires sur la version Android que vous créez, les commandes que vous tapez exactement et la sortie que vous voyez?
Voici des descriptions plus complètes de mm
, mmm
et d'autres fonctions pratiques fournies par l'approvisionnement du build/envsetup.sh
fichier:
Invoquer . build/envsetup.sh
depuis votre Shell pour ajouter les fonctions suivantes à votre environnement:
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.
Veuillez vérifier build/envsetup.sh
Commentaires du fichier pour voir la liste complète des fonctions.