关于Android源码的获取、编译等,网上有很多的帖子解答,但其实都是基于官方网站说明来写的,算是汉化过程吧,因此如果帖子看的不明,可以上源码官网寻找答案。
http:
//source.android.com/
|
下面是自己在Ubuntu 8.04系统下编译过程:
1.源码获取
可参照前面写的博客:http://www.cnblogs.com/playing/
1).获得官方Android源码 repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
2).获得CyanogenMod Android源码 repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
(源码位置github里面的CyanogenMod项目 https://github.com/CyanogenMod)
3).获得三星Galaxy Android源码 repo init -u git://github.com/drakaz/android.git -b gaosp-gingerbread
(源码位于github里面drakaz项目 https://github.com/drakaz)
(因为自己要搞的手机是三星i7500 所以特别加了Galaxy Android,其实也是CyanogenMod 里面的一个分支吧)
2.安装下载编译时需要的工具环境
sudo apt-get install build-essential
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install libc6-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install patch
sudo apt-get install texinfo
sudo apt-get install libncurses-dev
sudo apt-get install git-core gnupg //(gnupg系统可能已自带)
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
sudo apt-get install ncurses-dev
sudo apt-get install zlib1g-dev
sudo apt-get install valgrind(可选,有21M大,我觉得一般人是用不到的)
sudo apt-get install python2.5 (实际上不用装,Ubuntu 8.04 已经自带)
sudo apt-get install sun-java6-jdk (或者 sudo apt-get install sun-java5-jdk)
(很多其实系统已经安装了,除了红色标注要安装外,其他编译时没有在安装吧....)
特别注意:
JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older (官方说明)
即在编译2.3之前的版本需要用JDK 5 ,2.3及2.3之后的版本用JDK6
3.编译源码
在命令行里面执行make命令:
$make
然后是漫长的等待......
编译成功后会在代码目录下多了一个out目录
可以看到命令行里面输出如下信息:
Install:
out
/target/product/generic/system/xbin/scp
Notice file: system/extras/showmap/NOTICE --
out
/target/product/generic/obj/NOTICE_FILES/src
//system/xbin/showmap.txt
Install:
out
/target/product/generic/system/xbin/showmap
Notice file: system/extras/showslab/NOTICE --
out
/target/product/generic/obj/NOTICE_FILES/src
//system/xbin/showslab.txt
Install:
out
/target/product/generic/system/xbin/showslab
Notice file: external/sqlite/dist/NOTICE --
out
/target/product/generic/obj/NOTICE_FILES/src
//system/xbin/sqlite3.txt
Install:
out
/target/product/generic/system/xbin/sqlite3
Notice file: external/dropbear/NOTICE --
out
/target/product/generic/obj/NOTICE_FILES/src
//system/xbin/ssh.txt
Install:
out
/target/product/generic/system/xbin/ssh
Install:
out
/target/product/generic/system/xbin/strace
Notice file: system/extras/su/NOTICE --
out
/target/product/generic/obj/NOTICE_FILES/src
//system/xbin/su.txt
Install:
out
/target/product/generic/system/xbin/su
Install:
out
/target/product/generic/system/xbin/timeinfo
Copy:
out
/target/product/generic/system/etc/apns-conf.xml
Copying:
out
/target/product/generic/obj/NOTICE_FILES/src/kernel.txt
Finding NOTICE files:
out
/target/product/generic/obj/NOTICE_FILES/hash-timestamp
Combining NOTICE files:
out
/target/product/generic/obj/NOTICE.html
gzip -c
out
/target/product/generic/obj/NOTICE.html >
out
/target/product/generic/obj/NOTICE.html.gz
zip -qj
out
/target/product/generic/system/etc/security/otacerts.zip build/target/product/security/testkey.x509.pem
Generated: (
out
/target/product/generic/android-info.txt)
Target system fs image:
out
/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image:
out
/target/product/generic/system.img
Target ram disk:
out
/target/product/generic/ramdisk.img
Target userdata fs image:
out
/target/product/generic/userdata.img
|
===================================================================================
后续编译:
往往我们会已经编译过了源码,但是会再次修改里面的某个文件,某个项目,这时候我们就可以单独编译了...
先在android目录下执行
$ . build/envsetup.sh
然后你就会多出几个可用的命令。
|
例如,我们在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
$mmm packages/apps/Contacts/
为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
$ make snod
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了
=====================================================================================
4.测试运行
1)先设置环境变量:
打开~/.bashrc文件, 并在最后添加下面两行:
PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
export ANDROID_PRODUCT_OUT
(就是配置你生成的out目录)
2)运行模拟器:
cd $HOME/android/out/target/product/generic
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
如果最后能进入到系统并看到一个大时钟, 说明就大功告成了!!!!
5.编译过程出现的问题
如果你以为按照上面一步步做就能成功编译,那就想得太简单了,很多时候编译过程中会出现一些意想不到的错误,导致编译中断!不过还好,遇到的问题一般网上都是有解决方案的,只要搜索一下就ok了,下面是自己编译过程中遇到错误:
1.缺少工具,如g++
可通过 sudo apt-get install ... 来安装
2.Android编译时找不到stub-64.h的问题
把几个Android.mk中的 -m64 的地方给注释掉了,它们在这里: external/clearsilver/cgi external/clearsilver/java-jni external/clearsilver/util external/clearsilver/cs
这是用java6会出现这问题,如果用java5 应该就不会出现!