32

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

完整构建后,我浏览了这个网站http://elinux.org/Android_Build_System,它解释了 android 构建系统。

当我对外部/webkit 代码进行更改并使用

make -j4 libwebcore它编译了相应的文件并更新了 libwebcore.so,它为我节省了很多时间。同样的事情也适用于应用程序,也适用于构建 apk。

当我在框架中进行更改并给出命令时出现问题,因为 make -j4 framework 它没有编译相应的文件。谁能帮我!

4

2 回答 2

50

该文件夹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

或使用mmwhich 只是在您当前的工作目录中构建模块:

$ 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/base以及make framework对我来说非常好。

如果它对您不起作用,您能否使用有关您正在构建的 android 版本、您正在输入的确切命令以及您看到的输出的附加信息来更新您的问题?

于 2012-10-31T09:27:12.110 回答
36

以下是对mm,和其他通过获取文件mmm提供的便利功能的更完整描述: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文件的注释以查看完整的函数列表。

于 2014-04-29T05:56:54.373 回答