您可以帮助开发地球历史上安装最广泛的操作系统。是的,您来这里是为了踏上成为 Android 平台工程师的旅程。
尽管道路充满挑战,但 Android 团队努力简化您的旅程,每个版本都是如此。该团队每天都通过 Android 开源项目 (AOSP) 的直接工作进行改进。
所以坐下来,启动终端,让我们创造历史。
目标
此 Codelab 的使命有两个:
- 让您初步了解在该平台(操作系统)上工作的 Android 工程师的开发人员工作流程。
- 鼓励您提供有关 Android 工具、文档和开发人员工作流程的反馈。
先决条件
此 Codelab 的要求列表源自通用平台 ( AOSP ) 开发的要求列表。要使用此 Codelab,请设置以下内容:
环境
通常,用户直接在工作站上构建和开发。由于您可能在各种终端中工作,并且使用的许多命令是特定于终端的,因此您需要在每个终端会话中重新运行它们。具体来说,这些包括source build/envsetup.sh
和lunch
命令。
设置工作站
- 在您的工作站上安装必要的软件包。
- 仍在终端中时,安装 Repo 并获取所有 Git 存储库的凭据。
初始化并同步代码
导航到您的主目录:
cd ~
在其中创建一个本地工作子目录:
mkdir aosp
导航到目录:
cd aosp
初始化AOSP存储库源代码主分支(默认):
repo init -u https://android.googlesource.com/platform/manifest
输入或接受您的 Git 凭据(姓名、电子邮件地址)。
同步源码:
repo sync -j8
初始同步可能需要一个小时或更长时间。
每个存储库签出都由一个清单文件表示。允许一次检出 1 个以上的存储库,只要它们存在于不同的目录中即可。但请注意,每次签出和构建的使用量约为 300 GB(并且还在不断增加),因此要么限制自己进行 2 次存储库签出,要么使用辅助驱动器增强系统。
构建代码
要构建 Android,您必须选择要使用lunch
命令构建的目标设备类型。目标是设备排列,例如特定型号或外形规格。
下面包含的设备目标aosp_cf_x86_64_phone-userdebug
使您能够构建Cuttlefish虚拟 Android 设备,以便在没有物理设备的情况下进行测试。
要构建和更新物理设备,请选择另一个目标并按照刷新设备的说明进行操作。
通过从源代码签出的根目录运行以下命令来设置构建 Android 设备的环境:
source build/envsetup.sh
将构建目标传递给午餐命令,如下所示:
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 源代码的完整文档的链接。请参阅AOSP 存储库以获取 Git 项目的完整列表以及与每个项目关联的分支的各个项目(路径)。
要在 Git 中对项目进行代码审查,您将使用Gerrit基于 Web 的代码审查系统。
假设您在
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 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 start
、 git commit
和repo upload
更改,因此您可以重置文件本身。假设您位于aosp/platform_testing directory
中,请使用以下命令重置文件:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
至此,你就完成了!干得好!
得到帮助
如果您在此 Codelab 期间遇到错误,请使用任意页面底部的问题跟踪器链接报告这些错误。向android 构建小组发送问题。