这篇文章上次修改于 1346 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

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去掉,重新刷机

参考链接