跳到主要内容

Android APK编译

环境准备:多核的X86主机,内存要求16G,硬盘大小最低要求配备512G。

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

  • 安装docker
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

  • 更新软件源
apt update
  • 进入家目录,并安装相关工具
cd ~ && apt install wget zip openjdk-11-jre git openjdk-17-jre -y
  • 下载cmdline安装包
wget https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
  • 解压
unzip commandlinetools-linux-10406996_latest.zip
  • 设置PATH环境变量
export PATH=$PATH:/root/cmdline-tools/bin/
  • 设置ANDROID_SDK_ROOT环境变量
mkdir /root/sdk_root && export ANDROID_SDK_ROOT=/root/sdk_root/
  • 安装android ndk21.1.6352462版本
sdkmanager --sdk_root=/root/sdk_root/ 'ndk;21.1.6352462'

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

3. 编译systemui apk

  • 获取源码,并进入boringdroidsystemui目录
git clone https://gitee.com/openfde/boringdroidsystemui && cd boringdroidsystemui
  • 设置JAVA_HOME环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
  • 执行gradle构建apk
./gradlew 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. 编译fdevnc apk

  • 回到家目录,获取fde-vnc源码
cd ~ && git clone https://gitee.com/openfde/remote-desktop-clients 
  • 进入remote-desktop-clients目录,构建bVNC-app
cd remote-desktop-clients && ./gradlew :bVNC-app:assembleRelease  -PVersionName="1.0.5"
  • 进入家目录,获取gallery-fde源码
cd ~ && git clone https://gitee.com/openfde/gallery_fde
  • 进入gallery-fde目录,并修改目录权限
cd gallery_fde && chmod +x gradlew
  • 构建应用
./gradlew  build -PappVersion=1.0.6

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

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

docker cp ubuntu_build_apk:/root/boringdroidsystemui/app/build/outputs/apk/release/BoringdroidSystemUI.apk  $AOSP_TOP_DIR/vendor/prebuilts/bdapps/bin/BoringdroidSystemUI.apk
docker cp ubuntu_build_apk:/root/remote-desktop-clients/bVNC-app/build/outputs/apk/release/FdeVncClient.apk $AOSP_TOP_DIR/device/openfde/fde/fde_vnc/

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