Android 開發者代碼實驗室

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

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

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

目標

這個代碼實驗室的任務有兩個:

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

先決條件

對於本程式碼實驗室需求列表是由那些通用平台(派生AOSP )的發展。要使用此代碼實驗室,請設置以下內容:

環境

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

設置工作站

  1. 安裝必要的程序包在工作站上。
  2. 儘管仍然在終端,安裝回購並獲得證書的所有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 個以上的 repo checkout,只要它們存在於不同的目錄中。但請注意,每次結帳和構建的使用量大約為 300 GB(並且還在增長),因此要么將自己限制為 2 個 repo 結帳,要么使用輔助驅動器擴充您的系統。

構建代碼

構建Android,你必須選擇一個目標設備類型建立與lunch命令。目標是設備排列,例如特定型號或外形尺寸。

下面的設備包括目標, aosp_cf_x86_64_phone-userdebug ,使您能夠建立墨魚虛擬的Android設備沒有物理設備測試。

要建立和更新,而不是一個物理設備,選擇其他目標,並按照指示閃爍的設備

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

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

    lunch aosp_cf_x86_64_phone-userdebug
    
  3. 構建從任何地方的代碼與你結賬:

    m
    

預計第一個構建需要幾個小時。後續構建花費的時間要少得多。

創建一個 Acloud 實例

Acloud是在一個AOSP命令行工具,幫助用戶在創建虛擬Android設備,在這種情況下墨魚。

如果您在使用同一個終端會話是構建代碼,請繼續。否則,重新運行envsetup.sh腳本,同樣的lunch ,你那裡使用的第一個命令。然後

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

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

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

  4. 選擇烏賊設備。

您應該會看到一個包含 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. 找到這兩行:

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

    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();
    
  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的屏幕外觀

測試你的代碼

代碼實驗室的這一部分使用了源代碼樹中的一個示例測試,但失敗了。這種採用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的使用捆綁的命令,如git clone一下子在眾多Git倉庫(或項目)的工作。

請參閱源代碼控制工具與Android源代碼工作Git和回購的概述,鏈接到完整的文檔。見AOSP庫的Git的項目和個人項目(路徑)與每個項目相關分支的完整列表。

對於您的Git項目的代碼審查,你將使用格里特基於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 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 平台開發的入門 Codelab。 See提交補丁後續步驟,並在開發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 .

在這一點上,你完成了!幹得好!

得到幫助

如果本程式碼實驗室過程中遇到錯誤,請使用報告這些問題跟踪器上的任何頁面底部的鏈接。發送問題到Android的建築群。