您可以協助開發地球史上最廣泛安裝的作業系統。是的,您正踏上成為 Android 平台工程師的旅程。
雖然路徑很有挑戰性,但 Android 團隊會盡力簡化每個版本的過程。而且團隊每天透過 Android 開放原始碼計畫 (AOSP) 的直接工作方式進行改善。
因此你只需下車,啟動終端機,來寫下歷史新頁。
目標
本程式碼研究室的任務有兩個:
- 以下簡單介紹適用於 Android 平台 (作業系統) 的 Android 工程師的開發人員工作流程。
- 歡迎您針對 Android 的工具、說明文件和開發人員工作流程提供意見回饋。
必要條件
本程式碼研究室的規定清單來自一般平台 (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
首次同步處理可能需要一小時以上的時間。
每個存放區結帳作業都會以資訊清單檔案表示。只要存在於不同目錄中,即可一次進行多個存放區結帳。但請注意,每次結帳和建構作業的用量約有 300 GB (持續增加中),因此您可以選擇只用 2 個存放區結帳,也可以使用次要磁碟擴充系統。
建構程式碼
如要建構 Android,您必須選取要使用 lunch
指令建構的目標裝置類型。目標是裝置排列組合 (例如特定型號或板型規格),
裝置目標 aosp_cf_x86_64_phone-userdebug
可讓您建構 Cuttlefish 虛擬 Android 裝置,以供在沒有實體裝置的情況下進行測試。
如要改為建構及更新實體裝置,請選擇其他目標,然後按照刷新裝置的操作說明進行。
從原始碼檢查的根層級執行下列指令,設定用於建構 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 裝置影片串流。
進行變更
請按照這個範例 changelist 更新原始碼。
從結帳根目錄 (
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
測試將會失敗,為解決問題,請找出測試失敗的原始碼:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
然後查看這裡
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
上傳程式碼以供審查
存放區可透過繫結指令 (例如 git clone
),一次用於多個 Git 存放區 (或專案),藉此簡化 Git 的使用方法。
請參閱來源控制工具查看 Git 和 Repo 總覽,其中包含使用 Android 原始碼的完整說明文件連結。如需 Git 專案的完整清單,以及與每項專案相關聯的分支版本 (路徑),請參閱 Android 開放原始碼計畫存放區。
如要審查 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 中提交變更,並合併至存放區。
為配合本程式碼研究室的目的,請在 Gerrit 中點選「Abandon」,即可還原變更清單。
然後捨棄 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-building 群組。