故事背景:
一个月前无意中看到android4.4的系统原生Email应用和短信应用有几个自己认为比较酷的特性, 就非常想知道google的程序猿们是怎么实现的。 于是就开始了在ubuntu12.04上下载和编译android4.4源码的旅程, 没想到, 这段旅程花来整整一个多月!!(我可是有过编译android源码经验的)
序言:
写这篇博客我有点激动, 因为我以前没有写博客的习惯。 对于一个有过编译android源码经验的程序猿来说尽然花了一个多月的时间去走一条自己认为比较熟悉的路, 迫使我不得不记下这段漫长, 煎熬, 激动, 绝望,兴奋的旅途。 我要吐槽, 骂人, 为什么一年前编译源码的经验一年后就于事无济呢? 总结一下, 天朝时不时的在封杀和谐一些技术网站,导致大陆的程序猿们非行的苦闷, 明明作一件事情可以一个小时完成, 偏偏要花上一天, 设置一周。 这是其他地域的技术控们感受不到的, fuck,fuck, fuck! 这种环境唯一带给我们的是要有更大的耐心, 不放弃的精神。 任何事情都有利也有弊吧, 不过这种利, 我还是想说fuck you!
正文:
非大陆程序员完全可以按照官方的技术文档, 一步一步的作下去,应该都是没有问题的. 如果有问题可以求助: [email protected]. 向这个组织发邮件。 由于该组织大部分是国外的技术控所以邮件内容最好是英文的。 除了大陆的技术控们, 如果按照官方的步骤去作, 一般不会有什么问题。 总结一些经验: 如果自己编译过程中遇到问题, 可以到网上搜索一下,若搜到结果,那就根据网友建议尝试解决。 如果搜索不到结果, 则一定是你的环境问题, 或编译不连贯导致。 第一, 先检查环境。 安装工具前先检查一下系统是否已经自带了默认的工具, 如果满足要求就优先用系统的工具。如果不满足, 再卸载重装。 对未知道的工具最好全量安装, 不要通过update-alternatives --install 命令进行选择性安装, 很有可能你拿捏不准。 直接配置环境变量PATH比较靠谱. 第二, 保证 make 命令的连贯性, 就是说在make期间不可以意外关机, 或其他原因意外中端编译进程。若出现来这种情况, 则make clean, 重新编译, 否则大多数编译期间会碰到问题。 官方文档路径大家都知道吧,http://source.android.com/
大陆程序员就不要相信官方文档了, 只能参考一下。 还是认为阅读下面的内容比较实在。
环境:
ubuntu12.04
64位CPU处理器
6G内存(最好是)
硬盘 55G以上
本人是笔记本装双操作系统, 如果系统配置比较好, 用虚拟机完全可以。
第一部分: 源码下载:
1.安装git 和curl 工具。
shell窗口中执行:
sudo apt-get install git-core curl
2. 下载repo, python脚本: (官方文档中的地址已经被和谐)
mkdir ~/bin
curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo
chmod a+x ~/bin/repo
3. 初始化repo
mkdir ~/dir_name
cd dir_name
用这个路径, 官方的下载路径总是被挂起, 很是恼火!
repo init -u git://git.omapzoom.org/platform/manifest -b android-4.4_r1
4. 下载源码
把下面的内容拷贝到自己新建的sh文件中, 并赋执行权限并执行。
#! /bin/bash
repo sync
while [ $? = 1 ]; do
sleep 5
repo sync
done
第一次repo sync之后, 最好重新再执行一次repo sync命令, 确保文件下载的是正确的, 格式正确的, 确保后面编译一次通过。
第二章节,编译源码
看来一下系统的工具, 不需要安装python, GNU Make工具, 系统自带的正合适, 我们只需要安装一下jdk 和一些其他附件就可以了。
1.安装jdk1.6:
下载:
http://www.oracle.com/technetwork/java/javase/archive-139210.html
是一个*.bin格式文件,大约68MB
把jdk-6u33-linux-i586.bin放到/usr/lib/jvm/java/目录下并为jdk-6u33-linux-i586.bin增加执行权限
chmod u+x /usr/lib/jvm/java/jdk-6u33-linux-i586.bin
执行jdk-6u33-linux-i586.bin,将JDK6的相关文件解包至jdk1.6.0_33目录下
./jdk-6u33-linux-i586.bin
配置环境变量:
sudo vi /etc/profile
一下内容添加到文件末尾 , 注意检查路径:
export JAVA_HOME=/usr/local/java/jdk1.6.0_45
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
这个必须要执行,否则环境变量无效的
source /etc/profile
检查是否安装成功, 若出现版本号则表示安装成功:
java -version
2. 安装辅助编译包:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
为libGL.so建立link
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
3.到源码根目录开始编译:
设置缓存目录, 加快编译速度:
export USE_CCACHE=1
export CCACHE_DIR=
prebuilts/misc/linux-x86/ccache/ccache-M50G
初始化环境变量:
. build/envsetup.sh
初始化编译类型:
lunch aosp_arm-eng (很多类型,这个参考一下官方文档,当前的类型适合构造模拟器debug开发用)
开始编译:
make -j16
如果编译过程中断, 一定要记住clean掉重新编译。
4. 运行:
运行模拟器并且启动ddms监控器。
emulator & ddms
单独编译某个模块用命令mmm:
比如编译系统短信Mms:
mmm package/apps/Mms
编译后重新生成系统镜像system.img, 重启模拟器就可以看到修改效果:
make snod.
QQ:915270002 欢迎加QQ交流,注明android源码俱乐部.
推荐一篇文章:
一个草根程序员创业之路的所感所悟-2016