Google 致力于为黑人社区推动种族平等。查看具体举措

Android 开发者 Codelab

您可以为人类历史上安装量最大的操作系统的开发工作贡献一份力。没错,您已经踏上了成为一名 Android 平台工程师的旅程。

尽管道路崎岖,但我们 Android 团队会在每次发布时竭力为您扫清障碍。我们每天都会直接完善 Android 开源项目 (AOSP)。

因此,请安心就位,启动终端,让我们一起创造历史。

目标

我们希望通过此 Codelab 实现以下两个目标:

  1. 此 Codelab 能让您大致了解一下 Android 工程师开发平台(操作系统)的工作流程。
  2. 此 Codelab 就像一个强制函数,能激励您在入门过程中对 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 -j16
    

初次同步可能需要一个小时或更长的时间。在等待时,请参阅下载说明了解相关详细信息。

每个 Repo 检出分支都由一个清单文件表示。您可以同时拥有多个 Repo 检出分支,只要它们位于不同的目录中即可。但请注意,每个检出分支和 build 大约需要 300GB 存储空间,并且需要的空间会不断增加,因此请不要超过两个,或者也可使用附加硬盘为您的系统扩容。

提示:要释放空间,请删除分支目录,然后从创建子目录那一步重新开始:

rm -rf aosp2

构建代码

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

通过设备目标 aosp_cf_x86_phone-userdebug,您可以构建 Cuttlefish 虚拟 Android 设备,用于在没有实体设备的情况下进行测试。

如需改为构建和更新实体设备,请选择其他目标,并按照刷写设备的说明进行操作。

  1. 在源代码检出的根目录下运行以下命令,设置 Android 设备的构建环境:

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

    lunch aosp_cf_x86_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. 构建代码:

    m
    
  5. 在设备上更新 build:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    

您应该会在设备上看到颜色变化。

测试代码

在 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 中的项目,您将使用 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 平台开发入门 Codelab 的全部内容。有关后续步骤,请参阅提交补丁程序;有关 Android 开发的完整详细信息,请参阅本网站的其余内容。

还原更改

通常,在测试和审核/批准后,您可以在 Gerrit 中提交更改并将更改合并到代码库中。

然而在 Codelab 中,请点击 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 .

现在,大功告成!表现不错!

获取帮助

如果您在参加此 Codelab 期间遇到错误,请通过任意页面底部的网站反馈链接报告这些错误。若有问题请发送至 android-building 网上论坛。