您可以为人类历史上安装量最大的操作系统的开发工作贡献一份力。没错,您已经踏上了成为一名 Android 平台工程师的旅程。
尽管道路崎岖,但我们 Android 团队会在每次发布时竭力为您扫清障碍。我们每天都会直接完善 Android 开源项目 (AOSP)。
因此,请安心就位,启动终端,让我们一起创造历史。
目标
我们希望通过此 Codelab 实现以下两个目标:
- 此 Codelab 能让您大致了解一下 Android 工程师开发平台(操作系统)的工作流程。
- 此 Codelab 就像一个强制函数,能激励您在入门过程中对 Android 的工具、文档和开发者工作流程提供反馈。
前提条件
以下是这个 Codelab 的完整要求列表,源自用于通用平台 (AOSP) 开发的要求。
为参加此 Codelab,您需要进行以下设置:
- 满足所有公开要求的 Linux 实体工作站。
- 修改 Android 代码库所需的 Repo 和 Git 配置。
环境
通常,用户直接在工作站上进行构建和开发。由于您使用的终端可能各种各样,并且使用的许多命令都会因终端而异,因此在不同的终端环境中,您需要以不同的方式运行命令。具体而言,这些命令包括 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 -j16
初次同步可能需要一个小时或更长的时间。在等待时,请参阅下载说明了解相关详细信息。
每个 Repo 检出分支都由一个清单文件表示。您可以同时拥有多个 Repo 检出分支,只要它们位于不同的目录中即可。但请注意,每个检出分支和 build 大约需要 300GB 存储空间,并且需要的空间会不断增加,因此请不要超过两个,或者也可使用附加硬盘为您的系统扩容。
提示:要释放空间,请删除分支目录,然后从创建子目录那一步重新开始:
rm -rf aosp2
构建代码
如需构建 Android,您必须使用 lunch
命令选择要构建的目标设备类型。目标是设备排列方式,例如特定型号或设备类型。
通过设备目标 aosp_cf_x86_phone-userdebug
,您可以构建 Cuttlefish 虚拟 Android 设备,用于在没有实体设备的情况下进行测试。
如需改为构建和更新实体设备,请选择其他目标,并按照刷写设备的说明进行操作。
在源代码检出的根目录下运行以下命令,设置 Android 设备的构建环境:
source build/envsetup.sh
将构建目标传递给 lunch 命令,如下所示:
lunch aosp_cf_x86_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
构建代码:
m
在设备上更新 build:
adb root adb remount adb sync adb reboot acloud reconnect
您应该会在设备上看到颜色变化。
测试代码
在 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 中的项目,您将使用 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 平台开发入门 Codelab 的全部内容。有关后续步骤,请参阅提交补丁程序;有关 Android 开发的完整详细信息,请参阅本网站的其余内容。
还原更改
通常,在测试和审核/批准后,您可以在 Gerrit 中提交更改并将更改合并到代码库中。
然而在 Codelab 中,请点击 Gerrit 中的 Abandon 来还原您的更改列表。
然后放弃 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-building 网上论坛。