Ubuntu下载android10源码和编译并刷入Google Pixel3a真机

ubuntu:16.04.1 内存:20.9G 硬盘:400G
Google手机:Pixel3a 解锁 root

一、环境配置

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 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)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
..........

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第1张图片

1.2.5.2、python2的路径

ls /usr/bin

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第2张图片

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

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第3张图片

二、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、下载相关驱动

在这里插入图片描述
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第4张图片
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第5张图片

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”
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第6张图片

3.2.1,运行google的驱动脚本,编译生成的bootloader.img、radio.img、vendor.img在后面刷机的时候需要

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第7张图片

3.2.2,运行其他设备的驱动脚本(./extract-qcom-sargo.sh)

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第8张图片

3.3、运行envsetup.sh

3.4、运行lunch,选择正确的target

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第9张图片
"sargo"就是我们下载驱动的时候,对应的tag标识。
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第10张图片
选择product后,在后面的输出里面就可以看到我们要编译的相关信息。

3.5、执行make指令(编译至少需要16G的内存,当初内存小于16G,总是编译失败,最后狠心买了一个16G内存,把总内存搞到了24G,虚拟器内存调到最大内存建议)

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第11张图片

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第12张图片
耗时5个半小时…,终于看到了曙光。
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第13张图片

四、刷机

4.1、很多教程的方法(自己一直都没有刷成功,最后放弃了)

4.1.1、连接虚拟机

第一次可能ubuntu无法连接到手机,这时需要设置一下usb。
查看ubuntu的usb设备

lsusb

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第14张图片
在/etc/udev/rules.d文件夹找到70-android.rules文件,如果没有,就重新创建,并编辑如下内容:

SUBSYSTEM== "usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第15张图片
其中idVendor和idProduct的值要和lsusb列出来的ID值保持一致
在这里插入图片描述
配置上面的文件的话,没有权限,这时就需要我们在手机上给授权。如果没有弹出授权的弹窗,可以先执行adb kill-server,然后使用sudo adb devices,多次尝试,就会有弹出。

当我们手机连上电脑后,会自动弹出下面的弹窗,让我们选择连接主机,还是连接虚拟机,这里我们选择连接虚拟机,并且选择下面的虚拟机名称。
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第16张图片

4.1.2、调整连接状态

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第17张图片

4.1.3、adb devices

在这里插入图片描述
如果遇到上面的错误,执行adb kill-server,重新启动adb server

4.1.4、执行adb reboot fastboot,此时手机会进入

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第18张图片

4.1.5、执行fastboot flashall -w

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第19张图片
一直报这样的错误,无解,放弃了…
终于找到解决方法了:

4.1.6、进入到out/target/product/sargo目录,执行fastboot flashall -w

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第20张图片
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第21张图片
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第22张图片
此时即使显示已经手动连接了ubuntu,但是依然停留在waiting for any devices…。解决方法是第一次设备连接虚拟机选择ubuntu的时候,一定要勾选下面的“记住我的选择”,这样在刷机重启的过程中,就会自动连接ubuntu了。
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第23张图片

4.1.7、在/etc/profile里面配置ANDROID_PRODUCT_OUT

ANDTOID_PRODUCT_OUT=/home/ubuntu/android10/out/target/product/sargo

在这里插入图片描述
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下的所有镜像文件)
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第24张图片

4.2、windows上线刷

4.2.1、线刷google出厂镜像

  • 下载google出厂镜像(我的手机是Pixel3a)
https://developers.google.cn/android/images#shamu

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第25张图片

  • 下载platforms-tools
https://developer.android.com/studio/releases/platform-tools.html
  • 全部解压,并放到一起
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第26张图片
  • 运行flash-all.bat

Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第27张图片
Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第28张图片

4.2.2、ubuntu编译的相关文件名修改为出厂镜像一样的。

  • vendor驱动名称修改
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第29张图片
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第30张图片
  • 压缩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
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第31张图片
    之所以和出厂镜像的名称命名保持一致,主要是不需要修改flash-all.bat脚本
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第32张图片
    自己编译的rom,并且还增加了一些额外的内容,证明系统应用我来过。哈啊哈…
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第33张图片
    Ubuntu下载android10源码和编译并刷入Google Pixel3a真机_第34张图片

你可能感兴趣的:(android,Framework,Android基础,ubuntu,android源码编译)