Android 開發人員程式碼研究室

您可以協助開發地球史上最廣泛安裝的作業系統。是的,您正踏上成為 Android 平台工程師的旅程。

雖然路徑很有挑戰性,但 Android 團隊會盡力簡化每個版本的過程。而且團隊每天透過 Android 開放原始碼計畫 (AOSP) 的直接工作方式進行改善。

因此你只需下車,啟動終端機,來寫下歷史新頁。

目標

本程式碼研究室的任務有兩個:

  1. 以下簡單介紹適用於 Android 平台 (作業系統) 的 Android 工程師的開發人員工作流程。
  2. 歡迎您針對 Android 的工具、說明文件和開發人員工作流程提供意見回饋

必要條件

本程式碼研究室的規定清單來自一般平台 (Android 開放原始碼計畫) 的開發作業。如要參與本程式碼研究室,請設定下列項目:

環境

一般而言,使用者可以直接在工作站上建構及開發應用程式。由於您可能使用不同的終端機進行操作,且許多使用的指令都是僅適用於終端機,因此您必須在每個終端機工作階段中重新執行這些指令。具體來說,這些指令包括 source build/envsetup.shlunch 指令。

設定工作站

  1. 在工作站上安裝必要套件
  2. 在終端機中,安裝存放區並取得憑證至所有 Git 存放區。

初始化並同步處理程式碼

  1. 前往主目錄:

    cd ~
    
  2. 在目錄中建立本機工作子目錄:

    mkdir aosp
    
  3. 前往以下目錄:

    cd aosp
    
  4. 初始化 Android 開放原始碼計畫存放區原始碼主要分支版本 (預設):

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

  6. 同步處理原始碼:

    repo sync -j8
    

首次同步處理可能需要一小時以上的時間。

每個存放區結帳作業都會以資訊清單檔案表示。只要存在於不同目錄中,即可一次進行多個存放區結帳。但請注意,每次結帳和建構作業的用量約有 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-trunk_staging-userdebug
    
  3. 使用以下工具,在結帳頁面中的任何位置建構程式碼:

    m
    

首次版本預計需要數小時的時間。後續建構所需的時間會大幅減少。

啟動 Cuttlefish

Cuttlefish 是用來測試版本的 Android 模擬器。

  1. 如果您從未安裝 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 規則。

  2. 啟動 Cuttlefish:

    launch_cvd --daemon
    
  3. 在網路瀏覽器中前往 https://localhost:8443,以連線至 Cuttlefish 裝置。您會收到剛建構的 Android 裝置影片串流。

進行變更

請按照這個範例 changelist 更新原始碼。

  1. 從結帳根目錄 (aosp/ 目錄) 中,前往 frameworks/native Git 專案:

    cd frameworks/native
    
  2. 使用下列指令啟動臨時專案:

    repo start <some-name> .
    
  3. 編輯 SurfaceFlinger.cpp,納入位於以下位置的變更清單更新:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. 尋找以下這一行:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. 在 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});
    
  6. 建構程式碼:

    m
    
  7. 更新裝置上的版本:

    adb root
    adb remount
    adb sync
    adb reboot
    

確認所選裝置顯示的顏色變更與圖 1 所示類似。

成功變更顏色的範例

圖 1 成功變更顏色後的畫面外觀

測試程式碼

程式碼研究室的這部分使用來源樹狀結構中的範例測試失敗。這會使用 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
    

上傳程式碼以供審查

存放區可透過繫結指令 (例如 git clone),一次用於多個 Git 存放區 (或專案),藉此簡化 Git 的使用方法。

請參閱來源控制工具查看 Git 和 Repo 總覽,其中包含使用 Android 原始碼的完整說明文件連結。如需 Git 專案的完整清單,以及與每項專案相關聯的分支版本 (路徑),請參閱 Android 開放原始碼計畫存放區

如要審查 Git 中的專案程式碼,建議您使用 Gerrit 網頁式程式碼審查系統。

  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 中提交變更,並合併至存放區。

為配合本程式碼研究室的目的,請在 Gerrit 中點選「Abandon」,即可還原變更清單。

然後捨棄 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 .

這樣就大功告成了!答得好!

取得協助

如果在這個程式碼研究室中遇到錯誤,請使用任何頁面底部的 Issue Tracker 連結回報。請將問題傳送至 android-building 群組。