这篇文章上次修改于 1365 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
title: AOSP源码编译android-8.1.0_r1记录
date: 2020/12/21 21:49:05
updated: 2020/12/21 21:49:05
permalink: compile-android810r1-note/
toc: true
前言
以kali 2020.4
为基础环境,目的如下:
- 达成
android-8.1.0_r1
源码编译Nexus 5X
版本的镜像 - 将编译后的镜像整合为刷机包并刷机
视频可能有些许出入,以文章为准
记录
系统初步设置
首先kali开机,默认用户是kali,密码也是kali
设置一下root用户的密码
sudo passwd
然后重启,用root用户登录
如果是4K用户,建议菜单栏搜索HiDPI,设置下缩放
然后修改默认shell为bash,编辑/etc/passwd
找到root
有/usr/bin/zsh
那行,替换为/bin/bash,然后重启
nano /etc/passwd
可以通过下面的命令查看当前shell
echo $SHELL
修改源为中科大的
nano /etc/apt/sources.list
注释原有的地址,末尾添加下面的内容
deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
更新一波
apt-get update && apt-get upgrade
安装必要的库,参考官方指南搭建构建环境
apt-get install gnupg flex bison build-essential curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc fontconfig
关于所安装的相关库与官方的差异说明
- kali已经有zip、unzip、git和7z了
- kali源已经没有openjdk-8-jdk了,要另外手动配置
- 对于kali,需要把lib32ncurses5-dev修改为lib32ncurses-dev
配置git信息
git config --global user.name "SeeFlower"
git config --global user.email "[email protected]"
通过GParted新建额外的分区,然后新建一个目录,挂载之(演示gif略有差异,以文章为准)
注意这之后的操作都在myaosp中进行,除了刷机部分
mkdir myaosp
fdisk -l
mount /dev/sda3 ~/myaosp
cd myaosp
repo同步源代码
下载repo(放/usr/bin
相对方便一点)
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
调整一下python3的优先级,因为要源码同步用到python3
update-alternatives --install /usr/bin/python python /usr/bin/python2 100
update-alternatives --install /usr/bin/python python /usr/bin/python3 150
因为我这里用中科大的也很慢,所以用了proxychains,注意在kali 2020.4
,应该编辑的文件是/etc/proxychains4.conf
开始repo init操作(会填一次y)
proxychains repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.1.0_r1 --depth=1
开始同步源代码
repo sync -c -j8
记住重复执行上面这个命令,直到最后的结果是
repo sync has finished successfully.
设置对应设备的驱动
首先查看当前系统版本对应的Build号,比如8.1.0_r1对应的是OPM1.171019.011
,具体在这里查看
https://source.android.com/setup/start/build-numbers
驱动下载地址如下,根据Build号搜索与设备对应的驱动
https://developers.google.com/android/drivers
下载驱动、增加权限、执行sh解压驱动、删除压缩包
wget https://dl.google.com/dl/android/aosp/lge-bullhead-opm1.171019.011-2c4b1025.tgz
wget https://dl.google.com/dl/android/aosp/qcom-bullhead-opm1.171019.011-79a898aa.tgz
tar zxvf lge-bullhead-opm1.171019.011-2c4b1025.tgz
tar zxvf qcom-bullhead-opm1.171019.011-79a898aa.tgz
chmod a+x extract-lge-bullhead.sh && chmod a+x extract-qcom-bullhead.sh
./extract-lge-bullhead.sh
./extract-qcom-bullhead.sh
rm lge-bullhead-opm1.171019.011-2c4b1025.tgz qcom-bullhead-opm1.171019.011-79a898aa.tgz
配置java环境
https://jdk.java.net/java-se-ri/8-MR3
下载Oracle Linux 7.6 x64 Java Development Kit (md5) 167 MB,然后解压(我的网络不好,所以用了proxychains)
proxychains wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz.md5
tar zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
添加到/etc/profile
JAVA_HOME=~/myaosp/java-se-8u41-ri
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export JAVA_HOME
export PATH
export CLASSPATH
正式编译
使java环境生效
source /etc/profile && source /root/.bashrc
可以通过-version
来确认
java -version
javac -version
再次调整python优先级
update-alternatives --install /usr/bin/python python /usr/bin/python2 150
update-alternatives --install /usr/bin/python python /usr/bin/python3 100
lunch选择对应的设备,我这里是bullhead,前面驱动也是
直接输入m
,程序会自动选择最合适的并行任务数量
export LC_ALL=C && . build/envsetup.sh
lunch
m
正式开始编译后,个人经验,只要到5%没有报错,后面就没有什么问题了
最终生成的相关镜像在out/target/product/bullhead
下
如果要重新编译记得先清理之前的一些东西,用m clobber
命令,注意命令m
是在. build/envsetup.sh
后才有效的
如果重启后要编译,记得先把那个分区挂载上
mount /dev/sda3 ~/myaosp && cd ~/myaosp
source /etc/profile && source /root/.bashrc && export LC_ALL=C
. build/envsetup.sh
m clobber
lunch
m
刷机
新开一个终端
请根据Build号下载对应手机型号的工厂镜像,地址如下
https://developers.google.com/android/images
本文测试的是Nexus 5X具体对应的镜像地址是
https://dl.google.com/dl/android/aosp/bullhead-opm1.171019.011-factory-3be6fd1c.zip
下载后解压zip,并将解压结果中image开头的zip再次解压,只保留android-info.txt
最后将编译产生的img复制过来,并打包为zip,然后复制zip替换原有zip
wget https://dl.google.com/dl/android/aosp/bullhead-opm1.171019.011-factory-3be6fd1c.zip
7z x image-bullhead-opm1.171019.011.zip -oimage-bullhead-opm1.171019.011
cd image-bullhead-opm1.171019.011
rm *.img
cp ~/myaosp/out/target/product/bullhead/*.img .
zip -r image-bullhead-opm1.171019.011.zip *
注意刷机要用到fastboot(adb也可能用到)
所以临时把它们添加到环境变量
export PATH=~/myaosp/out/host/linux-x86/bin:$PATH
可以用adb查看下手机刷机前的系统编译日期,对比下刷机之后的日期
adb shell getprop ro.build.date
刷机
./falsh-all.sh
如果刷机碰到error: Cannot generate image for userdata
报错
编辑flash-all.sh,把-w
去掉,重新刷机
参考链接
- https://www.jianshu.com/p/baf7a71446e0
- https://www.anquanke.com/post/id/199898
- https://mirrors.ustc.edu.cn/help/kali.html
- https://developers.google.com/android/drivers
- https://source.android.com/setup/build/downloading
- https://source.android.com/setup/build/initializing
- https://source.android.com/setup/start/build-numbers
- https://github.com/pantyyy/AndroidReverse_Note/blob/master/android-7.1.2_r8%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91/android-7.1.2_r8%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91.md
已有 2 条评论
我试着编译了一次 没有加驱动 编译出来没有vendor.img 刷机后无限重启 刷入官方的vendor.img就好了 不过开机后或弹窗提示系统内部错误 请联系设备提供商啥的 不知你加了驱动 生成的镜像有vendor.img没有
@wonson 肯定是要带着驱动编译的