乐趣区

关于android:Android源码定制2Android100的编译流程

一、背景

曾经在 AOSP 7.1.1 nexus 5x 下面实现了批改地位打卡,当初是想在 pixel3 中持续尝试。

作者:会飞的笨猫

二、如何抉择代码

要抉择有对应驱动版本的代码分支,如果没有表明,强行用其余版本的驱动来编译刷机不晓得是否可行。

比方我抉择的状况是这样的。

https://developers.google.com…

https://source.android.com/do…

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

为什么呢?因为我的网盘中的 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-U_5… 提取码: ktut

下载好驱动,代码。

三、编译环境

Ubuntu 1804

装置好 openjdk8

和上面一堆货色。

如果装置不了,请切换国内的源,快很多。(怎么切源,本人解决)

sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install -y git-core gnupg flex bison gperf build-essential 
sudo apt-get install -y zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install -y libc6-dev-i386 
sudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install -y lib32z1-dev ccache
sudo apt-get install -y bc python flex bison gperf libsdl-dev libesd0-dev build-essential zip curl
sudo apt-get install -y libssl-dev liblz4-tool
sudo apt-get install -y libesd-java libwxgtk3.0-dev squashfs-tools pngcrush schedtool libxml2
sudo apt-get install -y lzop schedtool lib32readline-dev libswitch-perl libssl-dev

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

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

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

四、筹备编译

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

用 7z 解压驱动包失去 sh,如果装置 7z,本人解决。

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

tar zxvf qcom-blueline-200805.001-a5511ad3.tgz

解压后失去 2 个 sh 文件

extract- 结尾的。

执行 sh 文件

./extract-

状况和 http://www.debuglive.cn/artic… 文章相似,都是按空格持续,最初要手动输出 I ACCEPT。两个文件都是一样的流程。

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

find vendor: permission denied

给驱动文件夹权限。

sudo chmod -R 777 vendor

到此开始编译。

源码根目录输出:

source build/envsetup.sh

回车 
lunch

回车 

咱们的手机 pixel3 就抉择 blueline 这个产品,userdebug 模式刷机实现就关上 adb 调试,有 su。

开始编译:

make -j4
回车

因为配置低就用 4 线程编译,如果你配置高,就配置多点 

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

test github.com/google/blueprint/pathtools
FAILED: out/soong/.bootstrap/blueprint-pathtools/test/test.passed
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
--- FAIL: TestGlobEscapes (0.02s)
    --- FAIL: TestGlobEscapes/**/* (0.02s)
        glob_test.go:562: incorrect matches list:
        glob_test.go:562:  pattern: "**/*"
        glob_test.go:562:      got: []string{"a/", "b", "a/a"}
        glob_test.go:562: expected: []string{"*", "**/", "?", "a/", "b", "**/*", "**/a", "**/b/", "**/b/b", "a/a"}
        glob_test.go:562: incorrect deps list:
        glob_test.go:562:  pattern: "**/*"
        glob_test.go:562:      got: []string{".", "a"}
        glob_test.go:562: expected: []string{".", "**", "**/b", "a"}
    --- FAIL: TestGlobEscapes/**/\* (0.00s)
        glob_test.go:562: incorrect matches list:
        glob_test.go:562:  pattern: "**/\\*"
        glob_test.go:562:      got: []string(nil)
        glob_test.go:562: expected: []string{"*", "**/*"}
        glob_test.go:562: incorrect deps list:
        glob_test.go:562:  pattern: "**/\\*"
        glob_test.go:562:      got: []string{".", "a"}
        glob_test.go:562: expected: []string{".", "**", "**/b", "a"}
    --- FAIL: TestGlobEscapes/\*\*/* (0.00s)
        glob_test.go:562: incorrect matches list:
        glob_test.go:562:  pattern: "\\*\\*/*"
        glob_test.go:562:      got: []string(nil)
        glob_test.go:562: expected: []string{"**/*", "**/a", "**/b/"}
        glob_test.go:562: incorrect deps list:
        glob_test.go:562:  pattern: "\\*\\*/*"
        glob_test.go:562:      got: []string{"."}
        glob_test.go:562: expected: []string{".", "**"}
    --- FAIL: TestGlobEscapes/\*\*/**/* (0.00s)
        glob_test.go:562: incorrect matches list:
        glob_test.go:562:  pattern: "\\*\\*/**/*"
        glob_test.go:562:      got: []string(nil)
        glob_test.go:562: expected: []string{"**/*", "**/a", "**/b/", "**/b/b"}
        glob_test.go:562: incorrect deps list:
        glob_test.go:562:  pattern: "\\*\\*/**/*"
        glob_test.go:562:      got: []string{"."}
        glob_test.go:562: expected: []string{".", "**", "**/b"}
FAIL
18:54:13 soong bootstrap failed with: exit status 1

依据这个博客的办法,能够解决 https://www.cnblogs.com/juwan…。

就是把源码根目录下 build/blueprint/Blueprints:71: “pathtools/glob_test.go” 和 fs_test.go 删除了保留就好了,找了几个小时的谬误,就这个有用。

持续 make -j4。

编译实现。

五、刷入手机 pixel3 中

留神条件:

1:pixel3 解开 bl 锁

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

3:usb 接口曾经配置好拜访权限。

开始刷机。

手机连贯电脑,触发虚拟机抉择连贯的设施,抉择虚拟机就行。

adb devices

查看手机状态,如果曾经连贯会显示
sfasdfadf  devices

我在这里遇到问题,我的手机之前零碎是 Android9,和当初编译的代码版本不一样,而且 boot 给我批改过的。

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

fastboot flashall -w
--------------------------------------------
Bootloader Version...: b4s4-0.1-5613380
Baseband Version.....: g670-00011-190411-B-5457439
Serial Number........: XXXXXXXXXX
--------------------------------------------
Checking 'product'                                 OKAY [0.057s]
Setting current slot to 'a'                        OKAY [0.372s]
Sending 'boot_a' (65536 KB)                        OKAY [1.850s]
Writing 'boot_a'                                   OKAY [0.349s]
Sending 'dtbo_a' (8192 KB)                         OKAY [0.320s]
Writing 'dtbo_a'                                   OKAY [0.095s]
Sending 'vbmeta_a' (4 KB)                          OKAY [0.120s]
Writing 'vbmeta_a'                                 OKAY [0.066s]
Rebooting into fastboot                            FAILED (remote: 'Unsupported reboot option reboot-fastboot')
fastboot: error: Command failed

而后手机就挂了

查了材料,说是疏导和以后编译的零碎版本的不一样。

去这个地址:https://developers.google.com…

下载实现之后,解压 zip,而后手机连贯电脑,手机开机和音量下一起按住,期待进入 BootLoader 模式。

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

刷机实现之后,关上开发者模式,再次连贯电脑,虚拟机连贯手机。

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

cd out/host/linux-x86/bin

执行

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

输出你的虚拟机明码,回车。

回到根目录下

ANDROID_PRODUCT_OUT=out/target/product/blueline

开始刷机

 如果你的手机开机,先重启
adb reboot bootloader

重启到 bootloader 后

fastboot devices

看看手机连贯状况

fastboot flashall -w

手机重启之后,虚拟机抉择连贯的手机设施就行了,重启屡次。

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

开始游玩吧~

本文由平安后厨团队分享,转载请注明起源,违者必究!

退出移动版