Android 開發者代碼實驗室

您可以幫助開發地球歷史上安裝最廣泛的操作系統。是的,您來這裡是為了踏上成為 Android 平台工程師的旅程。

儘管道路充滿挑戰,但 Android 團隊努力簡化您的旅程,每個版本都是如此。該團隊每天都通過 Android 開源項目 (AOSP) 的直接工作進行改進。

所以坐下來,啟動終端,讓我們創造歷史。

目標

此 Codelab 的使命有兩個:

  1. 讓您初步了解在該平台(操作系統)上工作的 Android 工程師的開發人員工作流程。
  2. 鼓勵您提供有關 Android 工具、文檔和開發人員工作流程的反饋

先決條件

此 Codelab 的要求列表源自通用平台 ( AOSP ) 開發的要求列表。要使用此 Codelab,請設置以下內容:

環境

通常,用戶直接在工作站上構建和開發。由於您可能在各種終端中工作,並且使用的許多命令是特定於終端的,因此您需要在每個終端會話中重新運行它們。具體來說,這些包括source build/envsetup.shlunch命令。

設置工作站

  1. 在您的工作站上安裝必要的軟件包
  2. 仍在終端中時,安裝 Repo 並獲取所有 Git 存儲庫的憑據

初始化並同步代碼

  1. 導航到您的主目錄:

    cd ~
    
  2. 在其中創建一個本地工作子目錄:

    mkdir aosp
    
  3. 導航到目錄:

    cd aosp
    
  4. 初始化AOSP存儲庫源代碼主分支(默認):

    repo init -u https://android.googlesource.com/platform/manifest
    
  5. 輸入或接受您的 Git 憑據(姓名、電子郵件地址)。

  6. 同步源碼:

    repo sync -j8
    

初始同步可能需要一個小時或更長時間。

每個存儲庫簽出都由一個清單文件表示。允許一次檢出 1 個以上的存儲庫,只要它們存在於不同的目錄中即可。但請注意,每次簽出和構建的使用量約為 300 GB(並且還在不斷增加),因此要么限制自己進行 2 次存儲庫簽出,要么使用輔助驅動器增強系統。

構建代碼

要構建 Android,您必須選擇要使用lunch命令構建的目標設備類型。目標是設備排列,例如特定型號或外形規格。

下麵包含的設備目標aosp_cf_x86_64_phone-userdebug使您能夠構建Cuttlefish虛擬 Android 設備,以便在沒有物理設備的情況下進行測試。

要構建和更新物理設備,請選擇另一個目標並按照刷新設備的說明進行操作。

  1. 通過從源代碼簽出的根目錄運行以下命令來設置構建 Android 設備的環境:

    source build/envsetup.sh
    
  2. 將構建目標傳遞給午餐命令,如下所示:

    lunch aosp_cf_x86_64_phone-userdebug
    
  3. 從結帳中的任何位置構建代碼:

    m
    

預計第一次構建需要幾個小時。後續構建所需的時間明顯減少。

創建Acloud實例

Acloud是 AOSP 中的一個命令行工具,可幫助用戶創建虛擬 Android 設備,在本例中為 Cuttlefish。

如果您位於用於構建代碼的同一終端會話中,請繼續。否則,重新運行envsetup.sh腳本和您首先使用的相同lunch命令。然後

  1. 使用以下命令創建 Acloud 本地實例:

    acloud create --local-image --local-instance
    
  2. 接受所需軟件包的更新。

  3. 如果出現提示,請重新啟動工作站以使所有更改生效。

  4. 選擇 Cuttlefish 設備。

您應該會看到包含 Android 設備的 VNC 會話!

您可以使用鼠標和鍵盤與工作站上的虛擬設備進行交互。您還可以在使用設備時使用 Android 調試橋 (adb) logcat命令來跟踪日誌中的活動:

adb logcat

做出改變

按照此示例更改列表更新源代碼。

  1. 從結賬根目錄( aosp/目錄)導航到frameworks/native Git項目:

    cd frameworks/native
    
  2. 使用以下命令啟動一個臨時項目:

    repo start <some-name> .
    
  3. 編輯SurfaceFlinger.cpp以包含以下位置的更改列表中的更新:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. 找到這一行:

    postComposition();
    
  5. 將這兩行替換為以下內容:

    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();
    
  6. 構建代碼:

    m
    
  7. 更新設備上的版本:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. 如果系統提示您選擇設備,請選擇顯示最短運行時間的設備。 (這可能是您看到的列表中的最後一個。)要查看所有虛擬設備實例,請使用acloud listacloud list -v命令。

確認您在所選設備上看到類似於圖 1 所示的顏色變化。

Example of a successful color change

圖 1.成功更改顏色後的屏幕外觀

測試你的代碼

Codelab 的這一部分使用了源樹中的示例測試,但該測試失敗了。這使用Atest在本地運行測試並測試代碼。

要使用該測試,請按照以下說明操作:

  1. 跑步:

    atest DevCodelabTest
    
  2. 測試將會失敗。要修復它,請找到失敗測試的源代碼:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. 然後看這裡

    platform_testing/tests/example/devcodelab
    
  4. 要編輯該文件,請在android.test.example.devcodelab.DevCodelabTest中獲取測試的名稱,並將.使用/ ,得到這個結果:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. 然後編輯

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    取代

    Assert.assertTrue(false)
    

    Assert.assertTrue(true)
    
  6. 再次運行測試以驗證您是否修復了問題:

    atest DevCodelabTest
    

上傳您的代碼以供審核

Repo 通過捆綁git clone等命令來同時跨多個 Git 存儲庫(或項目)工作,從而簡化了 Git 的使用。

請參閱源代碼控制工具,了解 Git 和 Repo 的概述,以及有關使用 Android 源代碼的完整文檔的鏈接。請參閱AOSP 存儲庫以獲取 Git 項目的完整列表以及與每個項目關聯的分支的各個項目(路徑)。

要在 Git 中對項目進行代碼審查,您將使用Gerrit基於 Web 的代碼審查系統。

  1. 假設您在frameworks/native項目中進行了更改,請運行以下命令來上傳它們:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
    
  2. 對於您的提交消息,請輸入以下內容:

    Android codelab change
    Test: manual atest
    
  3. 上傳您的更改:

    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 startgit commitrepo upload更改,因此您可以重置文件本身。假設您位於aosp/platform_testing directory中,請使用以下命令重置文件:

git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .

至此,你就完成了!幹得好!

得到幫助

如果您在此 Codelab 期間遇到錯誤,請使用任意頁面底部的問題跟踪器鏈接報告這些錯誤。將問題發送至android 構建小組。