ubuntu:16.04.1 内存:20.9G 硬盘:400G
Google手机:Pixel3a 解锁 root
一、环境配置
安装jdk
sudo apt-get install openjdk-8-jdk
1.1、安装git
1.1.1、下载git
sudo apt install git
1.1.2、配置git
git config --global user.email "你的电子邮件地址"
git config --global user.name "你的名字"
1.2、安装python3
1.2.1、下载python3
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
1.2.2、解压python3
tar -zxvf Python-3.7.1.tgz
1.2.3、安装依赖工具
sudo apt install git-core libssl-dev libffi-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev lib32z-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
1.2.4、编译安装python3
./configure
sudo make install
1.2.5、python版本管理
ubuntu默认安装的python版本是python2.xx的,但是android10的源码编译需要python3的版本,这就需要我们在需要的时候,切换对应的python版本。
1.2.5.1、update-alternatives
update-alternatives --help
update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>
命令:
--install <链接> <名称> <路径> <优先级>
[--slave <链接> <名称> <路径>] ...
在系统中加入一组候选项。
--remove <名称> <路径> 从 <名称> 替换组中去除 <路径> 项。
--remove-all <名称> 从替换系统中删除 <名称> 替换组。
--auto <名称> 将 <名称> 的主链接切换到自动模式。
--display <名称> 显示关于 <名称> 替换组的信息。
--query <名称> 机器可读版的 --display <名称>.
--list <名称> 列出 <名称> 替换组中所有的可用候选项。
--get-selections 列出主要候选项名称以及它们的状态。
--set-selections 从标准输入中读入候选项的状态。
--config <名称> 列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
--set <名称> <路径> 将 <路径> 设置为 <名称> 的候选项。
--all 对所有可选项一一调用 --config 命令。
<链接> 是指向 /etc/alternatives/<名称> 的符号链接。(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。(如 pager)
<路径> 是候选项目标文件的位置。(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
..........
1.2.5.2、python2的路径
ls /usr/bin
1.2.5.3、python3的路径
ls /usr/local/bin
1.2.5.4、设置python2.7的比重
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
1.2.5.5、设置python3.7的比重
update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 3
1.2.5.6、切换版本
update-alternatives --config python
二、AOSP下载源码科大AOSP镜像
2.1、首先下载 repo 工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
2.2、然后建立一个工作目录(名字任意)
mkdir android10
cd android10
2.3、初始化仓库,如果需要某个特定的 Android 版本:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0-r41
2.4、同步源码树(以后只需执行这条命令来同步):
repo sync
三、AOSP编译源码
3.1、下载相关驱动
3.2、解压并运行相关sh脚本
1、tar -zxvf google_devices-sargo-qq3a.200805.001-ca5e20a1.tgz
2、tar -zxvf qcom-sargo-qq3a.200805.001-ebd290fb.tgz
3、chmod u+x extract-google_devices-sargo.sh
4、chmod u+x extract-qcom-sargo.sh
5、./extract-google_devices-sargo.sh
6、./extract-qcom-sargo.sh
在执行sh脚本的时候,一定要注意其过程中还要手动输入“I ACCEPT”
3.2.1,运行google的驱动脚本,编译生成的bootloader.img、radio.img、vendor.img在后面刷机的时候需要
3.2.2,运行其他设备的驱动脚本(./extract-qcom-sargo.sh)
3.3、运行envsetup.sh
3.4、运行lunch,选择正确的target
"sargo"就是我们下载驱动的时候,对应的tag标识。
选择product后,在后面的输出里面就可以看到我们要编译的相关信息。
3.5、执行make指令(编译至少需要16G的内存,当初内存小于16G,总是编译失败,最后狠心买了一个16G内存,把总内存搞到了24G,虚拟器内存调到最大内存建议)
耗时5个半小时…,终于看到了曙光。
四、刷机
4.1、很多教程的方法(自己一直都没有刷成功,最后放弃了)
4.1.1、连接虚拟机
第一次可能ubuntu无法连接到手机,这时需要设置一下usb。
查看ubuntu的usb设备
lsusb
在/etc/udev/rules.d文件夹找到70-android.rules文件,如果没有,就重新创建,并编辑如下内容:
SUBSYSTEM== "usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"
其中idVendor和idProduct的值要和lsusb列出来的ID值保持一致
配置上面的文件的话,没有权限,这时就需要我们在手机上给授权。如果没有弹出授权的弹窗,可以先执行adb kill-server,然后使用sudo adb devices,多次尝试,就会有弹出。
当我们手机连上电脑后,会自动弹出下面的弹窗,让我们选择连接主机,还是连接虚拟机,这里我们选择连接虚拟机,并且选择下面的虚拟机名称。
4.1.2、调整连接状态
4.1.3、adb devices
如果遇到上面的错误,执行adb kill-server,重新启动adb server
4.1.4、执行adb reboot fastboot,此时手机会进入
4.1.5、执行fastboot flashall -w
一直报这样的错误,无解,放弃了…
终于找到解决方法了:
4.1.6、进入到out/target/product/sargo目录,执行fastboot flashall -w
此时即使显示已经手动连接了ubuntu,但是依然停留在waiting for any devices…。解决方法是第一次设备连接虚拟机选择ubuntu的时候,一定要勾选下面的“记住我的选择”,这样在刷机重启的过程中,就会自动连接ubuntu了。
4.1.7、在/etc/profile里面配置ANDROID_PRODUCT_OUT
export ANDROID_PRODUCT_OUT=/home/ubuntu/android10/out/target/product/sargo
export PATH=$PATH:$ANDROID_PRODUCT_OUT
PS:执行source /etc/profile以后,即使echo $ANDROID_PRODUCT_OUT生效了,但是还需要重新打开一个新的Terminal编译。
重新执行以下命令即可:
1、source build/envset.sh
2、lunch并且选择对应的product
3、make
4、adb devices(检查设备是否连接)
5、adb reboot bootloader(重启设备,进入fastboot状态)
6、fastboot devices(检查进入fastboot状态的设备)
7、fastboot flashall -w(刷入ANDROID_PRODUCT_OUT下的所有镜像文件)
4.2、windows上线刷
4.2.1、线刷google出厂镜像
- 下载google出厂镜像(我的手机是Pixel3a)
https://developers.google.cn/android/images#shamu
- 下载platforms-tools
https://developer.android.com/studio/releases/platform-tools.html
- 全部解压,并放到一起
- 运行flash-all.bat
4.2.2、ubuntu编译的相关文件名修改为出厂镜像一样的。
- vendor驱动名称修改
- 压缩out/target/product/sargo下的boot.img、dtbo.img、product.img、super_empty.img、system.img、system_other.img、vbmeta.img、vendor.img并命名为image-sargo-qq3a.200805.001.zip
之所以和出厂镜像的名称命名保持一致,主要是不需要修改flash-all.bat脚本
自己编译的rom,并且还增加了一些额外的内容,证明系统应用我来过。哈啊哈…