InSnh-Gd

InSnh-Gd 的小空间

Waydroid 用の LineageOS20 システムを構築する

2024 年 4 月 4 日、つまりこの記事が執筆された時点で、Waydroid は最高で LineageOS 18 のコンテナイメージを提供しており、Android 11 に基づいています。しかし、Waydroid は LineageOS 20 の準備を進めており、GitHub で LineageOS 20 を見つけることができますが、現在は完全に使用可能な状態には達しておらず、多くの問題があります。たとえば、libndk のトランスパイルが正常に機能しないようで、arm64 のゲームが実行できません。

LineageOS 20 vendor : https://github.com/waydroid/android_vendor_waydroid/tree/lineage-20

TIPS: ビルドプロセス中にエラーが発生した場合、エラーのトラブルシューティングセクションで問題を見つけられるかもしれません。


事前準備#

私は Arch Linux を実行している X86 プラットフォームを LineageOS のビルドデバイスとして使用しています。

Lineage-20 をビルドするには、32GB 以上の RAM と約 300GB のハードディスクスペースが必要です(Waydroid 用にビルドする場合、実際にはこれほどのスペースは必要ないかもしれません)、および GitHub にアクセスできるネットワーク(国内のミラーサイトを使用して LineageOS のソースコードをクローンすることも可能です。後で国内のミラーサイトを使用します)。

ここで Arch Linux では multilib リポジトリを有効にする必要があります。

LineageOS のソースコードを取得するには、repo gitが必要です。

$ sudo pacman -Sy repo git

LineageOS をビルドするには、いくつかのビルド依存関係をインストールする必要があります:bc bison base_devel ccache curl flex git git-lfs gnupg gperf imagemagick readline lib32-zlib lib32-libelf lz4 lib32-sdl12-compat openssl libxml2 lzop pngcrush rsync schedtool squashfs-tools libxslt zip zlib

また、LineageOS 20 をビルドするために必要な OpenJDK 11 と Python 3 をインストールします。

$ sudo pacman -Sy bc bison base_devel ccache curl flex git git-lfs gnupg gperf imagemagick readline lib32-zlib lib32-libelf lz4 lib32-sdl12-compat openssl libxml2 lzop pngcrush rsync schedtool squashfs-tools libxslt zip zlib jdk11-openjdk python

LineageOS のビルド#

まず、lineageos-20 のビルド用ディレクトリを作成します。ここでは~/l20を例にします。

$ mkdir ~/l20

git の設定#

repoを使用するには、lineage-20 リポジトリをクローンするために認証が必要ですので、git のユーザー情報を設定する必要があります。

$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

git lfs が利用可能であることを確認します。

$ git lfs install

初期化#

ローカルリポジトリを初期化します:

$ repo init -u https://github.com/LineageOS/android.git -b lineage-20.0 --git-lfs
$ repo sync build/make

Waydroid の local_manifests を取得します:

$ wget -O - https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/lineage-20/manifest_scripts/generate-manifest.sh | bash

同期#

ソースコードを同期します。これには 1 時間以上かかる場合があります:

$ repo sync

次に、ローカルビルド環境を設定します:

$ . build/envsetup.sh

パッチ#

Waydroid のパッチを適用します:

$ apply-waydroid-patches

ビルドの開始#

Waydroid AOSP lunch には以下のオプションがあります:

lineage_waydroid_arm-userdebug
lineage_waydroid_arm64-userdebug
lineage_waydroid_x86-userdebug
lineage_waydroid_x86_64-userdebug

私は X86_64 プラットフォームを使用しているため、lineage_waydroid_x86_64-userdebugオプションを使用します。

次にビルドを行います。

. build/envsetup.sh
lunch lineage_waydroid_x86_64-userdebug
make systemimage -j$(nproc --all)
make vendorimage -j$(nproc --all)

注意-j$(nproc --all)はすべてのスレッドを使用します。ビルド中にメモリ不足が発生した場合は、スレッド数を減らすことをお勧めします。

これは長いプロセスになります。私のプラットフォームは AMD Ryzen R5 7600X + 16GB メモリの構成で、最初のビルドには約 3〜4 時間かかります。

AOSP はデフォルトで「Android Sparse Image」イメージを出力しますが、私たちは raw filesystems (img) 形式のイメージが必要ですので、出力されたイメージを必要なsystem.imgvendor.imgに変換する必要があります。

$ simg2img $OUT/system.img ~/system.img
$ simg2img $OUT/vendor.img ~/vendor.img

HOME ディレクトリに出力されたイメージが見つかります。

ビルドしたカスタムイメージの使用#

カスタムイメージを/usr/share/waydroid-extra/images/にコピーする必要があります。

$ sudo mkdir -p /usr/share/waydroid-extra/images
$ sudo cp ~/system.img /usr/share/waydroid-extra/images
$ sudo cp ~/vendor.img /usr/share/waydroid-extra/images

次に Waydroid を初期化します。

sudo waydroid init -f 

これで Waydroid 上で LineageOS 20 を使用できるようになります~

いくつかのスクリーンショット:
h7js.png

hNbv.png

hCvY.png

エラーのトラブルシューティング#

Git-LFS が正常に動作していない#

FAILED: Verifying uses-libraries: external/chromium-webview/prebuilt/arm64/webview.apk
Outputs: out/target/common/obj/APPS/webview_intermediates/enforce_uses_libraries.status
Error: exited with code: 1
Command: /bin/bash -c "(rm -f out/target/common/obj/APPS/webview_intermediates/enforce_uses_libraries.status ) && (build/soong/scripts/manifest_check.py --enforce-uses-libraries --enforce-uses-libraries-status out/target/common/obj/APPS/webview_intermediates/enforce_uses_libraries.status --aapt out/host/linux-x86/bin/aapt external/chromium-webview/prebuilt/arm64/webview.apk )"
Output:
zipro W 03-18 08:22:10 595921 595921] Error opening archive external/chromium-webview/prebuilt/arm64/webview.apk: Invalid file
ERROR: dump failed because no AndroidManifest.xml found
�[1;31merror:�[0m Command '['out/host/linux-x86/bin/aapt', 'dump', 'badging', 'external/chromium-webview/prebuilt/arm64/webview.apk']' returned non-zero exit status 1

ビルド中に上記のエラーが発生した場合、まず環境に Git-LFS がインストールされているか、または正常にインストールされているかを確認してください。

$ git lfs install
Git LFS initialized.

initializedが返されない場合は、Git LFS を再インストールし、再度 Git-LFS が必要なファイルをソースコードから取得してください。

$ repo sync -c
$ repo forall -c 'git lfs pull' 

Waydroid のパッチを再適用する必要があるかもしれません。

$ apply-waydroid-patches

このプロセス中にいくつかのパッチの競合が発生する可能性がありますので、ソースコードを再同期してください。

$ repo sync

再度ビルドを試みます。

. build/envsetup.sh
lunch lineage_waydroid_x86_64-userdebug
make systemimage -j$(nproc --all)
make vendorimage -j$(nproc --all)

参考資料#

https://docs.waydro.id/development/compile-waydroid-lineage-os-based-images

https://wiki.lineageos.org/emulator

この記事はMix Spaceによって xLog に同期更新されました。
元のリンクはhttps://blog.insnhgd.com/posts/code/2


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。