您可以帮助开发地球历史上安装最广泛的操作系统。是的,您来到这里是为了踏上成为 Android 平台工程师的旅程。
尽管这条路充满挑战,但 Android 团队会努力简化您的旅程,每次发布。该团队每天都通过在 Android 开源项目 (AOSP) 中的直接工作进行改进。
所以坐下来,启动终端,让我们创造历史。
目标
此 Codelab 的任务有两个:
- 让您初步了解在该平台(操作系统)上工作的 Android 工程师的开发人员工作流程。
- 鼓励您提供有关 Android 工具、文档和开发人员工作流程的反馈。
先决条件
此 Codelab 的要求列表源自通用平台 ( AOSP ) 开发的要求。要参加此 Codelab,请设置以下内容:
- 满足所有公共要求的物理 Linux 工作站。
- 编辑 Android 代码库所需的Repo 和 Git 配置。
环境
通常,用户直接在工作站上构建和开发。因为您可能在各种终端中工作,并且使用的许多命令都是特定于终端的,所以您需要在每个终端会话中重新运行它们。具体来说,这些包括source build/envsetup.sh
和lunch
命令。
设置工作站
- 在您的工作站上安装必要的软件包。
- 仍在终端中时,安装 Repo 并获取所有 Git 存储库的凭据。
初始化并同步代码
导航到您的主目录:
cd ~
在其中创建一个本地工作子目录:
mkdir aosp
导航到目录:
cd aosp
初始化 AOSP 存储库源代码 master 分支(默认):
repo init -u https://android.googlesource.com/platform/manifest
输入或接受您的 Git 凭据(姓名、电子邮件地址)。
同步源代码:
repo sync -j8
初始同步可能需要一个小时或更长时间。
每个 repo checkout 都由一个清单文件表示。允许一次有超过 1 个 repo checkout,只要它们存在于不同的目录中。但请注意,每次检出和构建大约需要 300 GB 的使用量(并且还在增加),因此要么限制自己进行 2 次回购检出,要么使用辅助驱动器扩充系统。
构建代码
要构建 Android,您必须选择要使用lunch
命令构建的目标设备类型。目标是设备排列,例如特定型号或外形规格。
下面包含的设备目标aosp_cf_x86_64_phone-userdebug
使您能够构建Cuttlefish虚拟 Android 设备以在没有物理设备的情况下进行测试。
要改为构建和更新物理设备,请选择另一个目标并按照闪烁设备的说明进行操作。
通过从源代码签出的根目录运行以下命令来设置构建 Android 设备的环境:
source build/envsetup.sh
将构建目标传递给 lunch 命令,如下所示:
lunch aosp_cf_x86_64_phone-userdebug
使用以下方法从结帐中的任何位置构建代码:
m
预计第一次构建需要数小时。后续构建花费的时间要少得多。
创建 Acloud 实例
Acloud是 AOSP 中的命令行工具,可帮助用户创建虚拟 Android 设备,在本例中为 Cuttlefish。
如果您在用于构建代码的同一终端会话中,请继续。否则,重新运行envsetup.sh
脚本和您首先在此处使用的相同lunch
命令。然后
使用以下命令创建 Acloud 本地实例:
acloud create --local-image --local-instance
接受对所需包的更新。
如果出现提示,请重新启动工作站以使所有更改生效。
选择 Cuttlefish 设备。
您应该会看到一个包含 Android 设备的 VNC 会话!
您可以使用鼠标和键盘与工作站上的虚拟设备进行交互。您还可以在使用设备时通过使用 Android 调试桥 (adb) logcat
命令跟踪日志中的活动:
adb logcat
做出改变
按照此示例更改列表更新源代码。
从结帐的根目录(
aosp/
目录)导航到frameworks/native
Git 项目:cd frameworks/native
使用此命令启动一个临时项目:
repo start <some-name> .
编辑
SurfaceFlinger.cpp
以在以下位置包含更改列表中的更新:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
找到这一行:
postComposition();
将这两行替换为以下内容:
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();
构建代码:
m
更新设备上的构建:
adb root
adb remount
adb sync
adb reboot
acloud reconnect
如果系统提示您选择设备,请选择显示最短运行时间的设备。 (这可能是您看到的列表中的最后一个。)要查看所有虚拟设备实例,请使用
acloud list
和acloud list -v
命令。
确认您在所选设备上看到与图 1 中所示类似的颜色变化。
图 1.成功更改颜色后的屏幕外观
测试你的代码
Codelab 的这一部分使用源代码树中的示例测试,但失败了。这使用Atest在本地运行测试并测试代码。
要使用该测试,请按照以下说明操作:
跑步:
atest DevCodelabTest
测试将失败。要修复它,请找到失败测试的源代码:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
然后看这里
platform_testing/tests/example/devcodelab
要编辑文件,请在
android.test.example.devcodelab.DevCodelabTest
中获取测试名称并将.
使用/
,得到这个结果:src/android/test/example/devcodelab/DevCodelabTest.java
然后编辑
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
取代
Assert.assertTrue(false)
和
Assert.assertTrue(true)
再次运行测试以确认您已解决问题:
atest DevCodelabTest
上传您的代码以供审核
Repo 通过捆绑命令(例如git clone
来同时跨多个 Git 存储库(或项目)工作,从而简化了 Git 的使用。
请参阅源代码管理工具以了解 Git 和 Repo 的概述,以及指向有关使用 Android 源代码的完整文档的链接。有关 Git 项目的完整列表以及与每个项目关联的分支的各个项目(路径),请参阅AOSP 存储库。
对于 Git 项目的代码审查,您将使用基于 Web 的Gerrit代码审查系统。
假设您在
frameworks/native
项目中进行了更改,请运行这些命令来上传它们:cd frameworks/native
repo start codelab .
git add .
git commit
对于您的提交消息,请输入以下内容:
Android codelab change Test: manual atest
上传您的更改:
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 start
、 git commit
和repo upload
更改,您可以重置文件本身。假设您在aosp/platform_testing directory
中,使用以下命令重置文件:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
在这一点上,你完成了!干得好!
得到帮助
如果您在此代码实验室中遇到错误,请使用任何页面底部的问题跟踪器链接报告错误。向android-building组发送问题。