在Android源代码中构建特定模块

33

我正在研究从source.android.com下载的android源代码。

在完整编译后,我查看了这个网站http://elinux.org/Android_Build_System,它解释了android构建系统。

当我更改external/webkit代码并使用make -j4 libwebcore进行构建时,它会编译相应的文件并更新libwebcore.so,这为我节省了很多时间。同样的方法也适用于应用程序和apk的构建。

当我更改框架并给出以下命令make -j4 framework时问题就出现了,它无法编译相应的文件。有人能帮助我吗?

2个回答

51

frameworks文件夹中包含许多内容,您必须更加具体地告诉make要构建什么。

例如,我对以下位置进行了更改: frameworks/base/cmds/input/src/com/android/commands/input/Input.java。 现在相应的Android.mk文件位于: frameworks/base/cmds/input/Android.mk,其中包含一行代码:LOCAL_MODULE := input

因此从源代码构建的模块称为input,所以我调用:

$ make input

这将重建特定的模块。

作为额外信息,你可以使用mmm辅助工具,并像这样指定要构建的模块路径:

$ mmm frameworks/base/cmds/input

或者使用mm在当前工作目录中构建模块:

$ cd frameworks/base/cmds/input
$ mm

我通常使用mmm作为我的首选工具。


更新

哦,我明白你可能在特别谈论叫做framework的模块。

我刚试图修改:frameworks/base/core/java/android/app/Dialog.java, 并运行了:make framework

这似乎重新编译了框架。你在运行make framework之前要修改哪个文件?


回应您的评论

我刚试图修改frameworks/base/core/java/android/webkit/WebView.java。对我来说,mmm frameworks/basemake framework 都完全正常。

如果对你不起作用,请更新你的问题并提供关于你正在构建的安卓版本、你精确输入的命令和你所看到的输出的额外信息。


我想要构建 frameworks/base/core/java/android/webkit/WebView.java但是我只看到了3个.mk文件,我认为这些文件与指定的类有关:
  1. frameworks/base/core/java/res/Android.mk
  2. frameworks/base/core/java/jni/Android.mk
  3. frameworks/base/Android.mk
在第三个文件中,我看到了 LOCAL_MODULE := framework那么我应该使用 make -j4 framework 命令吗?
- dead programmer
@BjarkeFreund-Hansen 目标设备 foo 没有私有恢复资源。 - Dr.jacky

38

这里是对 mm, mmm 和其他方便函数的更详细描述,这些函数可通过在 shell 中调用 build/envsetup.sh 文件来获取:

从您的 shell 中调用 . build/envsetup.sh 以将以下函数添加到您的环境中:

   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.
请查看 build/envsetup.sh 文件的注释以查看完整的函数列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接