源码分析

Mac 10.13 编译Android 8.1 源码

2018-09-23  本文已影响405人  CrystalIFDE

Mac OSX 10.13 编译Android 8.1 源码

记录一下编译源码时候爬的坑~~~

仅为学习Android Framework用,不编译ROM

下载及编译流程参照

https://www.jianshu.com/p/759a6677c946

原文是编译6.0,这里是针对编译8.1进行修改,以及对可能出现的问题进行补充说明

建议先阅读该文章后,再看这里的修改

感谢原作者

环境:

MBP 256G

Mac OSX 10.13

JDK8u151(与此次编译源码无关,用这个版本是因为只有它可以打开Device Monitor)

MacOSX10.13.sdk

下载:

1:网络

我这里是连的Google,100M带宽2-3小时左右

2:磁盘

按照原文配置大小写敏感的镜像

但是要注意:空间分配上面,我这里256GB的磁盘空间不够!!!
一开始分了150GB,完整编译源码时还是报容量不足,后来就只编了Framework
如果你是跟我一样的用途,这里分100GB即可。如果需要完整编译,
建议根据自己硬盘空间情况,酌情设置镜像大小(建议越大越好,至少200GB。这个分配以后不会直接占用空间,写入文件后才会增长)

3:开始下载

repo init

改为

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r15

原文是编译6.0,我这里是8.1,所以就换了个8.1的分支

编译:

原文是10.12的SDK,实测现在(2018/09/23)下载XCode后,会自带10.13的SDK,我们用这个就好,不必下载10.12
原文需要修改mac_version.mk,然而8.1的源码里并没有这个文件,无需处理
lunch后,选择版本,原文是编译ROM到手机上刷机用,这里只需要选择x86-x64就好
如果需要全部编译,在根目录下执行

make

如果你只需要Framework,在根目录下执行

make framework

4:如果一切顺利的话,这时候按照原文来处理就结束了

5:然而,顺利是不可能顺利的,这辈子都不可能顺利的

6:遇到的问题(划重点)

这里的问题基本是必定会报,可以提前修好再去编译

(1):Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]

默认编译只支持上面写的那几个SDK,然鹅我们用的是10.13,怎么办呢?

vim build/soong/cc/config/x86_darwin_host.go 

把10.13加上去

SDK.jpg

(2):Could not find jdk tools.jar at /lib/tools.jar, please check if your JDK was installed correctly

首先确保你的JDK环境变量是配置正确的

sudo vim /etc/profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后你会发现,配置正确也并没什么X用

vim build/core/find-jdk-tools-jar.sh

这个脚本里面,Google定义的是ANDROID_JAVA_HOME
惊不惊喜,意不意外?【手动滑稽】
很简单了,要么你再配置一份ANDROID_JAVA_HOME,要么直接把这个脚本改成JAVA_HOME

JAVA_HOME.jpg

(3):ninja: build stopped: subcommand failed

原因:
With format string strictness, High Sierra also enforces that %n
isn't used in dynamic format strings, but we should just disable
its use on darwin in general.

修复:cherry-pick一个commit

cd external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm

如果还是报错

回到根目录
source build/envsetup.sh
lunch 然后选择对应版本
cd external/bison
mm
回到根目录 
cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/

(4):ninja: build stopped: subcommand failed / Out of Memory

编译分配的内存不够

cd out/host/darwin-x86
jack-admin stop-server
vim jack-admin

修改487行

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

改为

JACK_SERVER_COMMAND="java -Xmx3g -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
jack-admin start-server

如果报错,先执行

jack-admin install-server

7:编译完成

MBP 2015,i7-4750H + 16G,只编译Framework,花了30分钟左右。
完成后按照原文所说,用idea查看即可
放个和正常Android项目的对比图

Normal Project.jpg Source Code.jpg

可以看到,已经可以打开@hide的API了

参考

https://www.jianshu.com/p/ff37e58b0615

https://blog.csdn.net/u013553529/article/details/54869266

上一篇 下一篇

猜你喜欢

热点阅读