作为安卓从业人员,我们经常希望可以单步调试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.jayceat 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 moreInternal compiler error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce.
Warning: This may have produced partial or corrupted output.

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

  • oom问题
    出错如下

    解决办法参考http://blog.csdn.net/loongembedded/article/details/70243355 ,增加jvm堆内存上限。
    具体做法为修改prebuilts/sdk/tools/jack-admin文件
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

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

刷机

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

fastboot flashall -w

附刷机后图片

为nexus 5x编译android n固件相关推荐

  1. Nexus 5X 刷 Android 7.0

    针对Nexus 5x刷7.0: 7.0固件官方:https://pan.baidu.com/s/1cMICGm 步骤: 1.1 下载adb工具并解压 https://pan.baidu.com/s/1 ...

  2. 为Nexus5编译Android L固件

    为Nexus5编译AndroidL固件 Android 接前一篇文章使用Android Studio查看Android Lollipop源码, 我们知道,仅仅看代码,提高是比较有限的,而且理解起来也比 ...

  3. Nexus 5x 使用TWRP 刷root包

    本篇介绍在Nexus 5x上如何使用TWRP刷SuperSU来获取手机的root权限. 测试手机,Nexus 5x,Android版本6.0. TWRP安装 TWRP,全称是TeamWin Recov ...

  4. Android 相机方向传感,Nexus 5x反向横向传感器修复在Android相机预览...

    我是Android开发中的新手,所以如果我的问题很简单,我会提前道歉.在我的应用程序的一部分,我需要我的后置摄像头的实时预览,所以我创建了一个自定义类,扩展SurfaceView并实现SurfaceH ...

  5. nexus 6p android p,谷歌Nexus 5X/Nexus 6P无缘升级到Android P系统

    原标题:谷歌Nexus 5X/Nexus 6P无缘升级到Android P系统 谷歌近日推出了首个Android P开发者预览版,目前只针对开发者而提供的版本,适配"刘海"设计.现 ...

  6. 【Android】Nexus 5X 环境配置

    Nexus 5X 刷机root 前言 本来只是想学frida的,但是后面发现,模拟机很多东西都没有用(有些app安装不了.对root进行检查.禁用frida-) 在网上搜索教程,看到Github上一个 ...

  7. 迅为RK3588开发板单独编译Android固件

    进入到 3588-android12 文件夹,输入以下命令设置 java 版本为 1.8 版本,如下图所示: source javaenv.sh java -version 输入以下命令使能编译环境: ...

  8. Nexus 6 编译并刷机 Android 7.1.1 AOSP以及常用的修改源码快速验证方法

    一.编译相关资源链接 设备硬件二进制文件 Android分支支持设备列表 搭建构建环境 初始化源码仓库 repo init -u https://android.googlesource.com/pl ...

  9. 迅为RK3588开发板单独编译 Android 固件

    进入到 3588-android12 文件夹,输入以下命令设置 java 版本为 1.8 版本,如下图所示: source javaenv.sh java -version 输入以下命令使能编译环境: ...

最新文章

  1. 桶排序 Bin Sort
  2. ERP实施过程中的误区 你知道吗?
  3. 给用户增加SAP_ALL权限
  4. 在Visual Studio的Server Explorer中怎样修改表名
  5. 爬虫-访问登陆可见的页面-利用session类-补实例
  6. keystone nova v2 python
  7. Django项目实践1 - 创建Django项目
  8. 智能门锁电路图_科技生活|网传“小黑盒”刷开智能锁,人脸识别系统“翻脸不认人”?...
  9. wxWindows 最简单的Hello World程序
  10. Unity 内置渲染管线、SRP、URP、HDRP区别
  11. js 实现文件上传 php,JS+php后台实现文件上传功能详解
  12. 象棋程序 android,中国象棋人机对弈程序在Android系统上的设计与实现
  13. win 10键盘快捷方式就是按键或按键组合(收藏使用
  14. H.266/VVC代码学习:帧内预测之角度预测函数(predIntraAng、xPredIntraAng)
  15. 多角度解读新兴公链Sui:团队、架构、代币、生态等
  16. Often Misused: Authentication 一个ip日志你还要我怎样
  17. CREATE DATABASE guestbook DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  18. PLC模拟量传输过程
  19. Vue 设置背景图片样式
  20. php开发discuz插件,discuz x3插件开发傻瓜图文教程,用demo说话

热门文章

  1. speedoffice文档Word文字只显示一半?
  2. 如何购买赛门铁克的代码数字签名?
  3. GAMES101作业7-路径追踪实现过程代码框架超全解读
  4. android 张口逐帧动画,《Android 动画》逐帧动画
  5. 高德地图小程序步行路线显示_微信小程序之:小程序接入高德地图SDK
  6. php微博mid转换url,新浪微博mid和url的互算
  7. RC电容充电时间计算
  8. 基于JAVA-医院门诊分诊信息系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  9. Ruby中的inject
  10. 网站赞助打shang单页HTML源码