-
-
[原创]2022记录一次编译aosp并刷机n5x
-
2022-8-7 23:02
9762
-
说明
菜鸡尝试编译aosp源码,手中有一台n5x,专门用来折腾。之前刷了fart镜像,好奇制作过程,所以自己来捣鼓一下。原先想用r0env编译,有个依赖过不去(太菜了)还是自己搞个虚拟机吧*。*,把坑又踩了一遍。
编译环境
虚拟机
虚拟机这里选择vmware16 pro,破解版请自行查找
iso
iso这里选择ubuntu20,因为ubuntu的镜像小。试过centos7结果操作过程崩了T。T
镜像下载:ubuntu阿里开源镜像站
# 镜像md5
ca0c7f1cf362eef25f54f6cd61c5fdba *ubuntu-20.04.4-desktop-amd64.iso
Ubuntu配置如下,内存可开到12G,10G可以编译但还会有卡顿,并且安装过程中请立即分配磁盘,避免后面磁盘大小问题:
编译步骤
- 安装jdk,加入环境
1 2 3 4 5 6 7 | apt - get install openjdk - 8 - jdk
vim ~ / .bashrc
export JAVA_HOME = / usr / lib / jvm / java - 8 - openjdk - amd64
export PATH = $JAVA_HOME / bin :$PATH
source ~ / .bashrc
|
安装依赖, 提示没有python,就apt install python
1 | apt - get install git - core gnupg flex bison gperf build - essential zip curl zlib1g - dev gcc - multilib g + + - multilib libc6 - dev - i386 lib32ncurses5 - dev x11proto - core - dev libx11 - dev lib32z - dev libgl1 - mesa - dev libxml2 - utils xsltproc unzip
|
下载 repo 工具
1 2 3 4 5 6 7 8 9 10 | mkdir ~ / bin
PATH = ~ / bin :$PATH
curl https: / / aosp.tuna.tsinghua.edu.cn / git - repo - downloads / repo > ~ / bin / repo
chmod a + x ~ / bin / repo
vim ~ / .bashrc
在文件末尾加入
export PATH = ~ / bin :$PATH
source ~ / .bashrc
|
选择磁盘空间大的建立源码下载文件夹,如果磁盘不够请自行扩展磁盘和挂载文件夹
1 2 | mkdir - p data / aosp / android - 8.1 . 0_r20
cd data / asop / android - 8.1 . 0_r20
|
初始化git,repo;初始化repo中应查询清楚编译出来的镜像是否适配手中的手机
细分版本号查询
1 2 3 4 5 6 | git config - - global user.name "***"
git config - - global user.email "you@example.com"
export REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
repo init - u git: / / mirrors.ustc.edu.cn / aosp / platform / manifest - b android - 8.1 . 0_r20
|
下载源码, 过程很长,请耐性等待
1 2 3 | repo sync - j1
repo sync - - current - branch
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | fn_repo_sync()
{
repo sync - j8 2 >& 1 | tee sync_log.txt
}
fn_get_source_code()
{
echo "fn_get_source_code:$(pwd)"
fn_repo_sync
FETCH_ERROR = `grep - i "error: Exited sync" - A 1 sync_log.txt`
echo "${FETCH_ERROR}"
while [ - n "${FETCH_ERROR}" ]
do
echo "Need to pull the code again"
fn_repo_sync
FETCH_ERROR = `grep - i "error: Exited sync" - A 1 sync_log.txt`
done
echo "leave begin download source"
}
fn_get_source_code
|
下载驱动
下载源码对应版本驱动并解压放入源码根目录:驱动下载
依次执行刚解压的shell文件(别enter的太急),每个文件执行都需要在最后输入 “I AGREE”,所以谨慎enter(坑人)。
- 下载源码后并执行完成驱动文件后的项目根目录:
make clobber:删除所有以前编译操作的已有输出,如果编译过单项重新编译就执行这条命令
编译
选择设备编译系统:查询设备编译系统
1 2 3 4 5 6 7 8 9 10 | source build / envsetup.sh
lunch aosp_hammerhead - userdebug
export CLASSPATH = .:$JAVA_HOME / lib:$CLASSPATH
export LC_ALL = C
ulimit - c unlimited
make - j8
|
编译完成
- 编译完成后的镜像在out文件夹下
刷机
配置镜像环境变量
1 | export ANDROID_PRODUCT_OUT = / root / data / android - 8.1 . 0_r20 / out / target / product / bullhead
|
进入fastboot模式
开始刷机
如果遇到这个错误“error: Cannot generate image for userdata”,请删除 -w执行
刷机结束,等待手机重启
遇见问题
- 在编译步骤中出现错误最多的可能在下载源码和编译过程中
- 下载源码的错误多为源的问题,选择国内源即可
- 编译过程中的错误多为环境和版本的问题。环境依赖需要安装齐全,并且查漏补缺把环境补全;并且手机型号,源码,驱动以及设备编译系统都要一致,不可错乱,以免变砖=。=
- 在刷机中的问题一般比较简单,一般把oem锁打开刷机即可成功,如有问题可自行搜索
小结
这次编译本想周末搞完,没想到搞了一个礼拜(踩坑*N),中间还差点手机变砖T。T到总算编译刷机成功。对于fart镜像将相应的代码替换源码编译应该就可以了(还没试)。关于过root检测等系统级别的操作在 编译步骤-8 之前做出修改再编译也应是同理。在网上也有其他编译的文章,但多多少少都有点出入,写完这篇文章,根据步骤自己是可以编译和刷机成功的,但如果还有出入,需自行甄别实现。(手机变砖概不负责)
加油,少年。。。
相关文章
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2022-8-9 22:53
被andyhah编辑
,原因: 文中一处版本号对应问题