作为一名Android开发者,你可能对Android源码充满了好奇,或者想尝试自己动手编译ROM。受限于网络环境及硬件配置,只能望而兴叹。本文将介绍一种以极低的成本实现这一目标的方法(共计花费半天时间和1美刀)。出发吧少年!
准备
在Vultr注册帐号(Vultr相关优惠码请自行Google),充值并购买VPS主机,尽量选择高配置机器,不要被月付的费用吓倒,实际使用中是按小时计费。
编译环境
环境配置
安装依赖
1
| $ sudo apt-get update && sudo apt-get install git ccache automake lzop bison gperf build-essential zip unzip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven bc pngquant imagemagick yasm
|
安装JDK
Android Open Source Project(AOSP)的master分支需要Java 8。在Ubuntu下可以使用OpenJDK。
1 2
| $ sudo apt-get update $ sudo apt-get install openjdk-8-jdk
|
下载源码
本文以MoKee源码为例(MoKee Open Source是基于Google AOSP开发的一个Android分支,并适配了多个机型)。
配置Git
1 2
| $ git config --global user.name "Your Name" $ git config --global user.email "you@example.com"
|
安装Repo
Repo是一个方便在Android中使用Git的工具
1 2
| $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
|
1
| $ echo "export PATH=~/bin:$PATH" >> ~/.bashrc
|
初始化Repo客户端
新建一个目录用来存放源码文件
同步源码
1 2 3
| $ cd ~/mokee $ repo init -u https://github.com/MoKee/android -b mkn-mr1 $ repo sync -j4 -f --no-clone-bundle
|
同步结束,查看源码目录
1 2 3 4 5 6 7 8 9
| root@AndroidDev:~/mokee# ls Android.bp bootstrap.bash doc out system Makefile build external packages toolchain abi colors frameworks pdk tools android cts hardware platform_testing vendor art dalvik kernel plugin autoload developers libcore prebuilts bionic development libnativehelper sdk bootable device ndk syntax
|
使用ccache编译缓存,让 C 和 C++ 更快的构建
1 2
| $ echo "export USE_CCACHE=1" >> ~/.bashrc $ ~/mokee/prebuilts/misc/linux-x86/ccache/ccache -M 25G
|
编译源码
初始化环境
1
| $ source ./build/envsetup.sh
|
选择编译目标(这里作了省略未列出全部编译目标)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| $ lunch You're building on Linux
Lunch menu... pick a combo: 1. m_e_arm-userdebug 72. mk_kltechn-userdebug 2. mini_emulator_arm64-userdebug 73. mk_kltechnduo-userdebug 3. mini_emulator_x86-userdebug 74. mk_klteduos-userdebug 4. mini_emulator_x86_64-userdebug 75. mk_kltedv-userdebug 5. mk_a6000-userdebug 76. mk_kltekdi-userdebug 6. mk_a6020-userdebug 77. mk_kltekor-userdebug 7. mk_angler-userdebug 78. mk_kltespr-userdebug 8. mk_armani-userdebug 79. mk_klteusc-userdebug 9. mk_athene-userdebug 80. mk_lentislte-userdebug 10. mk_axon7-userdebug 81. mk_leo-userdebug 11. mk_bacon-userdebug 82. mk_lettuce-userdebug 12. mk_bullhead-userdebug 83. mk_libra-userdebug 13. mk_cancro-userdebug 84. mk_ls990-userdebug 14. mk_capricorn-userdebug 85. mk_lux-userdebug 15. mk_che10-userdebug 86. mk_m7-userdebug 16. mk_cherry-userdebug 87. mk_m7vzw-userdebug 17. mk_clark-userdebug 88. mk_m8-userdebug 18. mk_condor-userdebug 89. mk_m8d-userdebug 19. mk_d2att-userdebug 90. mk_mako-userdebug
Which would you like? [aosp_arm-eng]
|
选择Nexus4
可在mokee查找自己所需的设备代码,如Nexus4对应设备代码为mako
1 2
| $ lunch mk_mako-userdebug $ mka bacon
|
编译成功
编译结果
MK71.1-mako-201704110629-UNOFFICIAL.zip为刷机包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| root@AndroidDev:~/mokee/out/target/product/mako# ls MK71.1-mako-201704110629-UNOFFICIAL.zip obj MK71.1-mako-201704110629-UNOFFICIAL.zip.md5sum ota_script_path android-info.txt previous_build_config.mk boot.img ramdisk-recovery.cpio build_fingerprint.txt ramdisk-recovery.img cache ramdisk.img cache.img recovery clean_steps.mk recovery.id data recovery.img fake_packages root gen symbols install system installed-files.txt system.img kernel userdata.img mk_mako-ota-cfcce54acd.zip
|
下载ROM
1
| $ scp root@your server ip:/root/mokee/out/target/product/mako/MK71.1-mako-201704110629-UNOFFICIAL.zip /Users/Downloads/rom
|
1
| MK71.1-mako-201704110629-UNOFFICIAL.zip 100% 335MB 79.7KB/s 1:11:39
|
The End
Tips:在Vultr中给当前机器添加一个Snapshots(快照),Vultr提供了免费保存Snapshots的服务,至此VPS可以暂且Destroy了,下次需要时直接使用Snapshots布署。
参考资料
Mokee wiki
Source Android