本文基于Android 4.2.2源码搭建环境。
检查硬件环境: 使用df -h
检查个磁盘空间使用状况,保证/home空间充裕。
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
注:此方法需要下载69M文件,下载时间依网络而定。
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
注:此方法需要下载23M文件,下载时间依网络而定。安装完后需要设置global信息
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
安装
$ sudo apt-get install ccache
设置PATH
$ echo "export USE_CCACHE=1" >> ~/.bashrc
$ source ~/.bashrc
测试设置成功
$ echo $USE_CCACHE
$ 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}/
设置目录和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,否则进行源码安装。
设置工作目录
$ 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
$ lunch full_eng
$ make -j8
lunch: lunch用于选择不同的机型,full_eng为生成适合虚拟机的ROM。
编译完成后将在out目录下生成相应的ROM以及工具。
$ 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:
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