为nexus 5x编译android n固件

作为安卓从业人员,我们经常希望可以单步调试framework代码,可以方便的调试第三方应用。模拟器一般来说太慢,而且模拟器和官方sdk代码一样对应不上。最好的办法就是自己为nexus手机编译userdebug固件,本文以nexus 5x为例记录编译实践。

下载aosp源码

国内用户建议使用清华镜像,地址为https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ ,不赘述。
如果网络不够好,建议使用重试脚本,如

#!/bin/sh
repo sync -j4
while [ $? -ne 0 ]
do
repo sync -j4
done

也可以参考http://blog.csdn.net/xia0pang/article/details/20281071 根据网速来判断。
必要时可以使用repo sync –force-broken,可以在一个project下载失败时继续下载下一个,而不是失败退出。

切换分支

针对每款nexus手机的固件,aosp中都有对应的tag,我们需要将源码切换到对应的branch或者tag才可以。
参照https://source.android.com/source/build-numbers ,nexus 5x对应的最新细分版本为N4F26T,对应的分支为android-7.1.1_r24 。也就是说我可以将aosp源码切换到这个分支。

repo切换分支,参考http://blog.csdn.net/turui/article/details/7190676
摘抄如下

// 查看可切换的分支
cd .repo/manifests
git branch -a | cut -d / -f 3

// 切换到gingerbread-release分支
repo init -b gingerbread-release 
repo sync (not needed if your local copy is up to date)
repo start gingerbread-release --all 

// 查看当前的分支
repo branches 

下载驱动

aosp源码中并不包含厂商的闭源驱动,需要手动下载,地址为 https://developers.google.com/android/drivers
找到N4F26T对应的驱动,分别为
https://dl.google.com/dl/android/aosp/lge-bullhead-nmf26f-7bf6caec.tgz

https://dl.google.com/dl/android/aosp/qcom-bullhead-nmf26f-fa1a80d5.tgz
目前国内dl.google.com域名可以直接访问,如果浏览器点击下载链接迟迟没有反应,可以复制链接然后使用wget下载。

下载解压后均为.sh文件,放到aosp根目录执行脚本即可,中间会要求输入I ACCEPT同意协议。

编译环境

我使用的是ubuntu 16.04,参照官网中ubuntu 14.04的要求,比如使用open-jdk8,安装必要依赖包等。

编译

source build/envsetup.sh
lunch
// 选择aosp-bullhead-userdebug
make -j4

注意我们自己编译一般选择userdebug固件,运行速度快而且方便调试。

这里列出两个编译时遇到的问题

  • Internal compiler error
    错误描述如下
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
java.lang.AssertionError: java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce
    at com.android.sched.vfs.WriteZipFS$ZipEntryOutputStream.writeEntryIfNeeded(WriteZipFS.java:350)
    ...
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce
    ... 31 more

Internal compiler error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce.
Warning: This may have produced partial or corrupted output.

我的解决办法是直接make clean然后重试

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8-XX:+TieredCompilation -Xmx4096M}"

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

各自添加-Xmx4086M

之后的编译过程很顺利,附图
build_success

刷机

先在系统settings中打开oem锁开关,执行adb reboot bootloader进入bl界面,然后执行fastboot flashing unlock解锁。此时就可以开始刷机。
在源码编译完成后的终端执行

fastboot flashall -w

附刷机后图片
phone_status

猜你喜欢

转载自blog.csdn.net/w_xue/article/details/77418011
今日推荐