您可以協助開發地球歷史上安裝最廣泛的作業系統。是的,您來這裡是為了踏上成為 Android 平台工程師的旅程。
儘管道路充滿挑戰,但 Android 團隊努力簡化您的旅程,每個版本都是如此。團隊每天都透過 Android 開源專案 (AOSP) 的直接工作進行改進。
所以坐下來,啟動終端,讓我們創造歷史。
目標
此 Codelab 的使命有兩個:
- 讓您初步了解在該平台(作業系統)上工作的 Android 工程師的開發人員工作流程。
- 鼓勵您提供 Android 工具、文件和開發人員工作流程的回饋。
先決條件
此 Codelab 的要求清單源自於通用平台 ( AOSP ) 開發的要求清單。要使用此 Codelab,請設定以下內容:
環境
通常,使用者直接在工作站上建置和開發。由於您可能在各種終端機中工作,並且使用的許多命令是特定於終端的,因此您需要在每個終端會話中重新運行它們。具體來說,這些包括source build/envsetup.sh
和lunch
指令。
設定工作站
- 在您的工作站上安裝必要的軟體包。
- 仍在終端機中時,安裝 Repo 並取得所有 Git 儲存庫的憑證。
初始化並同步程式碼
導航到您的主目錄:
cd ~
在其中建立一個本機工作子目錄:
mkdir aosp
導航到目錄:
cd aosp
初始化AOSP儲存庫原始碼主分支(預設):
repo init -u https://android.googlesource.com/platform/manifest
輸入或接受您的 Git 憑證(姓名、電子郵件地址)。
同步原始碼:
repo sync -j8
初始同步可能需要一個小時或更長。
每個儲存庫簽出都由一個清單檔案表示。允許一次檢出 1 個以上的儲存庫,只要它們存在於不同的目錄中即可。但請注意,每次簽出和構建的使用量約為 300 GB(並且還在不斷增加),因此要么限制自己進行 2 次存儲庫簽出,要么使用輔助驅動器增強系統。
建構程式碼
要建立 Android,您必須選擇要使用lunch
命令建置的目標裝置類型。目標是設備排列,例如特定型號或外形規格。
下麵包含的設備目標aosp_cf_x86_64_phone-userdebug
可讓您建立Cuttlefish虛擬 Android 設備,以便在沒有實體設備的情況下進行測試。
若要建置和更新實體設備,請選擇另一個目標並按照刷新設備的說明進行操作。
透過從原始碼簽出的根目錄執行以下命令來設定建置 Android 裝置的環境:
source build/envsetup.sh
將建置目標傳遞給午餐指令,如下所示:
lunch aosp_cf_x86_64_phone-userdebug
從結帳中的任何位置建立程式碼:
m
預計第一次建造需要幾個小時。後續建造所需的時間明顯減少。
創建Acloud實例
Acloud是 AOSP 中的命令列工具,可協助使用者建立虛擬 Android 設備,在本例中為 Cuttlefish。
如果您位於用於建置程式碼的相同終端會話中,請繼續。否則,重新執行envsetup.sh
腳本和您首先使用的相同lunch
命令。然後
安裝用於在本機上運行 Cuttlefish 虛擬設備的依賴項:
acloud setup
如果出現提示,請重新啟動工作站以使所有變更生效。
使用以下命令建立
acloud
本地實例:acloud create --local-image --local-instance
選擇 Cuttlefish 設備。
您應該會看到包含 Android 裝置的 VNC 會話!
您可以使用滑鼠和鍵盤與工作站上的虛擬設備進行互動。您也可以在使用裝置時使用 Android 偵錯橋接器 (adb) logcat
指令來追蹤日誌中的活動:
adb logcat
做出改變
請按照此範例更改清單更新原始程式碼。
從結帳根目錄(
aosp/
目錄)導航到frameworks/native
Git專案:cd frameworks/native
使用以下命令啟動一個臨時專案:
repo start <some-name> .
編輯
SurfaceFlinger.cpp
以包含以下位置的變更清單中的更新:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
找到這一行:
postComposition();
將這兩行替換為以下內容:
postComposition(); 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}); updateColorMatrixLocked();
建構程式碼:
m
更新裝置上的版本:
adb root
adb remount
adb sync
adb reboot
acloud reconnect
如果系統提示您選擇設備,請選擇顯示最短運轉時間的設備。 (這可能是您看到的清單中的最後一個。)要查看所有虛擬設備實例,請使用
acloud list
和acloud list -v
命令。
確認您在所選裝置上看到類似圖 1 所示的顏色變化。
圖 1.成功更改顏色後的螢幕外觀
測試你的程式碼
Codelab 的這一部分使用了來源樹中的範例測試,但該測試失敗了。這使用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
上傳您的程式碼以供審核
Repo 透過捆綁git clone
等指令來同時跨多個 Git 儲存庫(或專案)工作,從而簡化了 Git 的使用。
請參閱原始碼控制工具,以了解 Git 和 Repo 的概述,以及使用 Android 原始碼的完整文件的連結。請參閱AOSP 儲存庫以取得 Git 專案的完整清單以及與每個專案關聯的分支的各個專案(路徑)。
要在 Git 中對專案進行程式碼審查,您將使用Gerrit基於 Web 的程式碼審查系統。
假設您在
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 中提交更改並將其合併到儲存庫中。
相反,出於本 Codelab 的目的,請透過點擊 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 .
至此,你就完成了!幹得好!
得到幫助
如果您在此 Codelab 期間遇到錯誤,請使用任意頁面底部的問題追蹤器連結報告這些錯誤。將問題發送至android 建置小組。