尝试进行 Android 开发

尝试进行 Android 开发

本教程将引导您首次尝试 Android 操作系统开发。

Android 开发设置

在下载和构建 Android 源代码的 main 分支之前,请确保您的硬件满足必要的要求,并已正确安装必需的软件。您还应熟悉以下术语:

Git

Git 是一个免费的开源分布式版本控制系统。Android 使用 Git 执行本地操作,例如建立分支、提交、对比差异、修改。如需 Git 学习帮助,请参阅 Git 文档。

Repo

Repo 是 Git 的 Python 封装容器,可简化跨多个 Git 仓库执行复杂操作的过程。Repo 不会取代 Git 来执行所有版本控制操作,只会让复杂的 Git 操作更易于完成。 Repo 使用清单文件将 Git 项目汇总到 Android 超级项目中。清单文件

清单文件是一个 XML 文件,用于指定 Android 源代码中的各个 Git 项目在 AOSP 源代码树中的放置位置。

注意:本页上所有命令的前面都带有美元符号 ($),以便与输出或文件中的条目区分开来。如需将命令复制到剪贴板,请点击每个命令框右上角的复制代码示例图标。

满足硬件要求

您的开发工作站应该达到或超出以下硬件要求:

一个 64 位 x86 系统。

注意:您可以在 32 位系统上编译低于 2.3.x 的 AOSP 版本。

如果要检出和构建代码,至少需要 400 GB 可用磁盘空间(250 GB 空间用于检出代码 + 150 GB 空间用于构建代码)。

注意:如果您要检出镜像,则需要更多空间,因为完整的 Android 开源项目 (AOSP) 镜像包含所有使用过的 Git 代码库。

至少 64 GB RAM。Google 使用 72 核机器和 64 GB RAM 来构建 Android。采用此硬件配置时,一个完整的 Android build 大约需要 40 分钟;Android 增量 build 大约需要几分钟的时间。相比之下,使用 6 核机器和 64 GB RAM 构建一个完整 build 大约需要 6 个小时。

满足操作系统要求

开发工作站必须运行采用 GNU C 库 (glibc) 2.17 或更高版本的任何 64 位 Linux 发行版。

安装必需的软件包

如需安装 Ubuntu 18.04 或更高版本所需的软件包,请运行以下命令:

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

安装必需的软件

您必须先安装 OpenJDK、Make、Python 3 和 Repo,然后才能使用 AOSP。Android 的 AOSP 主分支附带预构建版本的 OpenJDK、Make 和 Python 3,因此不需要额外的安装步骤。下一部分介绍了如何安装 Repo。

安装 Repo

请按以下步骤安装 Repo:

下载当前软件包信息:

sudo apt-get update

运行以下命令以安装 Repo 启动器:

sudo apt-get install repo

Repo 启动器会提供一个 Python 脚本,该脚本可以初始化检出,并可以下载完整的 Repo 工具。

如果成功,请跳至第 4 步。

(可选)使用以下一系列命令手动安装 Repo:

export REPO=$(mktemp /tmp/repo.XXXXXXXXX)

curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo

gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65

curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo

前三个命令会设置一个临时文件,将 Repo 下载到该文件中,并验证提供的密钥是否与所需的密钥匹配。如果这些命令运行成功,则最后一个命令会安装 Repo 启动器。

验证 Repo 启动器版本:

repo version

输出应指示版本为 2.4 或更高版本,例如:

repo launcher version 2.45

下载 Android 源代码

Android 源代码位于由 Google 托管的一组 Git 仓库中。每个 Git 仓库都包含 Android 源代码的完整历史记录,其中包括对源代码的更改以及更改时间。如需下载 Android 源代码,请执行以下操作:

导航到您的主目录:

cd ~

在其中创建一个本地工作子目录:

mkdir aosp

前往该目录:

cd aosp

初始化 AOSP 代码库源代码主分支(默认):

repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest

输入或接受您的 Git 凭据(名称、电子邮件地址)。

同步源代码:

repo sync -c -j8

如果您在下载期间遇到任何问题,请参阅排查并解决同步问题。

构建代码

如需构建代码,请执行以下操作:

在您的工作目录中,获取 envsetup.sh 脚本的源代码以设置构建环境:

source build/envsetup.sh

使用 lunch 命令指定要构建的目标设备类型。目标是指设备组合,例如特定型号或外形规格。 指定此目标:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

您应该会看到目标和构建环境的概要:

============================================

PLATFORM_VERSION_CODENAME=VanillaIceCream

PLATFORM_VERSION=VanillaIceCream

