Ubuntu18.04编译AOSP10.0r41刷入Pixel3
2023-5-27 09:21:9 Author: 哆啦安全(查看原文) 阅读量:15 收藏

背景

已经在AOSP 7.1.1 nexus 5x上面实现了修改位置打卡,现在是想在pixel3中继续尝试。

如何选择代码

要选择有对应驱动版本的代码分支,如果没有标明,强行用其他版本的驱动来编译刷机不知道是否可行。

比如我选择的情况是这样的。

https://developers.google.com/android/drivers#bluelinepd1a.180720.030

https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn

这里是查代码分支和驱动版本的网站。

为什么呢?因为我的网盘中的Android10代码有这个分支,如果通过repo的方式下载,我网络太差了,容易失败,相信很多人放弃都会卡在这一步,下个代码都下不了。

我们之间下载某个分支的代码就行了,前提是这个分支刚好有驱动。

复制代号:QQ3A.200805.001

去驱动的网页上面搜索:

在这里找到你的手机和对应代号的驱动。

android-10.0.0_r41 -> QQ3A.200805.001 > Pixel 3 binaries for Android 10.0.0 (QQ3A.200805.001)

关联起来,点击下载那2个文件就行了,先保存起来,到时候参与编译的。

代码地址:链接: https://pan.baidu.com/s/1-U53CtqMAb0ZsuEnzLMQ 提取码: ktut

下载好驱动,代码。

编译环境

Ubuntu 1804

安装好openjdk8

和下面一堆东西。

如果安装不了,请切换国内的源,快很多。(怎么切源,自己处理)

  1. sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

  2. sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

  3. sudo apt-get install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

  4. sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev

  5. sudo apt-get install -y git-core gnupg flex bison gperf build-essential

  6. sudo apt-get install -y zip curl zlib1g-dev gcc-multilib g++-multilib

  7. sudo apt-get install -y libc6-dev-i386

  8. sudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-dev

  9. sudo apt-get install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4

  10. sudo apt-get install -y lib32z1-dev ccache

  11. sudo apt-get install -y bc python flex bison gperf libsdl-dev libesd0-dev build-essential zip curl

  12. sudo apt-get install -y libssl-dev liblz4-tool

  13. sudo apt-get install -y libesd-java libwxgtk3.0-dev squashfs-tools pngcrush schedtool libxml2

  14. sudo apt-get install -y lzop schedtool lib32readline-dev libswitch-perl libssl-dev

创建虚拟机的时候硬盘如果空间足够,尽量给多点比如300g,我给了虚拟机200g。

编译好之后我的虚拟机可用空间剩余20g了。

虚拟机内存至少16g。如果编译过程中遇到oom,内存不够,可以关机了加点,编译的进度会保留的。

准备编译

进入源码根目录,解压驱动。

用7z解压驱动包得到sh,如果安装7z,自己解决。

  1. tar zxvf google_devices-blueline-qq.3a.200805.001-466a3cb1.tgz

  2. tar zxvf qcom-blueline-200805.001-a5511ad3.tgz

  3. 解压后得到2sh文件

  4. extract-开头的。

执行sh文件

./extract-

情况和http://www.debuglive.cn/article/1036000920720113664文章类似,都是按空格继续,最后要手动输入I ACCEPT。两个文件都是一样的流程。

如果开始编译的时候遇到这样的错误

  1. find vendor: permission denied

给驱动文件夹权限。

  1. sudo chmod -R 777 vendor

到此开始编译。

源码根目录输入:

  1. source build/envsetup.sh

  2. 回车

  1. lunch

  2. 回车

我们的手机pixel3就选择blueline这个产品,userdebug模式刷机完成就打开adb调试,有su。

开始编译:

  1. make -j4

  2. 回车

  3. 由于配置低就用4线程编译,如果你配置高,就配置多点

