您可以幫助開發地球歷史上安裝最廣泛的操作系統。是的,您是在這裡踏上成為Android平台工程師的旅程。
儘管路途充滿挑戰,但我們的Android團隊會努力簡化您的發行過程。而且我們每天都會通過直接在Android開放源代碼項目(AOSP)中進行改進。
因此,坐下來,啟動一個終端,讓我們創造歷史。
目標
該代碼實驗室的任務是雙重的:
先決條件
這是此代碼實驗室的要求的完整列表,該要求是從通用平台( AOSP )開發的要求中得出的。
要使用此代碼實驗室,您需要進行以下設置:
環境
通常,用戶直接在工作站上進行構建和開發。因為您可能在各種終端上工作,並且使用的許多命令都是特定於終端的,所以您將需要在每個終端會話中重新運行它們。具體而言,這些包括source build/envsetup.sh
,和lunch
命令。
設置工作站
初始化並同步代碼
導航到您的主目錄:
cd ~
在其中創建本地工作子目錄:
mkdir aosp
導航到目錄:
cd aosp
初始化AOSP信息庫源代碼master分支(默認):
repo init -u https://android.googlesource.com/platform/manifest
輸入或接受您的Git憑證(名稱,電子郵件地址)。
同步源代碼:
repo sync -j16
初始同步可能需要一個小時或更長時間。等待期間,請參閱下載說明以獲取相關詳細信息。
每個回購結帳都由清單文件表示。只要它們存在於不同的目錄中,則一次可能有多個回購結帳。但是請注意,每個結帳和構建大約需要300GB並在增長,因此請限制為兩個或使用輔助驅動器來擴充系統。
提示:要釋放空間,請刪除分支目錄並從目錄創建重新開始:
rm -rf aosp2
建立程式碼
要構建Android,您必須選擇一個用lunch
命令構建的目標設備類型。目標是設備排列,例如特定的型號或尺寸。
下面的設備包括目標, aosp_cf_x86_64_phone-userdebug
,使您能夠建立墨魚虛擬的Android設備沒有物理設備測試。
要構建和更新物理設備,請選擇另一個目標並按照有關刷新設備的說明進行操作。
通過從源代碼簽出的根目錄運行以下命令來設置用於構建Android設備的環境:
source build/envsetup.sh
將構建目標傳遞給Lunch命令,如下所示:
lunch aosp_cf_x86_64_phone-userdebug
使用以下方法在結帳處的任何地方構建代碼:
m
預計首次構建將花費數小時。後續構建所需的時間大大減少。
創建Acloud實例
Acloud是AOSP中的命令行工具,可幫助用戶創建虛擬Android設備(在本例中為Cuttlefish)。
如果您處於用於構建代碼的同一終端會話中,請繼續。否則,請重新運行envsetup.sh
腳本,並首先在其中使用相同的envsetup.sh
命令。然後:
創建具有以下內容的Acloud本地實例:
acloud create --local-image --local-instance
接受對必需軟件包的更新。
如果出現提示,請重新啟動工作站以使所有更改生效。
選擇墨魚設備。
應該會為您帶來一個包含Android設備的VNC會話!
您可以使用鼠標和鍵盤與工作站上的虛擬設備進行交互。在將設備與Android Debug Bridge(adb) logcat
命令一起使用時,您還可以關注日誌中的活動:
adb logcat
做出改變
按照此示例更改列表更新源代碼。
從結帳的根目錄(
aosp/
目錄),導航到frameworks/native
Git項目:cd frameworks/native
使用以下命令啟動一個臨時項目:
repo start <some-name> .
編輯
SurfaceFlinger.cpp
以將更改列表中的更新包括在以下位置:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
構建代碼:
m
更新設備上的版本:
adb root adb remount adb sync adb reboot acloud reconnect
您應該在設備上看到顏色變化。
測試你的代碼
在代碼實驗室的這一部分中,我們將通過源代碼樹中已經失敗的示例測試進行測試。為了在本地運行測試,我們將使用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中提交更改並將其合併到存儲庫中。
相反,出於代碼實驗室的目的,請通過單擊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 .
至此,您完成了!幹得好!
得到幫助
如果您在此代碼實驗室中遇到錯誤,請使用任何頁面底部的“網站反饋”鏈接報告這些錯誤。將問題發送給android-building組。