Android编译系统(2)

Android编译系统(二)清除执行 % m clean清除你刚刚创建的程序。你也可以执行% m clobber清除所有程序,% m c

Android编译系统(二)
清除

执行 % m clean清除你刚刚创建的程序。你也可以执行% m clobber清除所有程序,% m clobber 相当于删除//device/out/目录,这个目录是所有生成文件存储的地方。


加速重编译

每个组合的程序存储在//device/out/的特定目录下,这样就可以快速切换不同组合,而不需要每次重新编译所有的源代码。
然而,如果编译系统没有捕获到环境变量或者makefiles的改变,执行清除重新编译也是必要的,如果经常发生这种状况,你应该定义USE_CCACHE环境变量,如下所示:

% export USE_CCACHE=1

这么做将迫使编译系统使用ccache这个编译缓存工具。避免重新编译所有的源代码。Ccache程序在//device/prebuilt/...目录中,不需要安装。


问题修正

下面的问题有可能是运行过期的java版本引起的
device Dex: core
UNEXPECTED TOP-LEVEL ERROR:java.lang.NoSuchMethodError: method java.util.Arrays.hashCode withsignature ([Ljava.lang.Object;)I was not found.
at com.google.util.FixedSizeList.hashCode(FixedSizeList.java:66)
at com.google.rop.code.Rop.hashCode(Rop.java:245)
at java.util.HashMap.hash(libgcj.so.7)[...]

dx
是一个java程序,需要Java1.5的版本。检查java版本,在shell中执行% java -version
,你可以看到下列信息:


java version "1.5.0_07"Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164)Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing)

如果你确实有1.5或以后的版本,但是又收到这个错误,请核实你是否正确地更新了PATH变量.

编译Android内核



这一节描述怎样编译Android默认内核。一旦你熟练了通用编译,你就可以开始为你的目标设备修改Android驱动。要编译基础内核,切换到设备目录(/home/joe/android/device),运行:

% . envsetup.sh



% partner_setup generic


然后切换到 kernel 目录
/home/joe/android/kernel.


校验分支


默认分支总是android. 要校验不同的分支,执行:

% git checkout --track -b android-mydevice origin/android-mydevice


//Branch android-mydevice set up to track remote branch



% refs/remotes/origin/android-mydevice.


//Switched to a new branch "android-mydevice"


为了简化代码管理,给你的本地分支与对应的远程分支取一样的名字(向上面的片断所演示的那样)。要在两个分支直接切换,执行% git checkout <branchname>.


核对位置



查找存在哪些分支(本地和远程),哪一个分支出于激活状态(用asterisk标记),需要执行:


% git branch -a


android


* android-mydevice

origin/HEAD

origin/android

origin/android-mydevice

origin/android-mychipset


如果只看本地分支,省略 –a 标记。


编译内核

要编译内核,执行:


% make -j4