PRODUCT_INCLUDE_TAGS=com.android.mainline

TARGET_PRODUCT=aosp_arm

TARGET_BUILD_VARIANT=eng

TARGET_ARCH=arm

TARGET_ARCH_VARIANT=armv7-a-neon

TARGET_CPU_VARIANT=generic

HOST_OS=linux

HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete

HOST_CROSS_OS=windows

BUILD_ID=AOSP.MAIN

OUT_DIR=out

============================================

构建目标:

m

第一次构建预计需要几个小时。后续构建所需的时间会大大减少。 build 的输出会显示在 $OUT_DIR 中。

启动 Cuttlefish

Cuttlefish 是用于测试 build 的 Android 模拟器。

运行以下命令来下载、构建和安装主机 Debian 软件包:

sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl

git clone https://github.com/google/android-cuttlefish

cd android-cuttlefish

for dir in base frontend; do

pushd $dir

# Install build dependencies

sudo mk-build-deps -i

dpkg-buildpackage -uc -us

popd

done

sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f

sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f

sudo usermod -aG kvm,cvdnetwork,render $USER

sudo reboot

重新启动操作会触发安装其他内核模块,并会应用 udev 规则。

启动 Cuttlefish:

launch_cvd --daemon

在网络浏览器中前往 https://localhost:8443,以连接到 Cuttlefish 设备。系统随即会显示您的搭载 Android 的虚拟设备。

更改

按照以下示例更改列表更新源代码。

从检出分支的根目录(aosp/ 目录)导航至 frameworks/native Git 项目:

cd frameworks/native

使用以下命令启动临时项目:

repo start .

使用编辑器在以下位置修改 SurfaceFlinger.cpp:

aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

找到以下行:

void SurfaceFlinger::updateColorMatrixLocked() {

在 updateColorMatrixLocked() 的开头添加以下代码行:

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});

构建代码:

m

在设备上更新 build:

adb root

adb remount -R

adb root

adb sync

adb reboot

验证您是否在所选设备上看到类似于图 1 的颜色变化。

图 1. 成功更改颜色之后的屏幕外观

修正测试

Codelab 的这个部分利用了一个示例测试,该测试位于源代码树中,并且已经失败。

如需运行、调试和修正测试,请按以下说明操作:

运行以下命令:

atest DevCodelabTest

测试失败。

注意:atest 是一个命令行工具,可让您在本地构建、安装和运行 Android 测试。

检查失败的测试的堆栈轨迹:

STACKTRACE:

java.lang.AssertionError

at org.junit.Assert.fail(Assert.java:87)

at org.junit.Assert.assertTrue(Assert.java:42)

at org.junit.Assert.assertTrue(Assert.java:53)

at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)

堆栈轨迹的最后一行显示了失败的测试 (testHelloWorld)。此测试位于名为 DevCodelabTest.java 的文件中。

如需确定要修正的测试的位置,请将 WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/ 附加到堆栈轨迹的最后一行(包括测试文件的名称)。因此,android.test.example.devcodelab.DevCodelabTest 会变为 WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/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 中的项目进行代码审核,请使用基于网络的代码审核系统 Gerrit。

重要提示:如需查看和回应更改,请确保您已登录 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 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 中查看您的变更

如需在 Gerrit 中查看您的更改,请前往终端中的链接输出。该链接类似于以下内容:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

还原更改

通常,在测试以及审核和批准后,您会在 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 .

以上就是 Android 平台开发入门 Codelab 的全部内容。

获取帮助

如果您在学习此 Codelab 期间遇到错误,请通过任意页面底部的问题跟踪器链接报告这些错误。若有疑问,请发送至 android-building 群组。

输入 ps -A | grep crosvm 以查看 crosvm 是否已在运行。如果 crossvm 正在运行,请输入 stop_cvd || true 或 kill crosvm 进程,并附上进程 PID。

相关推荐

GIF-逼平上届亚军 冰岛球迷兴奋庆祝
365-002 bet

GIF-逼平上届亚军 冰岛球迷兴奋庆祝

⌛ 07-09 👁️ 1811
哈罗单车收费标准
365bet足球直播

哈罗单车收费标准

⌛ 10-11 👁️ 186
深度揭秘刷单全链条,关于做局的人、刷手、技术对抗.......
‎同城寻爱约会
365-002 bet

‎同城寻爱约会

⌛ 01-04 👁️ 4406
努比亚 Z17
365-002 bet

努比亚 Z17

⌛ 09-11 👁️ 5149
皮肤不留疤痕的秘密—“地球活化石”蝾螈近乎完美的皮肤再生机制