Android 開發人員程式碼研究室

您可以協助開發有史以來安裝數最多的作業系統。是的,您即將踏上成為 Android 平台工程師的旅程。

雖然路徑上困難重重,但 Android 團隊仍致力於 每次推出新遊戲團隊每天都會透過在 Android 開放原始碼計畫 (AOSP) 中直接進行的工作,進行改善。

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

目標

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

  1. 以下簡單說明開發人員工作流程 例如 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

首次同步作業可能需要一小時以上才能完成。

每個存取的存放區都會以資訊清單檔案表示。只要這些 Repo 位於不同的目錄中,一次可以檢出多個 Repo。但請注意,每次結帳和建構金額 大約有 300 GB 的用量 (持續增加中),因此您可以選擇只結帳 2 個存放區。 或是使用次要磁碟來強化系統

建構程式碼

如要建構 Android,您必須選取目標 使用 lunch 指令建構的裝置類型。目標是裝置變體,例如特定型號或板型規格。

指定「aosp_cf_x86_64_phone-userdebug」裝置可讓您 建構 Cuttlefish 虛擬 Android 裝置 不必使用實體裝置進行測試

如要改為建構及更新實體裝置,請選擇其他目標,然後按照指示操作 請參閱刷新裝置的操作說明。

  1. 執行 從原始碼結帳的根目錄中執行下列指令:

    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 裝置影片串流。

進行變更

按照這個範例變更清單更新原始碼。

  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. 測試將會失敗。檢查失敗測試的堆疊追蹤:

    STACKTRACE:
    java.lang.AssertionError
     at org.junit.Assert.fail(Assert.java:87)
     at org.junit.Assert.assertTrue(Assert.java:42)
     at org.junit.Assert.assertTrue(Assert.java:53)
     at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
  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 原始碼的完整說明文件。請參閱 Android 開放原始碼計畫存放區 以取得 Git 專案的完整清單,以及 與各專案相關聯的分支版本

如要審查 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 中提交變更,並將其合併至存放區。

但基於本程式碼研究室的目的,請改還原變更清單,方法是 在蓋瑞特的廢棄物

接著在 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 建構 群組。