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 存储库源代码 master 分支(默认):

    repo init -u https://android.googlesource.com/platform/manifest
    
  5. 输入或接受您的 Git 凭据(姓名、电子邮件地址)。

  6. 同步源代码:

    repo sync -j8
    

初始同步可能需要一个小时或更长时间。

每个 repo checkout 都由一个清单文件表示。允许一次有超过 1 个 repo checkout,只要它们存在于不同的目录中。但请注意,每次检出和构建大约需要 300 GB 的使用量(并且还在增加),因此要么限制自己进行 2 次回购检出,要么使用辅助驱动器扩充系统。

构建代码

要构建 Android,您必须选择要使用lunch命令构建的目标设备类型。目标是设备排列,例如特定型号或外形规格。

下面包含的设备目标aosp_cf_x86_64_phone-userdebug使您能够构建Cuttlefish虚拟 Android 设备以在没有物理设备的情况下进行测试。

要改为构建和更新物理设备,请选择另一个目标并按照闪烁设备的说明进行操作。

  1. 通过从源代码签出的根目录运行以下命令来设置构建 Android 设备的环境:

    source build/envsetup.sh
    
  2. 将构建目标传递给 lunch 命令,如下所示:

    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 源代码的完整文档的链接。有关 Git 项目的完整列表以及与每个项目关联的分支的各个项目(路径),请参阅AOSP 存储库

对于 Git 项目的代码审查,您将使用基于 Web 的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 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 平台开发的入门代码实验室。请参阅为后续步骤提交补丁,有关开发 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 .

在这一点上,你完成了!干得好!

得到帮助

如果您在此代码实验室中遇到错误,请使用任何页面底部的问题跟踪器链接报告错误。向android-building组发送问题。