最近想研究下竞品app的页面,为了在真机上使用用hierarchyviewer工具,dump下数据库,就想起以前开发机的好处了。手上正好有个nexus 6p,完全可以自己编译aosp源码,刷个user-debug的开发机。毕竟系统都可以debug了,装在上面app就好更好揉捏了。
准备
Ubuntu 18.04.1 LTS
笔记本 cpu 4核i5 内存8G 256G ssd
nexus 6p (angler)
预留空余磁盘160G以上,源码加编译结果占用了148G
open-jdk8环境
访问google的能力
https://source.android.com/setup/build/requirements
步骤
-
下载源码
注意手机支持的分支,直接检出
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r47
repo sync -j4
查看repo当前检出分支 git --git-dir .repo/manifests/.git/ branch -a
失败了不要紧,重新sync就好,之前下载的有缓存不会重头开始的
-
下二进制文件(vendor的驱动)
注意驱动对应的build number,而build bumber和之前检出的分支对应 OPM7.181005.003 android-8.1.0_r47
对应关系查看https://source.android.com/setup/start/build-numbers
华为的和高通的两个文件都要下载 解压后运行对应的sh文件,会在aosp的根目录生成vendor目录
下载地址:https://developers.google.com/android/drivers -
改环境,使用openjdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
export LC_ALL=C
- 编译源码
build/envsetup.sh
lunch aosp_angler-userdebug
make -j4
- 刷机
export ANDROID_PRODUCT_OUT=your-aosp-path/out/target/product/angler
fastboot flashall -w
问题
- 1、ninja: build stopped: subcommand failed ninja failed with: exit status 1
解决:可能是本地环境问题 export LC_ALL=C
ref:https://stackoverflow.com/questions/51324238/aosp-build-stopped-subcommand-failedhttps://www.programering.com/a/MDM3UzNwATQ.html
LC_ALL=C is to remove all localized settings, make the correct execution.
- 2、/bin/bash: xmllint: command not found
解决:安装xmllint
sudo apt-get install libxml2-utils
- 3、Build with Jack .... Out of memory error GC overhead limit exceeded. Try increasing heap size with java option '-Xmx'.
解决:修改jack-server的配置文件ref:http://www.2net.co.uk/blog/jack-server.html
vim ~/.jack-settings
添加一行:
JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
重启下jack-server:
prebuilts/sdk/tools/jack-admin kill-server
prebuilts/sdk/tools/jack-admin start-server
- 4、flash完后不断重启
可能原因:
1>、binary文件只下了一个
2>、没有下载对应build numer的binary文件
3>、编译因为错误中断过,继续编译引起的。
解决:可能某些中间文件不完全或受损,把out文件夹删掉后再整编一次
网友评论