编译安卓8.0源码,直接开涮就是了。
我的系统环境:
Mac10.14.5
Mac SDK版本:10.11
make版本3.81
编译安卓版本:android 8.0.0-r31
大纲
1、如何下载安卓源码
2、如何编译安卓源码
看着简单,实际上坑是无比的多,现在就为了减少小伙伴们浪费宝贵时间,这里根据mac当前最新版系统给大家来个安卓8.0源码编译的预热。
1、如何下载安卓源码
一、安装repo:
确保您的主目录中有一个 bin/ 目录,并且它包含在您的路径中:
mkdir ~/bin
PATH=~/bin:$PATH
二、下载 Repo 启动器,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
三、初始化 Repo 客户端 ,挑选一个空目录来安置你的repo工作文件
mkdir filePackageName
cd filePackageName
四、运行 repo init 可以获取最新版本的资源,这里如果你需要获取指定版本的资源,需要后面跟上指定的版本号。
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
点击查看安卓版本列表。
repo init
// 指定版本资源,请使用 -b 指定此分支
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r31
// -u 是指定从什么源下载资源,如果google服务受限,这里你可以使用清华源,具体清华源的只需要把-u后面的地址换成清华源的地址就OK。
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r31
五、要将 Android 源代码树从默认清单中指定的代码库下载到工作目录
repo sync
这里就是漫长的同步过程。
sync同步完成后,我们就完成了安卓源码的下载。这里有两个坑:
- 安卓源码资源较大
- 因为墙的关系,只能使用第三方镜像,可能受服务稳定性因素影响
这里插一句嘴,通过谷歌没有拉代码提示time out 的另外一种原因还可能是无权限,需要对谷歌账号授权。https://android.googlesource.com/new-password
点击此地址按照提示完成授权即可。
2、如何编译源码
这里由于笔者没有Ubuntu,穷的只有单位的mac,这里尴尬只会mac环境配置请见谅。
一、创建文件系统
可以通过 shell 使用以下命令创建文件系统:
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/AndroidSourceCode/android.dmg
如果后期觉得这个内存小了,可以随时动态命令修改,但是需要先卸载路径
//卸载挂载文件
hdiutil detach /Volumes/android
//重新设置大小
hdiutil resize -size 150g ~/android.dmg.sparseimage
//重新挂载关联,之前笔者是在Code根目录下创建的android.dmg
hdiutil attach ~/Code/android.dmg -mountpoint /Volumes/android
这里有一个坑,笔者在重置大小重启设备后依然没有生效,重复2次操作后才生效。如何验证是否生效。
// 查看盘符大小
df -h
二、安装 Xcode 命令行工具
常规命令如下:
xcode-select --install
但是大伙在新版xcode会发报错,Mac最新场景下安装Xcode时已经没有Command Line了,需要单独安装。根据提示在使用命令xcode-select --install 安装时最后结果是不能安装该软件。
解决方案:
Developer Apple上手动下载对应的Command Line Tools
安装即可。
三、安装 MacPorts 或 Homebrew 以进行软件包管理。
如果使用 MacPorts:
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg bison
如果使用 Homebrew:
brew install git gnupg2 bison gmake libsdl
java jdk这些基础依赖小伙伴们肯定有了,就忽略了啊。
三、设置文件描述符数量上限
在 macOS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。要提高此上限,请将下列行添加到 ~/.bash_profile 中:
# set the number of open files to be 1024
ulimit -S -n 1024
哈哈,此时此刻激不激动,我们要编译了。这里建议大家全部采用mac 自己的bash 不要用zsh或者其他第三方bash,容易出现莫名其妙的问题,笔者就是被这些莫名其妙的问题搞了一天,最终切回系统bash完美解决.
四、编译前的最后一道准备,清除数据
make clobber
这里很多人会遇到下面两个坑:
- 找不到jdk,这个在根目录的.bash_profile文件中添加
export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
第二个问题是找不到对应的MacOSX.sdk,比如找不到MacOSX10.12.sdk,你需要到 https://github.com/phracker/MacOSX-SDKs/releases 下载需要的版本,我这里下载的是MacOSX10.12.sdk,解压复制到如下目录
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
接下来会碰到第三个问题,log如下如下,可能每个人显示的都不一样的,注意看是否有external/bison/这些log。参考build aosp on Mac OS 10.13 failed来解决
Patch [bison fix](https://android-review.googlesource.com/c/platform/external/bison/+/517740) for High Sierra and build bison:
1. cd /Volumes/AOSP/external/bison
2. git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
3. mm
Replace prebuilt bison binary with patched binary
1. cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/
Build
1. make -j12
如果mm命令无法执行,需要回去执行以下命令
1. source build/envsetup.sh
2. lunch 之后回到external/bison目录
3. mm
五、设置环境
source build/envsetup.sh
六、lunch
这里在设备列表里面根据想要刷机的设备自己选择就好了,一般不选择就默认是1.这里建议啊如果是在自己模拟器上跑就是选x86如果是在其他真机中,大部分都是arm.
七、编译代码
make -jN
// 示例:我的电脑是6核心。就是6*2=12
make -j12
-jN 表示编译并行任务数,这个示电脑情况而定,一般取cpu数的1~2倍就可以
如果你按照我的设置都设置过,那你遇到的坑,在上面找不到的就一个了,内存不足的坑,哈哈。
我这里是用Mac SDK10.11编译,如果您的设备SDK不想换就是10.12或者更高版本请参考https://www.jianshu.com/p/1513fc9e1a74
至此,安卓编译8.0源码篇结束,接下来会抽空写如何debug、查阅、完成安卓源码写入设备。