Android APK编译

环境准备:多核的X86主机,内存要求16G。

1. 下载ubuntu镜像并运行容器

  • 安装docker

sudo apt update -y && sudo apt install docker.io
  • 从docker镜像仓库中拉取ubuntu:22.04镜像

sudo docker pull ubuntu:22.04
  • 运行镜像并进入容器

sudo docker run -it --name ubuntu_build_apk ubuntu:22.04

2. 下载cmdline tools和ndk

  • 更新软件源

  • 进入家目录,并安装相关工具

  • 下载cmdline安装包

  • 解压

  • 设置PATH环境变量

  • 设置ANDROID_SDK_ROOT环境变量

  • 安装android ndk21.1.6352462版本

如果命令执行过程中遇到"Accept?(y/N):",请按y。

3. 编译systemui apk

  • 获取源码,并进入boringdroidsystemui目录

  • 设置JAVA_HOME环境变量

  • 执行gradle构建apk

贴心提示:在使用此命令构建apk过程中,会先下载gradle安装包,如果构建过程比较漫长,可以参照下面四个步骤加快本环节的速度。

第一步,执行```./gradlew build```命令,会生成一个目录,如下面给的示例里/root/.gradle/wrapper/dists/gradle-7.6-bin/9l9tetv7ltxvx3i8an4pb86ye/。其中9l9tetv7ltxvx3i8an4pb86ye是随机生成的一串字符,请找到你自己的gradle-7.6-bin目录下生成的文件夹。

image-20240205-020152.png

第二步, 手动下载gradle安装包

image-20240205-020158.png

第三步,将gradle压缩包拷贝到生成的目录下去,这里记得9l9tetv7ltxvx3i8an4pb86ye改成你自己的目录

最后,再次执行build构建过程,此时build过程就会快很多啦!

说明: 由于sdkmanager要求java 17才能运行,而编译apk只能在java11上编译,所以这里需要重新设置JAVA_HOME为java11。如果使用java17编译的话会报如下错误:

Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io " to unnamed module @71cff6a8.

编译完成后可以在app/build/outputs/apk目录下找app/build/outputs/apk/release/BoringdroidSystemUI.apk文件。

4. 编译fusion linux application apk

  • 回到家目录,获取fde-vnc源码

  • 进入remote-desktop-clients目录,构建bVNC-app

5. 编译gallery_fde

  • 进入家目录,获取gallery-fde源码

  • 进入gallery-fde目录,并修改目录权限

  • 构建应用

6. 拷贝apk文件到aosp源码目录

打开新的linux shell终端,将3.3节和3.4节编译好的apk文件从容器中拷贝出来。

其中$AOSP_TOP_DIR 表示aosp的源码树顶层目录。