Skip to content

Latest commit

 

History

History
241 lines (164 loc) · 9.35 KB

File metadata and controls

241 lines (164 loc) · 9.35 KB

Build instructions

You need at least 250 Gb free space on ssd.
Zram is recommended if less 16 Gb RAM

apt install -y zram-tools
find /etc/default/zramswap -type f -print0 | xargs -0 sed -i 's/.*PERCENT=.*/PERCENT=100/g'
systemctl restart zramswap.service

Based on official instruction from waydroid docs and lineageos wiki

Also used aosp_build for lineage 18.1 kernel and MindTheGapps for lineage 20.0

  1. Prepare for build

    git lfs install
    git config --global trailer.changeid.key "Change-Id"
    mkdir lineage-18.1
    cd lineage-18.1
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
    chmod a+x ~/.local/bin/repo
  2. Clone lineage vendor repo

    repo init -u https://github.com/LineageOS/android.git -b lineage-18.1 --git-lfs
    repo sync build/make
  3. Get waydroid vendor manifest

    wget -O - https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/lineage-18.1/manifest_scripts/generate-manifest.sh | bash
  4. OpenGapps part 1

    If you don't want it, skip to step 5

    Add block in the file: nano .repo/manifests/default.xml before the tag

    <remote name="opengapps" fetch="https://github.com/opengapps/"  />
    <remote name="opengapps-gitlab" fetch="https://gitlab.opengapps.org/opengapps/"  />
    
    <project path="vendor/opengapps/build" name="aosp_build" revision="master" remote="opengapps" />
    
    <project path="vendor/opengapps/sources/all" name="all" clone-depth="1" revision="master" remote="opengapps-gitlab" />
    <project path="vendor/opengapps/sources/x86_64" name="x86_64" clone-depth="1" revision="master" remote="opengapps-gitlab" />

    For arm add this instead of x86_64

    <!-- arm64 depends on arm -->
    <project path="vendor/opengapps/sources/arm" name="arm" clone-depth="1" revision="master" remote="opengapps-gitlab" />
    <project path="vendor/opengapps/sources/arm64" name="arm64" clone-depth="1" revision="master" remote="opengapps-gitlab" />
  5. Sync repos

    About 200 gigabytes of data will be downloaded

    repo sync
  6. OpenGapps part 2

    If you don't want it, skip to step 7

    Add line in the end of this file: nano device/waydroid/waydroid/device.mk

    # GAPPS
    GAPPS_VARIANT := pico
    $(call inherit-product, vendor/opengapps/build/opengapps-packages.mk)

    or

    curl https://raw.githubusercontent.com/YogSottot/waydroid_stuff/master/kernel_build/lineage-18.1/0001-Add-opengapps-in-device.mk.patch | git -C device/waydroid/waydroid/ apply -v --index

    Package Comparison

    fix opengapps build

    curl https://github.com/cwhuang/aosp_build/commit/384cdac7930e7a2b67fd287cfae943fdaf7e5ca3.patch | git -C vendor/opengapps/build apply -v --index
    curl https://github.com/cwhuang/aosp_build/commit/3bb6f0804fe5d516b6b0bc68d8a45a2e57f147d5.patch | git -C vendor/opengapps/build apply -v --index
  7. Apply waydroid patches

    . build/envsetup.sh
    apply-waydroid-patches
  8. Apply custom patches

    If you don't need the patches, why are you building images? You can get official images via waydroid init -f -s GAPPS.

    • Enable squashfs images [PR]

      curl https://patch-diff.githubusercontent.com/raw/waydroid/android_device_waydroid_waydroid/pull/2.patch | git -C device/waydroid/waydroid/ apply -v --index
    • Only x86_64: BoardConfig: Reland scudo native allocator for x86 devices [PR]

      sed -i 's/MALLOC_SVELTE\ \:\=\ true//g' device/waydroid/waydroid/BoardConfig.mk
      # apply patch doesn't work because of the above patch
      # curl https://patch-diff.githubusercontent.com/raw/waydroid/android_device_waydroid_waydroid/pull/4.patch | git -C device/waydroid/waydroid/ apply -v --index
    • Add force_mouse_as_touch option. PR
      If PR is already merged, this patch is no longer needed

      curl https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/828afefb59ccce46e089756e95e15e6191e272f1/waydroid-patches/base-patches-30/frameworks/base/0051-Force-mouse-event-as-touch-1-2.patch | git -C frameworks/base/ apply -v --index
      curl https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/828afefb59ccce46e089756e95e15e6191e272f1/waydroid-patches/base-patches-30/frameworks/native/0015-Force-mouse-event-as-touch-2-2.patch | git -C frameworks/native/ apply -v --index
    • Add xmlconfig PR
      If PR is already merged, this patch is no longer needed

      curl https://raw.githubusercontent.com/YogSottot/waydroid_stuff/master/kernel_build/lineage-18.1/0001-patch-30-Enable-xmlconfig-on-Android-01.patch | git -C external/mesa/ apply -v --index
      curl https://raw.githubusercontent.com/YogSottot/waydroid_stuff/master/kernel_build/lineage-18.1/0001-patch-30-Enable-xmlconfig-on-Android-02.patch | git -C device/waydroid/waydroid/ apply -v
  9. Install docker Documentation

    Of course you can build images without a docker. The Dockerfile has a list of required dependencies.

  10. Copy Dockerfile

    wget https://raw.githubusercontent.com/YogSottot/waydroid_stuff/master/kernel_build/Dockerfile

    Dockerfile based on this

  11. Build Docker image

    docker build -t waydroid-build-24.04 .

    Build arguments

    GIT_NAME: Name to use for git commits. Default: "YogSottot" GIT_EMAIL: Email to use for git commits. Default: "7411302+YogSottot@users.noreply.github.com"
    PULL_REBASE: Perform rebase instead of merge when pulling. Default: true

    You can pass build arguments to the build command like this:

    docker build -t waydroid-build-24.04 . --build-arg GIT_NAME="John Doe" --build-arg GIT_EMAIL="john@doe.com" .

    If you want to use ccache, create a volume for it

    mkdir -p /mnt/ccache/lineage-18.1
    docker create -v /mnt/ccache/lineage-18.1:/ccache --name ccache-18.1 waydroid-build-24.04
  12. Build system images

    docker run -e CCACHE_DIR=/ccache --volumes-from ccache-18.1 -v $(pwd):/mnt/lineage -it waydroid-build-24.04 bash -c 'cd /mnt/lineage && ccache -M 50G && . build/envsetup.sh && lunch lineage_waydroid_x86_64-userdebug && make systemimage -j$(nproc --all)' 

    If you need waydroid-arm64, change lineage_waydroid_x86_64-userdebug to lineage_waydroid_arm64-userdebug.
    A full list of options is available at command lunch.

  13. Build vendor image

    docker run -e CCACHE_DIR=/ccache --volumes-from ccache-18.1 -v $(pwd):/mnt/lineage -it waydroid-build-24.04 bash -c 'cd /mnt/lineage && ccache -M 50G && . build/envsetup.sh && lunch lineage_waydroid_x86_64-userdebug && make vendorimage -j$(nproc --all)' 
    • If you get the error: ../subprojects/libarchive-3.7.2/libarchive/archive.h:101:10: fatal error: 'android_lf.h' file not found then do this [PR]:

      curl https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27648.patch | git -C external/mesa/ apply -v --index

      or

      rm -f external/mesa/subprojects/libarchive.wrap
    • If you get the error: xmllint.c:45:10: fatal error: 'readline/readline.h' file not found then do this:

      rm -f external/mesa/subprojects/libxml2.wrap

    Also you can create both images with a single command:

    docker run -e CCACHE_DIR=/ccache --volumes-from ccache-18.1 -v $(pwd):/mnt/lineage -it waydroid-build-24.04 bash -c 'cd /mnt/lineage && ccache -M 50G && . build/envsetup.sh && lunch lineage_waydroid_x86_64-userdebug && make systemimage -j$(nproc --all) && make vendorimage -j$(nproc --all)' 
  14. Convert images

    simg2img  out/target/product/waydroid_x86_64/system.img ./system.img
    simg2img  out/target/product/waydroid_x86_64/vendor.img ./vendor.img

    or

    docker run -v $(pwd):/mnt/lineage -it waydroid-build-24.04 bash -c 'cd /mnt/lineage && simg2img  out/target/product/waydroid_x86_64/system.img ./system.img && simg2img  out/target/product/waydroid_x86_64/vendor.img ./vendor.img'
  15. Use images

    Make a backup beforehand

    rsync -a /var/lib/waydroid /opt/waydroid_backups/

    Your images are in current dir [lineage-18.1] (system.img / vendor.img) You can use rsync to copy images to /var/lib/waydroid/images

    rsync *.img /var/lib/waydroid/images/