开始后你可能会遇到这个错误:

  1. test github.com/google/blueprint/pathtools

  2. FAILED: out/soong/.bootstrap/blueprint-pathtools/test/test.passed

  3. out/soong/.bootstrap/bin/gotestrunner -p ./build/blueprint/pathtools -f out/soong/.bootstrap/blueprint-pathtools/test/test.passed -- out/soong/.bootstrap/blueprint-pathtools/test/test -test.short

  4. --- FAIL: TestGlobEscapes (0.02s)

  5. --- FAIL: TestGlobEscapes/**/* (0.02s)

  6. glob_test.go:562: incorrect matches list:

  7. glob_test.go:562: pattern: "**/*"

  8. glob_test.go:562: got: []string{"a/", "b", "a/a"}

  9. glob_test.go:562: expected: []string{"*", "**/", "?", "a/", "b", "**/*", "**/a", "**/b/", "**/b/b", "a/a"}

  10. glob_test.go:562: incorrect deps list:

  11. glob_test.go:562: pattern: "**/*"

  12. glob_test.go:562: got: []string{".", "a"}

  13. glob_test.go:562: expected: []string{".", "**", "**/b", "a"}

  14. --- FAIL: TestGlobEscapes/**/\* (0.00s)

  15. glob_test.go:562: incorrect matches list:

  16. glob_test.go:562: pattern: "**/\\*"

  17. glob_test.go:562: got: []string(nil)

  18. glob_test.go:562: expected: []string{"*", "**/*"}

  19. glob_test.go:562: incorrect deps list:

  20. glob_test.go:562: pattern: "**/\\*"

  21. glob_test.go:562: got: []string{".", "a"}

  22. glob_test.go:562: expected: []string{".", "**", "**/b", "a"}

  23. --- FAIL: TestGlobEscapes/\*\*/* (0.00s)

  24. glob_test.go:562: incorrect matches list:

  25. glob_test.go:562: pattern: "\\*\\*/*"

  26. glob_test.go:562: got: []string(nil)

  27. glob_test.go:562: expected: []string{"**/*", "**/a", "**/b/"}

  28. glob_test.go:562: incorrect deps list:

  29. glob_test.go:562: pattern: "\\*\\*/*"

  30. glob_test.go:562: got: []string{"."}

  31. glob_test.go:562: expected: []string{".", "**"}

  32. --- FAIL: TestGlobEscapes/\*\*/**/* (0.00s)

  33. glob_test.go:562: incorrect matches list:

  34. glob_test.go:562: pattern: "\\*\\*/**/*"

  35. glob_test.go:562: got: []string(nil)

  36. glob_test.go:562: expected: []string{"**/*", "**/a", "**/b/", "**/b/b"}

  37. glob_test.go:562: incorrect deps list:

  38. glob_test.go:562: pattern: "\\*\\*/**/*"

  39. glob_test.go:562: got: []string{"."}

  40. glob_test.go:562: expected: []string{".", "**", "**/b"}

  41. FAIL

  42. 18:54:13 soong bootstrap failed with: exit status 1

根据这个博客的方法,可以解决https://www.cnblogs.com/juwan/p/16848838.html。

就是把源码根目录下build/blueprint/Blueprints:71: "pathtools/globtest.go"和fstest.go删除了保存就好了,找了几个小时的错误,就这个有用。

继续make -j4。

编译完成。

刷入手机pixel3中

注意条件:

1:pixel3解开bl锁

2:必须退出登录的所有google账号,后果自负(懂的都懂)

3:usb接口已经配置好访问权限。

开始刷机。

手机连接电脑,触发虚拟机选择连接的设备,选择虚拟机就行。

  1. adb devices

  2. 检查手机状态,如果已经连接会显示

  3. sfasdfadf devices

我在这里遇到问题,我的手机之前系统是Android9,和现在编译的代码版本不一样,而且boot给我修改过的。

如果直接刷机,可能会遇到这样的错误。

  1. fastboot flashall -w

  2. --------------------------------------------

  3. Bootloader Version...: b4s4-0.1-5613380

  4. Baseband Version.....: g670-00011-190411-B-5457439

  5. Serial Number........: XXXXXXXXXX

  6. --------------------------------------------

  7. Checking 'product' OKAY [ 0.057s]

  8. Setting current slot to 'a' OKAY [ 0.372s]

  9. Sending 'boot_a' (65536 KB) OKAY [ 1.850s]

  10. Writing 'boot_a' OKAY [ 0.349s]

  11. Sending 'dtbo_a' (8192 KB) OKAY [ 0.320s]

  12. Writing 'dtbo_a' OKAY [ 0.095s]

  13. Sending 'vbmeta_a' (4 KB) OKAY [ 0.120s]

  14. Writing 'vbmeta_a' OKAY [ 0.066s]

  15. Rebooting into fastboot FAILED (remote: 'Unsupported reboot option reboot-fastboot')

  16. fastboot: error: Command failed

然后手机就挂了

查了资料,说是引导和当前编译的系统版本的不一样。

去这个地址:https://developers.google.com/android/images#blueline

下载完成之后,解压zip,然后手机连接电脑,手机开机和音量下一起按住,等待进入BootLoader模式。

进入模式之后,电脑如果win,双击flash-all.bat,Mac和Linux执行./flash-all.sh就行。进入刷机,可能重启数次。

刷机完成之后,打开开发者模式,再次连接电脑,虚拟机连接手机。

进入源码根目录中,配置下fastboot。

  1. cd out/host/linux-x86/bin

  2. 执行

  3. sudo chown root:root fastboot && sudo chmod +s fastboot

  4. 输入你的虚拟机密码,回车。

回到根目录下

  1. ANDROID_PRODUCT_OUT=out/target/product/blueline

开始刷机

  1. 如果你的手机开机,先重启

  2. adb reboot bootloader

  3. 重启到bootloader

  4. fastboot devices

  5. 看看手机连接情况

  6. fastboot flashall -w

手机重启之后,虚拟机选择连接的手机设备就行了,重启多次。

这个时候手机会自动重启。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NzUzNzk1Mw==&mid=2247495533&idx=1&sn=acd02573e52155cc573560c0bcad0b55&chksm=ceb8aa23f9cf23356744d2df88befaa78ab375c5602ce5992520eefdcdfd492b6a350e018153#rd
如有侵权请联系:admin#unsafe.sh