AOSP镜像和Linux程序编译
Edit

AOSP镜像和Linux程序编译

文档用于指导OpenFDE开发爱好者如何快速编译OpenFDE源码。编译工作包括AOSP代码编译和Linux程序编译。

1. AOSP源码编译

1.1 准备环境

  AOSP源码编译需要准备一台多核的X86主机,内存要求16G,硬盘大小最低要求配备512G,这里建议优先使用固态硬盘,当然你也可以使用机械硬盘,但是编译速度可能会很慢。

1.2 安装Ubuntu22.04

  准备好主机后,需要在你的环境上安装Ubuntu22.04, 友情提供下载链接:https://old-releases.ubuntu.com/releases/22.04/ 在这里找到ubuntu-22.04.3-live-server-amd64.iso下载。

1.3 安装和更新repo依赖

  Android通常使用repo脚本管理源码树,方便大家用一个命令就可以下载几百个仓库。

  • 安装curl、repo、wget工具

sudo apt install curl repo wget -y
  • 获取repo脚本文件

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo && chmod +x repo && sudo mv repo /usr/bin/repo
  • 把python3链接到python

sudo ln -sf /usr/bin/python3 /usr/bin/python
  • 设置repo_url环境变量,以便后续repo检查更新

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
  • 将repo_url添加到bash环境变量

echo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' >> ~/.bashrc

1.4 安装编译依赖

sudo apt install -y python-is-python3 git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5 simg2img meson glslang-tools pkg-config cmake python3-mako

1.5 下载源码

注意:从这一节开始,后续的操作都不要使用root用户,请务必切换到普通用户操作

  • 创建fde目录,并安装git工具

mkdir fde && cd fde && sudo apt install git git-lfs -y
  • 配置git账号和邮箱

git config --global user.name openfde && git config --global user.email openfde@openfde.com

这里记得把user.name的参数"openfde"和user.email的参数"openfde@openfde.com"换成你自己的用户名和邮箱。

  • 下载fde的mainifests仓库

repo init -u https://gitee.com/openfde/fde-manifests -b fde_14 --git-lfs #aosp14 repo init -u https://gitee.com/openfde/fde-manifests -b fde_w --git-lfs #aosp11,已停止维护

该步骤会按照fde manifests仓库初始化android源码树目录结构,其中-u表示指定从中检索清单代码库的地址;-b表示指定代码分支。fde_w是我们的开发分支,最新的代码都在该分支上。

在执行repo init这条命令时,可能会出现Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)? , 此时输入y继续执行即可。

  • 同步代码库中的最新代码

repo sync -j4

在国内为了提升代码下载速度,可以注释掉主站,启用镜像。修改成如下内容,删除镜像仓库的注释符(<!-- 和-->, 启用mirros repos. 然后将主库加上注释符(需要注意的是,OpenFDE依然有3个大仓库,gitee无法镜像,所以只能从github下载)。

vim .repo/manifests/default <!-- the mirrors repos start --> <remote name="lineageos" fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/" review="review.lineageos.org" /> <remote name="aosp" fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP" review="android-review.googlesource.com" revision="refs/tags/android-11.0.0_r46" /> <remote name="fde" fetch="https://gitee.com/openfde/" revision="refs/heads/fde_w" /> <!-- the mirrors repos end --> <!-- the main repos start --> <!-- <remote name="lineageos" fetch="https://github.com/" review="review.lineageos.org" /> <remote name="aosp" fetch="https://android.googlesource.com/" review="android-review.googlesource.com" revision="refs/tags/android-11.0.0_r46" /> <remote name="fde" fetch="https://github.com/openfde/" revision="refs/heads/fde_w" /> --> <!-- the main repos end -->

repo sync命令会耗时50min左右,这里需要用心等待,当然也会根据实际环境的网络情况耗时不同。如果执行失败,你可以尝试再次执行,直到成功。

1.6 编译Android源码

  • 导入安卓编译环境变量

source build/envsetup.sh
  • 同步预编译的APK(本步骤的apk是系统基础组件apk如systemui.apk等,运行命令会自动下载)

syncFdeApk

syncFdeApk命令会从公网对象存储中下载当前版本匹配的apk到aosp源码树对应位置。如果修改了对应的apk源码,需要重新编译apk,请参考Android APK编译

  • 选择编译选项,并且编译
    注意:fde_14 分支不适用lunch列出编译产品,lunch只使用fde_w分支的编译.

breakfast fde_arm64 user Trying dependencies-only mode on a non-existing device tree? ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=14 LINEAGE_VERSION=21.0-20260323-UNOFFICIAL-arm64 PRODUCT_INCLUDE_TAGS=com.android.mainline mainline_module_prebuilt_nightly TARGET_PRODUCT=fde_arm64 TARGET_BUILD_VARIANT=user TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=generic TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv8-a TARGET_2ND_CPU_VARIANT=generic HOST_OS=linux HOST_OS_EXTRA=Linux-5.15.0-173-generic-x86_64-Ubuntu-22.04.3-LTS HOST_CROSS_OS=windows BUILD_ID=AP2A.240905.003 OUT_DIR=out PRODUCT_SOONG_NAMESPACES=device/openfde/fde device/generic/goldfish-opengl make -j24

整个编译过程一般耗时在1小时10分钟左右,如果在这一步中断,需要从"导入安卓编译环境变量"source build/envsetup.sh开始重新执行整个编译环节。

如果在编译过程中出现下图中的编译错误,请忽略,不影响编译过程。

image-20240130-074112.png

1.7 转换镜像格式为linux ext格式

cd out/target/product/fde_arm64/ && simg2img system.img system.ext.img && simg2img vendor.img vendor.ext.img

1.8 拷贝镜像到运行目标

scp system.ext.img vendor.ext.img user@target:

user@target:表示后面用来编译Linux程序的ARMv8环境,其中user表示账户名,target表示机器的ip地址。这里务必加上后面的冒号!!!

2. Linux程序编译

2.1 编译前准备

Linux程序编译需要在ARMv8架构的主机上进行,你需要选定一个工程目录来编译和安装Linux相关程序,下面各小节的操作都在工程目录如openfde-linux/下进行。如果不是首次编译,请确保将各个依赖库的代码同步更新到最新。

下面将详细介绍在不同的操作系统上编译Linux程序。

2.2 Kylin2303上编译Linux程序

2.2.1 设置要求

开始编译之前,请先前往系统设置-安全中关闭网络保护、应用保护和设备安全保护。

image-20240130-074204.png
image-20240130-074209.png

2.2.2 一键编译

你可以执行下列命令进行一键编译Linux程序。

cd ~ && sudo apt install git -y && git clone https://gitee.com/openfde/quick_start_to_compile_linux_programs && cp -a quick_start_to_compile_linux_programs/build_linux_for_fde.sh . && ./build_linux_for_fde.sh

 

Comments