背景
已經在AOSP 7.1.1 nexus 5x上面實現了修改位置打卡,現在是想在pixel3中繼續嘗試。
如何選擇代碼
要選擇有對應驅動版本的代碼分支,如果沒有標明,強行用其他版本的驅動來編譯刷機不知道是否可行。
比如我選擇的情況是這樣的。
這里是查代碼分支和驅動版本的網站。
為什么呢?因為我的網盤中的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個文件就行了,先保存起來,到時候參與編譯的。
編譯環境
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-
都是按空格繼續,最后要手動輸入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 incorrect matches list:
glob_test.go pattern: "\*\*/*"
glob_test.go got: []string(nil)
glob_test.go expected: []string{"**/*", "**/a", "**/b/"}
glob_test.go incorrect deps list:
glob_test.go pattern: "\*\*/*"
glob_test.go got: []string{"."}
glob_test.go expected: []string{".", "**"}
--- FAIL: TestGlobEscapes/**/**/* (0.00s)
glob_test.go incorrect matches list:
glob_test.go pattern: "\*\*/**/*"
glob_test.go got: []string(nil)
glob_test.go expected: []string{"**/*", "**/a", "**/b/", "**/b/b"}
glob_test.go incorrect deps list:
glob_test.go pattern: "\*\*/**/*"
glob_test.go got: []string{"."}
glob_test.go expected: []string{".", "**", "**/b"}
FAIL
1813 soong bootstrap failed with: exit status 1
就是把源碼根目錄下build/blueprint/Blueprints "pathtools/globtest.go"和fstest.go刪除了保存就好了,找了幾個小時的錯誤,就這個有用。
繼續make -j4。
編譯完成。
刷入手機pixel3中
注意條件:
1:pixel3解開bl鎖
2:必須退出登錄的所有google賬號,后果自負(懂的都懂)
開始刷機。
手機連接電腦,觸發虛擬機選擇連接的設備,選擇虛擬機就行。
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
然后手機就掛了
查了資料,說是引導和當前編譯的系統版本的不一樣。
下載完成之后,解壓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
手機重啟之后,虛擬機選擇連接的手機設備就行了,重啟多次。
這個時候手機會自動重啟。
審核編輯:劉清
-
USB接口
+關注
關注
9文章
701瀏覽量
55692 -
虛擬機
+關注
關注
1文章
918瀏覽量
28263 -
Ubuntu系統
+關注
關注
0文章
91瀏覽量
3991
原文標題:Ubuntu18.04編譯AOSP10.0r41刷入Pixel3
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論