因为工作上的一些需要,需要进行Android平台的ROM开发,开发过程中发现官方文档十分简单并且存在很多问题,所以现在整理一下完整的个人开发流程,共享给大家,有问题还请多多指正。
为了编译自定义的Android ROM,第一步是搭建一个合理的硬件和软件开发环境。
一、硬件开发环境:
16G以上内存、高性能CPU:使用Intel i7内核,8G内存的PC编译Android 2.3首次需要半小时左右,小范围修改重新编译在5分钟左右;编译Android 4.2首次编译需要80分钟左右。如果开发Android2.3 ROM使用上述配置即可,如果编译Android 4.0 ROM需要更高级的配置,考虑到Android4.2的源码在10G左右,提高内存应该可以提升编译速度,因此利用闲置的64G内存、2颗 64位E5620 CPU的Server进行开发。
64位机器:为了编译Android 2.3.x以上版本,CPU要求是64核。
单个Andoid版本需要100G左右硬盘空间:每个Android版本需要100G左右空间,主要是编译后的临时文件,每个版本针对每个单独的设备需要单独编译,单个设备编译需要30G左右,为了兼容所有机型编译需要100G左右硬盘空间。
二、软件开发环境:
操作系统:比较稳定的是Ubuntu 10.04 64-bit Desktop,由于Ubuntu 10.04已不在维护,Google正在Ubuntu LTS(12.04 64-bit)上进行开发测试。建议选择Ubuntu 10.04 64-bit。
注1:如果在新版的笔记本上安装双系统或者Ubuntu出现问题时,使用ubuntu维护盘的GParted工具来删除原生Windows系统的分区表并格式化整个硬盘。
注2:服务器配置,由于各种原因,只能使用服务器来进行开发,所以需要进行一些网络配置和VNC配置
网络环境:
配置IP与DNS
vim /etc/networking/interfaces
auto eth0
iface eth0 inet static
address 10.109.254.15
netmask 255.255.255.0
gateway 10.109.254.1
#dns-nameservers 10.3.9.4 10.3.9.5
配置DNS
vim /etc/resolv.conf
nameserver 10.3.9.4
nameserver 10.3.9.5
重启网络
/etc/init.d/networking restart
安装ssh
sudo apt-get install ssh
安装VNC
sudo apt-get install vnc4server
vncserver :3
检查硬件环境
使用df -h检查各磁盘空间使用情况,保证/home足够空间。
软件环境
python:要求2.6或者2.7
GNU Make:严格要求3.8.1
JDK 1.6
由于Ubuntu 12.04不支持Oracle JDK的apt安装,下面提供安装方式
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
说明:1.6 JDK 69M下载需要较长时间10~30分钟。
Git 1.8.1以上
支持https方式同步git
下面提供最新版git的安装方式
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
说明:23M下载需要较长时间5~10分钟
,期待新的安装方法
安装完后需配置global设置
git config –global user.email “you@example.com”
git config –global user.name “Your Name”
ccache
sudo apt-get install ccache
设置PATH
vim ~/.bashrc添加
export USE_CCACHE=1
source ~/.bashrc
测试设置成功:
echo $USE_CCACHE
安装相关依赖package
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-11/92207p2.htm
三、搭建Android源码环境
下载Android分支源码,此处选择aosp-2.3.x分支
配置repo:repo基于git开发的一套源码下载工具,可以实现并行下载。
mkdir ~/bin
在~/.bashrc中增加PATH=~/bin:$PATH并使用source ~/.bashrc进行更新
sudo apt-get install curl
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
【注:此处若被墙,IPV6可以添加hosts,参考ipv6 hosts,否则进行源码安装】
下载源码:
mkdir -p ~/android/aosp-2.3.x
cd ~/android/aosp-2.3.x
repo init -u https://android.googlesource.com/platform/manifest.git -b gingerbread
repo sync
查看CPU的核数方便进行多核编译
cat /proc/cpuinfo |grep “cores”|uniq
cpu cores : 4
编译:
source build/envelop.sh
lunch full_eng
make -j8(jX,X一遍为CPU核数的2倍,此处为4核所以选择8)
出去运动运动吧,休息一会。
注:如果使用emulator模拟器进行开发,在android 2.3.x环境下需要更新emulator的核
repo forall platform/external/qemu -c git checkout aosp/tools_r12
make
四、虚拟机运行(实体机待续)
vim run.sh
out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7 -sdcard sdcard.img -skindir sdk/emulator/skins -skin WQVGA400 -memory 512 -partition-size 1024
chmod a+x run.sh
./run.sh
虚拟机启动成功,Android自动加载,大功告成。
参考资料:
1. 神书《Embedded Android》 http://www.linuxidc.com/Linux/2013-11/92208.htm
2. Java安装
http://linuxg.net/how-to-install-Oracle-java-jdk-678-on-Ubuntu-13-04-12-10-12-04/
3. Kernel更换
http://source.android.com/source/known-issues.html
4.Google官方资料
http://source.android.com
附录:
编译的整个过程中,碰到了很多问题,记录日志然后判断错误、搜索错误是唯一方法。
附上一些日志:
2013-09-16/15:45 sync start
2013-09-16/16:15 download 4G
--> it seems to finish the job in 5 hours
2013-09-16/19:15 finishing download less than 3 hours
[Don't know when stop]
set_stuff_for_environment
2013-09-17/10:18 android-4.1.2_r1 [Nexus S, Galaxy Nexus, Nexus 7]
2013-09-17/14:03 download finished[Don't know when stop]
2013-09-17/14:05 start make -j4
2013-09-17/16:25 end make. sum up to 140 minutes
2013-09-17/16:40
2013-09-22/09:14 start building CM
2013-09-22/10:00 start building Android 2.3.x Gingerbell xx erro
2013-09-22/14:03 start building Android 2.3.x [make clear and then build again]
2013-09-22/14:33 building over; [error: bad workspace: cannot find prebuilt kernel]
2013-09-22/15:20 start building Android 2.3.x Gingerbell [different in so much terminals xx]
2013-09-22/15:55 end building, start android device
2013-09-22/16:19 run the device totally black
更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11