基于CENTOS 6.2
首先,一定是要64位系统,内存要在2G以上。
1. 安装git :
git 在官方源里是没有的,需要安装epel和rpmforge源。
从 http://fedoraproject.org/wiki/EPEL/zh-cn 下载
http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 并安装
从 http://pkgs.repoforge.org/rpmforge-release/ 下载
http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm并安装
找对应的rpm包安装好
然后安装git
2.获取源代码:
这个目录是放 repo脚本的,repo脚本是对git的一种封装。详情见:
http://source.android.com/source/version-control.html
获取脚本
然后回到主目录后 建立存放源代码的目录
然后执行repo
如果要获取除master外的分支,用下面这条命令,在后面加 -b 然后跟分支版本。
最后就可以获取代码了。
源代码很大大概有7G。而且由于git有本地分支缓存,所以最后是占了14G的空间。
3.组建编译平台。
网上的教程都是基于ubuntu的,我在centos下组建。
这是谷歌给的官方的基于ubuntu 10.04的脚本
基于centos的话,
9.25 添加以下库:yum install alsa* alsa.i686 wx wx*.i686 -y // 这个是编译emulator要用的 2.2.3的emulator和system.img编译是分开的
下载JDK 不能用内置的Open jdk ,要自己去下载sunjdk 而且版本是要1.6的
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html
编译2.2.3的话还要修改main.mk 把里面的JAVA版本1.5改成1.6
还可以设置缓存,当经常更换编译分支的时候可以用缓存进行加速:
在.bashrc里添加以下命令:
默认情况下缓存会被放到~/.ccache目录下,如果需要更换目录,输入以下命令:
这条命令是设置缓存大小的
默认的输出文件会在 out/ 目录下
如果需要更换:
接下来就是导入key
最后还要输入EOF
接下来就可以验证了
4.编译:
先设置环境
然后选一个目标
各个编译目标的解释在 http://source.android.com/source/building.html#choose-a-target
直接输入 lunch以后有选项可以选择的
接下来就可以编译了
其中j后面跟着的数字表示用多少个线程进行编译
编译的时候真的需要耐心,因为,,,真的很慢
很慢
中途爆了一个错误:
host Executable: acp (out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp)
host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)
/usr/bin/ld: skipping incompatible /usr/lib64/libz.so when searching for -lz
/usr/bin/ld: cannot find -lz
输入这两条命令:
cd /usr/lib/
ln -s ../../lib/libz.so.1.2.3 libz.so
编译了一天一夜,机器卡到爆为止了。第一次编译会很慢,以后几次就快了。
最后编译完成,
在out/target/product/generic/下可以找到system.img和system文件夹
5.运行
每次运行的时候都要先运行:
这样就可以了
6.单独编译组件
安卓允许单独编译组件,只要存在Android.mk文件的文件夹都允许单独编译。
执行完这条命令以后就会多出来几条命令,其中mm和mmm是用来单独编译组件的,
mm是编译指定目录。
mmm是编译当前目录。
然后编译完了回到原代码的主目录以后用
重新生成system.img文件。
这条命令的原理是把system文件夹重新打包成system.img文件
7.编译sdk
从安卓的源代码里还能编译出sdk。
直接执行make 是不包括sdk的
这样就可以了
编译出来的SDK在out/host/linux-x86/sdk下
不过需要注意的是,每次完整编译或者编译单独模块的时候,都会把SDK编译的结果清空,所以最好编译完了备份一下。