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-trunk_staging-userdebug
    
  3. 从结帐中的任何位置构建代码:

    m
    

预计第一次构建需要几个小时。后续构建所需的时间明显减少。

发射墨鱼

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. 发射墨鱼:

    launch_cvd --daemon</code>
    
  3. 通过在 Web 浏览器中导航到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. 找到这一行:

    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
    

确认您在所选设备上看到类似于图 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 构建小组。