您可以幫助開發地球歷史上安裝最廣泛的操作系統。是的,您來這裡是為了踏上成為 Android 平台工程師的旅程。
儘管這條道路充滿挑戰,但 Android 團隊努力簡化您的旅程,每次發布。並且該團隊每天都通過在 Android 開源項目 (AOSP) 中的直接工作進行改進。
所以坐下來,啟動終端,讓我們創造歷史。
目標
這個 Codelab 的使命是雙重的:
- 讓您對在平台(操作系統)上工作的 Android 工程師的開發人員工作流程有所了解。
- 鼓勵您就 Android 的工具、文檔和開發人員工作流程提供反饋。
先決條件
此 Codelab 的要求列表源自通用平台 ( AOSP ) 開發的要求。要參加此 Codelab,請設置以下內容:
- 滿足所有公共要求的物理 Linux 工作站。
- 存儲庫和編輯 Android 代碼庫所需的 Git 配置。
環境
通常,用戶直接在工作站上構建和開發。因為您可能在各種終端中工作,並且使用的許多命令都是特定於終端的,所以您需要在每個終端會話中重新運行它們。具體來說,這些包括source build/envsetup.sh
和lunch
命令。
設置工作站
- 在您的工作站上安裝必要的軟件包。
- 仍在終端中時,安裝 Repo 並獲取所有 Git 存儲庫的憑據。
初始化和同步代碼
導航到您的主目錄:
cd ~
在其中創建一個本地工作子目錄:
mkdir aosp
導航到目錄:
cd aosp
初始化 AOSP 存儲庫源代碼 master 分支(默認):
repo init -u https://android.googlesource.com/platform/manifest
輸入或接受您的 Git 憑據(姓名、電子郵件地址)。
同步源代碼:
repo sync -j8
初始同步可能需要一個小時或更長時間。
每個 repo checkout 都由一個清單文件表示。只要它們存在於不同的目錄中,一次就可以有超過 1 個 repo checkout。但請注意,每次結帳和構建的使用量大約為 300 GB(並且還在增長),因此要么將自己限制為 2 個 repo 結帳,要么使用輔助驅動器擴充您的系統。
構建代碼
要構建 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
命令。然後
創建一個 Acloud 本地實例:
acloud create --local-image --local-instance
接受對所需軟件包的更新。
如果出現提示,請重新啟動工作站以使所有更改生效。
選擇墨魚設備。
您應該會看到一個包含 Android 設備的 VNC 會話!
您可以使用鼠標和鍵盤與工作站上的虛擬設備進行交互。您還可以在使用設備時使用 Android Debug Bridge (adb) logcat
命令跟踪日誌中的活動:
adb logcat
做出改變
在這個示例changelist之後更新源代碼。
從結帳的根目錄(
aosp/
目錄),導航到frameworks/native
Git 項目:cd frameworks/native
使用以下命令啟動一個臨時項目:
repo start <some-name> .
編輯
SurfaceFlinger.cpp
以在以下位置包含來自更改列表的更新:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
找到這兩行:
postFrame(); postComposition();
將這兩行替換為以下內容:
postFrame(); 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.換色成功後的屏幕外觀
測試你的代碼
這部分代碼實驗室使用了一個示例測試,該測試位於源代碼樹中並且失敗了。這使用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 源代碼的完整文檔的鏈接。有關 Git 項目的完整列表以及與每個項目關聯的分支的各個項目(路徑),請參閱AOSP 存儲庫。
為了在 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 master:
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/master
在 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-building組發送問題。