4.2.4 使用FDE仓库编译waydroid
1. 安装repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo && sudo mv repo /usr/bin/repo && chmod +x /usr/bin/repo
或者直接执行sudo apt install repo
2. 修改repo下载源
`vim /usr/bin/repo`
142 REPO_URL = os.environ.get('REPO_URL', None)
143 if not REPO_URL:
144 REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
将144行改成清华源,这样可以节省时间。保存后退出。
3. 初始化下载仓库位置
sudo mkdir fde && cd fde
1)使用waydroid原生代码分支:
sudo repo init https://src.ift.run/fde/LineageOS/android -b lineage-18.1 --depth=1
编译时lunch 29
2)使用fde代码分支:
sudo repo init https://src.ift.run/fde/LineageOS/android -b fde_w --depth=1
编译时lunch 45/phytium_fde_arm64-userdebug
4. 下载代码并打patch
sudo repo sync -j 16
应用patch之前需要将代码文件的属主改为自己,否则会因为权限问题导致patch应用失败。
sudo chown myself:myself * -R && source build/envsetup.sh
5. 创建编译环境
10.31.91.40 服务器上存在 redroid-builder镜像
docker run --privileged -it --hostname build -u wunan --name waydroid_build -v ~/fde:/src redroid-builder
进入镜像后,再次将所有文件修改属主。sudo chown wunan:wunan /src -R 这是方便编译程序有权限写目标文件。
6. 编译过程中碰到的问题
没有python可执行程序 ,这是因为没有安装python2导致的。
ln -s /usr/bin/python3 /usr/bin/python
提示vndk abi 版本不兼容
根据提示运行
make api-stubs-docs-update-current-api && make framework-wifi.stubs.source-update-current-api
提示framework-minus-apex_intermediates/classes.jar contains class file vendor/waydroid/window/V1_0/IWaydroidWindow.class ** not in the allow list build/make/core/tasks/check_boot_jars/package_allowed_list.txt
添加如下两行到文件最末尾(该步骤已经不需要,代码已经提交)
vim build/make/core/tasks/check_boot_jars/package_allowed_list.txt vendor\.waydroid\.window\.V1_1 vendor\.waydroid\.window\.V1_0
lunch 29 或者 lunch lineage_waydroid_arm64-userdebug
make systemimage -j$(nproc --all)
make vendorimage -j$(nproc --all) 或者make -j 24
编译报错:meson.build:545:2: ERROR: Program 'glslangValidator' not found or not executable。执行 sudo apt install glslang-tools
7. 修改镜像文件格式
cd out/target/product/fde_arm64/
mkdir output_dir
simg2img system.img output_dir/system.img
simg2img vendor.img output_dir/vendor.img
output_dir中的system.img和vendor.img就是最终需要的镜像。将这两个文件传输到目标机器的/usr/share/waydroid-extra/images目录下(waydroid-extra/images目录需自己手动创建)。
然后,我们需要重新初始化Waydroid,以便它使用我们的自定义镜像:
sudo waydroid init -f
8. 提交代码到远程仓库注意事项
我们后面提交代码一般都是提交到远程fde分支,如果该project之前没有远程fde分支,提交时会创建, 但是需要修改manifest文件(fde_w分支)指定该project的版本为fde_w,确保repo init 拉到对的版本。
###下面的说明可以忽略,修改直接提交到源码仓库###
waydroid对aosp或者说lineage的仓库代码修改的提交使用了patch的方式,不直接将修改提交到远程仓库代码,而是将本地修改生成patch,提交patch到远程仓库,本地更新时,只需要更新patch仓库,
再通过apply-waydroid-patches打好patch。我们自己增加的仓库可以不需要使用patch的方式,如(device/phytium/fde)。
如何使用patch的方式提交:
现在我修改了build/make仓库,做了三次commit,那可以通过"git format-patch -3"生成如下三个patch文件:
0001-add-vendor.waydroid.window-package-allow.patch
0002-add-phytium-check.patch
0003-decrease-BUILD_NUMBER-length-so-ro.build.fingerprint.patch
将这三个文件拷贝到vendor/extra/waydroid-patches/base-patches-30下,如果之前这个仓库(build/make)还没有任何patch,那还需要新建仓库路径,即上面三个patch的存放路径为:
vendor/extra/waydroid-patches/base-patches-30/build/make
以前就存在patch的仓库,我们git format-patch -n 把自己的提交生成patch,再修改patch前的编号就行,比如你在build/make有一个commit,那你git format-patch -1生成一个patch,
将patch的编号由0001改为0004,再将你新增的patch提交到远程仓库就行。