您可以協助開發有史以來安裝數最多的作業系統。是的,您即將踏上成為 Android 平台工程師的旅程。
雖然路徑上困難重重,但 Android 團隊仍致力於 每次推出新遊戲團隊每天都會透過在 Android 開放原始碼計畫 (AOSP) 中直接進行的工作,進行改善。
因此你只需下車,啟動終端機,來寫下歷史新頁。
目標
本程式碼研究室的任務有兩個:
必要條件
本程式碼研究室的必要條件清單,是根據一般平台 (Android 開放原始碼計畫) 開發的必要條件清單所衍生。如要學習本程式碼研究室 進行下列設定:
- 符合所有公開需求的實體 Linux 工作站。
- 需要編輯的 Repo 和 Git 設定 Android 程式碼集
環境
一般而言,使用者可以直接在工作站上建構及開發應用程式。因為您可能可以
使用各種終端機執行指令
而且許多使用的指令都專屬於終端機
您必須在每個終端機工作階段中重新執行密鑰。具體而言
包括 source build/envsetup.sh
和 lunch
指令
設定工作站
- 在您的電腦上安裝必要套件, 工作站
- 在終端機中安裝存放區並取得憑證 複製到所有 Git 存放區
初始化並同步處理程式碼
前往主目錄:
cd ~
在目錄中建立本機工作子目錄:
mkdir aosp
前往以下目錄:
cd aosp
初始化 Android 開放原始碼計畫存放區原始碼主要分支版本 (預設):
repo init -u https://android.googlesource.com/platform/manifest
輸入或接受 Git 憑證 (名稱、電子郵件地址)。
同步處理原始碼:
repo sync -j8
首次同步作業可能需要一小時以上才能完成。
每個存取的存放區都會以資訊清單檔案表示。只要這些 Repo 位於不同的目錄中,一次可以檢出多個 Repo。但請注意,每次結帳和建構金額 大約有 300 GB 的用量 (持續增加中),因此您可以選擇只結帳 2 個存放區。 或是使用次要磁碟來強化系統
建構程式碼
如要建構 Android,您必須選取目標
使用 lunch
指令建構的裝置類型。目標是裝置變體,例如特定型號或板型規格。
指定「aosp_cf_x86_64_phone-userdebug
」裝置可讓您
建構 Cuttlefish 虛擬 Android 裝置
不必使用實體裝置進行測試
如要改為建構及更新實體裝置,請選擇其他目標,然後按照指示操作 請參閱刷新裝置的操作說明。
執行 從原始碼結帳的根目錄中執行下列指令:
source build/envsetup.sh
將建構目標傳遞至午餐指令,如下所示:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
您可以在應用程式的任何位置,建構程式碼 結帳選項:
m
首次版本預計需要數小時的時間。後續的版本會大幅影響 縮短作業時間
啟動 Cuttlefish
Cuttlefish 是用來測試版本的 Android 模擬器。
如果您從未安裝 Cuttlefish,就必須安裝必要的 Cuttlefish 依附元件。在終端機視窗中執行下列指令 下載、建構和安裝主機 Debian 套件:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
重新啟動會觸發安裝其他核心模組,並套用
udev
規則。啟動 Cuttlefish:
launch_cvd --daemon
在網路瀏覽器中前往
https://localhost:8443
,即可連線至 Cuttlefish 裝置。您會看到剛建構的 Android 裝置影片串流。
進行變更
按照這個範例變更清單更新原始碼。
從結帳根目錄 (
aosp/
目錄) 中前往frameworks/native
Git 專案:cd frameworks/native
使用下列指令啟動臨時專案:
repo start <some-name> .
編輯
SurfaceFlinger.cpp
,在下列位置加入變更清單中的更新內容:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
尋找以下這一行:
void SurfaceFlinger::updateColorMatrixLocked() {
在 updateColorMatrixLocked() 的開頭新增以下兩行:
mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
建構程式碼:
m
更新裝置上的版本:
adb root
adb remount
adb sync
adb reboot
確認所選裝置上的顏色變更與顯示的內容類似 圖 1.
圖 1. 成功變更顏色後的畫面外觀
測試程式碼
這部分程式碼研究室會使用原始碼樹狀結構中的範例測試 而且失敗這個做法採用 Atest 並測試程式碼。
如要使用這項測試,請按照下列操作說明進行:
執行:
atest DevCodelabTest
測試將會失敗。檢查失敗測試的堆疊追蹤:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
然後查看這裡
platform_testing/tests/example/devcodelab
如要編輯檔案,請在以下位置找出測試名稱:
android.test.example.devcodelab.DevCodelabTest
,並將.
替換為/
) 以取得這個結果:src/android/test/example/devcodelab/DevCodelabTest.java
接著編輯
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
以取代
Assert.assertTrue(false)
取代為
Assert.assertTrue(true)
再次執行測試,確認問題已修正:
atest DevCodelabTest
上傳程式碼以供審查
Repo 透過繫結指令 (例如 git clone
) 運作來簡化 Git 的使用方法
一次跨多個 Git 存放區 (或專案) 調度資源
請參閱來源控制工具,瞭解 Git 和 Repo 的總覽。 點選這個連結,即可查看使用 Android 原始碼的完整說明文件。請參閱 Android 開放原始碼計畫存放區 以取得 Git 專案的完整清單,以及 與各專案相關聯的分支版本
如要審查 Git 中的專案程式碼,請使用 Gerrit 網站式程式碼審查系統
假設您在
frameworks/native
專案中進行變更,請執行 來上傳映像檔:cd frameworks/native
repo start codelab .
git add .
git commit
針對修訂訊息,輸入以下內容:
Android codelab change Test: manual atest
上傳變更:
repo upload
如果成功,您會看到類似以下的訊息:
Upload project frameworks/native/ to remote branch main:
branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
ff46b36d android codelab change
to https://android-review.googlesource.com/ (y/N)? y
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
remote:
To https://android-review.googlesource.com/platform/frameworks/native
* [new branch] codelab -> refs/for/main
在 Gerrit 中查看變更
前往終端機中顯示的連結,類似以下連結:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
這已完成 Android 平台開發的入門程式碼研究室。詳情請見 提交修補程式 瞭解後續步驟,以及 有關開發 Android 的完整資訊,請參閱 這個網站。
還原變更
通常在測試後,並經過審查及核准程序,您會在 Gerrit 中提交變更,並將其合併至存放區。
但基於本程式碼研究室的目的,請改還原變更清單,方法是 在蓋瑞特的廢棄物。
接著在 frameworks/native
專案中捨棄相關聯的臨時分支版本
目錄 (或其子目錄):
repo abandon codelab .
別忘了,一併還原您對測試檔案所做的變更。由於您並未
repo start
、git commit
和repo upload
變更,您可以重設
檔案本身如果您位於 aosp/platform_testing directory
,請使用
以下說明如何重設檔案:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
到這裡就完成了!答得好!
取得說明
如果在這個程式碼研究室中遇到錯誤,請使用 Issue Tracker 請點選任一頁面底部的連結。請將問題傳送至 Android 建構 群組。