Android ROM开发之源码搭建与ROM生成

跟風遠走 提交于 2019-12-04 17:30:54

本文基于Android 4.2.2源码搭建环境。

硬件配置

  1. 4G以上内存、100G以上硬盘空间:使用Intel i7内核,8G内存的PC编译Android 2.3首次需要半小时左右,小范围修改重新编译在5分钟左右;编译Android 4.2首次编译需要80分钟左右,二次编译速度也在10分钟左右。ccache缓存机制的引入保证了编译的高效,代价是占据大量硬盘空间。Android 4.2源文件在10G左右,编译文件在15G左右,如果使用多个Android版本,硬盘空间翻倍,所以建议保留100G以上的硬盘空间。
  2. 64位机器: 为了编译Android 2.3.x以上版本,CPU要求是64位。

检查硬件环境: 使用df -h检查个磁盘空间使用状况,保证/home空间充裕。

软件配置

  1. 操作系统: 使用Ubuntu 12.04 64-bit Desktop(此版本为最新的长期维护稳定版本,新版的笔记本需要关闭EFTI模式)
  2. python: 要求2.6或者2.7
  3. GNU make: 严格要求3.8.1
  4. JDK 6: 由于ubuntu默认安装openJDK,为保证稳定性,使用第三方ppa安装JDK或者源码安装
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer

注:此方法需要下载69M文件,下载时间依网络而定。

  1. Git: 要求1.8.1以上版本,使用ppa安装最新版本;如果网络状况不好可以先不升级至1.8.1
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

注:此方法需要下载23M文件,下载时间依网络而定。安装完后需要设置global信息

git config --global user.email "you@example.com"
git config --global user.name "Your Name" 
  1. ccache:缓存设置

安装

$ sudo apt-get install ccache

设置PATH

$ echo "export USE_CCACHE=1" >> ~/.bashrc
$ source ~/.bashrc

测试设置成功

$ echo $USE_CCACHE
  1. 相关依赖包:仅适用于12.04,其它操作系统依参考资料1而定。
$ 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
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

所有软件安装完毕,使用java -version等命令检查版本正确

源码下载与配置

工作目录**/home/${user}/**

源码下载

  1. 下载repo: repo是基于git开发的一套源码下载工具,可以实现并行下载。

设置目录和repo的PATH

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

注:此处若网络出错,可能是GFW原因。在IPV6网络下可以添加hosts,参考ipv6 hosts,否则进行源码安装。

  1. 下载Android源码4.2.2:

设置工作目录

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

下载源码

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1.2b
$ repo sync

注:源文件大小为10G左右,喝杯茶,扭扭脖子休息一下吧。

源码编译配置

查看CPU核数,此参数用于并行编译

$ cat /proc/cpuinfo |grep "cores"|uniq

我的输出: cpu cores: 4; 于是并行编译时参数位-j8(即4×2)

编译:

$ source build/envelop.sh

ROM开发

$ lunch full_eng
$ make -j8

lunch: lunch用于选择不同的机型,full_eng为生成适合虚拟机的ROM。

编译完成后将在out目录下生成相应的ROM以及工具。

SDK开发

$ lunch sdk_eng
$ make sdk

在out目录下会生成sdk,用于app的开发

虚拟机运行

编译虚拟机运行脚本

$ echo "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" > run.sh

$ chmod a+x run.sh
$ ./run.sh

虚拟机启动成功,Android ROM自动加载运行,完成。

参考

  1. Android Donwloading and Building

问题

问题1:

error: error reading out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar; invalid header field
1 error
make: *** [out/target/common/obj/APPS/FrameworksCoreTests_intermediates/classes-full-debug.jar] Error 41

解决1:

$ make clean # 删除临时编译的文件
$sudo update-alternatives --config jar 选择相应包

参考

问题2:

make: *** [out/target/common/docs/online-gcm-ref-timestamp] Error 45

解决2:

$ git revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e 

服务器配置

网络环境

配置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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!