web-dev-qa-db-fra.com

Construire un module particulier dans le code source Android

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!

28
dead programmer

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?

45

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.

29
Wonil