公司最近开始改基于android4.0 ICS的框架cyanogenmod源码下载编译,公司手机暂时不适合测试,内核没有权限。
从个人角度来看,我目前有两部手机,一部是Htc G9 Aria,另一部是三星I9100 Galaxys2,Cyanogenmod的开源代码为这些手机提供了驱动支持,并且可以方便地编译和打包,并且将其安装到您的手机上。
上一篇文章是android2.3的编译,已经过时了,现在ubuntu已经升级到12.04等了,所以我觉得很有必要写一篇新的博客来展示一下最新的android在最新在ubuntu上编译。
基于以上几点,我将演示如何基于galaxys2编译cm9的源码并打包成zip并安装到手机上。
1.ubuntu12.04的选择
第一次使用x64系统,配置环境时发现有很多错误。 后来我用了32位系统,安装这个必备软件就完全没有错误了。 所以在这里,如果你使用12.04系统编译cyanogenmod ics源码的话,我根据个人经验建议使用32位系统。
2. 内存和CPU
因为有的同学在虚拟机上安装ubuntu,可能内存分配太小。 建议使其尽可能大。 当我有1G显存时,编译时出现错误。 重启设置2G显存就没问题了。
如果cpu太弱,编译过程中进程很容易被杀死。 我也出现过一次cyanogenmod源码下载编译,重启后就好了。 所以要注意cpu的级别。
3.java的选择
无论是Android官方文档还是里面的文章,都不会发现java的安装,他们的软件源有问题。 需要自动安装。
但是对于android ics的编译,官方文章强调支持openjdk-6-jdk,所以可以直接安装openjdk6。
注意:这里我想说明的是,CM9的编译脚本相比官方源码的编译脚本忽略或处理了一些可能出现的错误。 比如这里检查java版本,如果是开启jdk的话,不过官方的编译其实是一样的,只是改一下脚本(build/core/main.mk),找到检查java版本的地方:
复制代码代码如下:
# 检查java版本是否正确
java_version := $(shell java -version 2>&1 | head -n 1 | grep '^java .*[ "]1.6[. "$$]')
ifneq ($(shell java -version 2>&1 | grep -i openjdk),)
java_版本 :=
万一
ifeq ($(条带 $(java_version)),)
$(信息**************************************************** ** ******************)
$(信息您正在尝试使用不正确的版本进行构建)
$(java的信息。)
$(信息$(空格))
$(info 您的版本是:$(shell java -version 2>&1 | head -n 1)。)
$(信息正确的版本是:Java SE 1.6。)
$(信息$(空格))
$(信息请遵循机器设置说明)
$(信息$(空格)$(空格)$(空格)$(空格))
$(信息**************************************************** ** ******************)
#$(error stop) //如果确定已经安装了正确的jdk,则去掉这句话,让编译继续
万一
CM9的编译脚本直接去掉了这句话,但是还是要注意安装正确的jdk版本。
4.解决下载过程中无法访问googlesource的问题
您需要一个VPN帐户才能翻墙。
为此,我使用了之前订购的VPN,也有免费的VPN。 具体的免费VPN和VPN配置请参考以下两个链接:
配置完VPN后,我们的Ubuntu就可以顺利下载所有CM9源代码了。
5.环境配置
参考Ubuntu 12.04官方的要求(请关注官方文档,区分Ubutu11.10 x6和之前的系统),我们需要配置以下环境:
复制代码代码如下:
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386
sudo apt-get install g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown
sudo apt-get install libxml2-utils xsltproc zlib1g-dev:i386
应该不会有什么问题。
6.安装仓库
复制代码代码如下:
光盘
目录目录
卷曲 > ~/bin/repo
chmod a+x ~/bin/repo
别名 repo="~/bin/repo"
本来这样就够了,但是如果我们需要能够随时运行repo,最好将repo配置到环境中:
复制代码代码如下:
vim ~/.bashrc
# 打开后在文件末尾添加alias repo="~/bin/repo",然后保存退出
源~/.bashrc
无论下次在用户环境中何时何地,都可以进行 repo。
7.下载CM9源码
列表文件托管在 Github 上:
复制代码代码如下:
mkdir cm9
厘米9
repo init -u git://github.com/CyanogenMod/android.git -b ics
仓库同步
ics分支是CM9 ICS的分支。
慢慢等待(如果下载过程中不断提示打不开googlesource,记得参考上面翻墙vpn的配置,自己换主机就不行了)。
8. 配置USB
这一步是用户通过从手机中复制系统属性文件来编译源代码。
ubuntu下连接手机不需要安装驱动,但是需要配置。 您可以参考官方网站:
我这里也简单写一下:
复制代码代码如下:
sudo vim /etc/udev/rules.d/51-android.rules
然后,添加以下内容:
复制代码代码如下:
#三星
子系统==“USB”,SYSFS {idVendor}==04e8,模式= 0666
这是三星手机的配置。 对于其他手机,使用lsusb命令查看对应的id,按照上述格式添加到/etc/udev/rules.d/51-android.rules文件中。
配置完成后,拔掉手机再插上,基本上就可以了。 如果没有,先kill-server,然后使用root用户连接。 如果还是不行,进入android-sdk/tools/,给你的adb命令文件“chmod +s adb”,kill-server,然后adb,多试几次。
9.下载设备专用工程
CM9现在在下载设备项目上与CM7有所不同。 CM7下载源码时是手动下载的,CM9没有,但是可以自动智能识别并下载。
例如我的手机是galaxys2,使用以下命令:
复制代码代码如下:
早午餐银河2
如果拼写正确,会手动下载galaxys2的相关项目(在~/cm9/device/目录下添加如下目录samsung/galaxys2)。
如果下载完成并开始编译,请停止编译,我们仍然需要进行下一步。
10.获取手机系统属性文件
复制代码代码如下:
cd ~/cm9/device/samsung/galaxys2
./提取文件.sh
cd~/cm9
供应商/cm/get-prebuilts
此步骤只需执行一次。
11.编译CM9源代码
CM9的源代码比编译官方Android源代码更不易出错。
首先,初始化变量:
复制代码代码如下:
厘米9
源构建/envsetup.sh
直接使用命令:
复制代码代码如下:
早午餐银河2
那就慢慢等吧!
如果是虚拟机,如果内存紧张,cpu不足,随时都可能出现错误。
如果出现错误,要注意分析错误原因。 我的地方比较顺利。 中断过一次,可以重新编译。
ps:如果是从官方源码编译的话,相信总会出现这么几个错误,而CM9就好多了。
编译完成后会生成一个zip文件,放入手机中保存即可。
12.编译项目
到目前为止,我们已经搭建了一个健康的CM9环境,但是我们的目的不是编译CM9 ROM,这个CM每天晚上都会发布一个nightly版本,所以我们主要使用这个CM9环境来编译framework、app等项目。
比如我们第二天重启,如何编译framework-res.apk、framework.jar、Music.apk? 我们需要使用这个环境:
复制代码代码如下:
厘米9
源构建/envsetup.sh
//注意产品名称,选择产品时,在galaxys2前面添加cm_,否则找不到产品
选择产品 cm_galaxys2
//然后进入framework/base/core/res。 编译framework-res.apk
cd 框架/基础/核心/res
毫米
//也可以编译framework.jar
cd ~/cm9/framework/base/core/java
毫米
//也可以编译Music.apk
cd ~/cm9/packages/apps/音乐
毫米
这样就可以更改系统ROM,修改系统APP。
13. 总结
搭建Android环境、编译Android源码是一个复杂、耗时、熬夜的过程,并不容易。
不过,松了口气回想起来,其实很简单。