目录

1. 安装repo

1curl 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`

1142 REPO_URL = os.environ.get('REPO_URL', None) 2143 if not REPO_URL: 3144 REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

将144行改成清华源,这样可以节省时间。保存后退出。

3. 初始化下载仓库位置

1sudo mkdir fde && cd fde 

1)使用waydroid原生代码分支:

1sudo repo init https://src.ift.run/fde/LineageOS/android -b lineage-18.1 --depth=1

    编译时lunch 29

2)使用fde代码分支:

1sudo repo init https://src.ift.run/fde/LineageOS/android -b fde_w --depth=1

    编译时lunch 45/phytium_fde_arm64-userdebug

4. 下载代码并打patch

1sudo repo sync -j 16 

应用patch之前需要将代码文件的属主改为自己,否则会因为权限问题导致patch应用失败。

1sudo chown myself:myself * -R && source build/envsetup.sh

5. 创建编译环境

10.31.91.40 服务器上存在 redroid-builder镜像

1docker run --privileged -it  --hostname build -u wunan --name waydroid_build -v ~/fde:/src redroid-builder

进入镜像后,再次将所有文件修改属主。sudo chown wunan:wunan /src -R 这是方便编译程序有权限写目标文件。

6. 编译过程中碰到的问题

  • 没有python可执行程序 ,这是因为没有安装python2导致的。

1 ln -s /usr/bin/python3 /usr/bin/python
  • 提示vndk abi 版本不兼容

    • 根据提示运行

1make 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

    • 添加如下两行到文件最末尾(该步骤已经不需要,代码已经提交)

      1vim build/make/core/tasks/check_boot_jars/package_allowed_list.txt 2vendor\.waydroid\.window\.V1_1 3vendor\.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. 修改镜像文件格式

1cd out/target/product/fde_arm64/ 2mkdir output_dir 3simg2img system.img output_dir/system.img 4simg2img vendor.img output_dir/vendor.img

output_dir中的system.img和vendor.img就是最终需要的镜像。将这两个文件传输到目标机器的/usr/share/waydroid-extra/images目录下(waydroid-extra/images目录需自己手动创建)。

然后,我们需要重新初始化Waydroid,以便它使用我们的自定义镜像:

1sudo waydroid init -f

8. 提交代码到远程仓库注意事项

1我们后面提交代码一般都是提交到远程fde分支,如果该project之前没有远程fde分支,提交时会创建, 但是需要修改manifest文件(fde_w分支)指定该project的版本为fde_w,确保repo init 拉到对的版本。 2###下面的说明可以忽略,修改直接提交到源码仓库### 3waydroid对aosp或者说lineage的仓库代码修改的提交使用了patch的方式,不直接将修改提交到远程仓库代码,而是将本地修改生成patch,提交patch到远程仓库,本地更新时,只需要更新patch仓库, 4再通过apply-waydroid-patches打好patch。我们自己增加的仓库可以不需要使用patch的方式,如(device/phytium/fde)。 5如何使用patch的方式提交: 6 现在我修改了build/make仓库,做了三次commit,那可以通过"git format-patch -3"生成如下三个patch文件: 7     0001-add-vendor.waydroid.window-package-allow.patch 8 0002-add-phytium-check.patch 9 0003-decrease-BUILD_NUMBER-length-so-ro.build.fingerprint.patch 10 将这三个文件拷贝到vendor/extra/waydroid-patches/base-patches-30下,如果之前这个仓库(build/make)还没有任何patch,那还需要新建仓库路径,即上面三个patch的存放路径为: 11  vendor/extra/waydroid-patches/base-patches-30/build/make 12 以前就存在patch的仓库,我们git format-patch -n 把自己的提交生成patch,再修改patch前的编号就行,比如你在build/make有一个commit,那你git format-patch -1生成一个patch, 13 将patch的编号由0001改为0004,再将你新增的patch提交到远程仓库就行。