From cbcd5365c8047c6e8d141ebc46a3acef8d6ddd17 Mon Sep 17 00:00:00 2001 From: Rikka <1103670381@qq.com> Date: Mon, 2 Jan 2023 01:02:57 +0800 Subject: [PATCH 1/3] Fix bootanim.rc being incorrectly patched after updating magisk --- README.md | 9 +++-- waydroid_extras.py | 84 ++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index f9ab39c..db20dc3 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,11 @@ Open terminal and switch to directory where "waydroid_extras.py" is located then Then restart waydroid service with command below : sudo systemctl start waydroid-container.service -Magisk will be installed on next boot ! -Note That this is bootless installation and modules don't work as of now ! +Magisk will be installed on next boot ! + +Zygisk and modules like LSPosed should work now. + +Please use `Direct Install into system partition` to update Magisk in Magisk manager. ## Install libndk arm translation @@ -67,7 +70,7 @@ Open terminal and switch to directory where "waydroid_extras.py" is located then Then restart waydroid service with command below : sudo systemctl start waydroid-container.service - + ## Get Android ID for device registration You need to register you device with its it before being able to use gapps, this will print out your Android ID which you can use for device registration required for google apps: diff --git a/waydroid_extras.py b/waydroid_extras.py index feae3e9..bc82dff 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -10,6 +10,7 @@ import platform from tqdm import tqdm import requests import re +import gzip download_loc = "" if os.environ.get("XDG_CACHE_HOME", None) is None: @@ -415,54 +416,40 @@ def install_magisk(): dl_link = "https://huskydg.github.io/magisk-files/app-release.apk" dl_file_name = os.path.join(download_loc, "magisk.apk") extract_to = "/tmp/magisk_unpack" - # act_md5 = "d60706f6ac22dc7ee32ae297e5252ef7" sys_image_mount = "/tmp/waydroidimage" - sbin_dir = os.path.join(sys_image_mount, "sbin") - # loc_md5 = "" + magisk_dir = os.path.join(sys_image_mount, "system", "etc", "init", "magisk") init_rc_component = """ on post-fs-data start logd - mkdir /dev/waydroid-magisk - mount tmpfs tmpfs /dev/waydroid-magisk mode=0755 - copy /sbin/magisk64 /dev/waydroid-magisk/magisk64 - chmod 0755 /dev/waydroid-magisk/magisk64 - symlink ./magisk64 /dev/waydroid-magisk/magisk - exec - root root -- /dev/waydroid-magisk/magisk64 --install - copy /sbin/magisk32 /dev/waydroid-magisk/magisk32 - chmod 0755 /dev/waydroid-magisk/magisk32 - copy /sbin/magiskinit /dev/waydroid-magisk/magiskinit - chmod 0755 /dev/waydroid-magisk/magiskinit - copy /sbin/magiskpolicy /dev/waydroid-magisk/magiskpolicy - chmod 0755 /dev/waydroid-magisk/magiskpolicy - exec - root root -- /dev/waydroid-magisk/magiskpolicy --live --magisk "allow * magisk_file lnk_file *" - exec - root root -- /dev/waydroid-magisk/magiskinit -x manager /dev/waydroid-magisk/stub.apk - write /dev/.magisk_livepatch 0 - mkdir /dev/waydroid-magisk/.magisk 700 - mkdir /dev/waydroid-magisk/.magisk/mirror 700 - mkdir /dev/waydroid-magisk/.magisk/block 700 + exec - root root -- /system/etc/init/magisk/magisk64 --setup-sbin /system/etc/init/magisk + exec - root root -- /system/etc/init/magisk/magiskpolicy --live --magisk "allow * magisk_file lnk_file *" + mkdir /sbin/.magisk 700 + mkdir /sbin/.magisk/mirror 700 + mkdir /sbin/.magisk/block 700 + copy /system/etc/init/magisk/config /sbin/.magisk/config + rm /dev/.magisk_unblock start FAhW7H9G5sf wait /dev/.magisk_unblock 40 - -service FAhW7H9G5sf /dev/waydroid-magisk/magisk --post-fs-data + rm /dev/.magisk_unblock +service FAhW7H9G5sf /sbin/magisk --post-fs-data user root seclabel - oneshot - -service HLiFsR1HtIXVN6 /dev/waydroid-magisk/magisk --service +service HLiFsR1HtIXVN6 /sbin/magisk --service class late_start user root seclabel - oneshot - on property:sys.boot_completed=1 mkdir /data/adb/magisk 755 - exec - root root -- /dev/waydroid-magisk/magisk --boot-complete - + exec - root root -- /sbin/magisk --boot-complete + exec -- /system/bin/sh -c "if [ ! -e /data/data/io.github.huskydg.magisk ] ; then pm install /system/etc/init/magisk/magisk.apk; fi" + on property:init.svc.zygote=restarting - exec - root root -- /dev/waydroid-magisk/magisk --zygote-restart + exec - root root -- /sbin/magisk --zygote-restart on property:init.svc.zygote=stopped - exec - root root -- /dev/waydroid-magisk/magisk --zygote-restart + exec - root root -- /sbin/magisk --zygote-restart """ system_img = os.path.join(get_image_dir(), "system.img") @@ -480,20 +467,22 @@ on property:init.svc.zygote=stopped mount_image(system_img, sys_image_mount) # Download magisk - while not os.path.isfile(dl_file_name): - if os.path.isfile(dl_file_name): - os.remove(dl_file_name) - print("==> Magisk zip not downloaded or hash mismatches, downloading now .....") - loc_md5 = download_file(dl_link, dl_file_name) + if os.path.isfile(dl_file_name): + os.remove(dl_file_name) + print("==> Downloading latest Magisk-Delta now .....") + download_file(dl_link, dl_file_name) # Extract magisk files print("==> Extracting archive...") with zipfile.ZipFile(dl_file_name) as z: z.extractall(extract_to) - if not os.path.exists(sbin_dir): - os.makedirs(sbin_dir, exist_ok=True) + if not os.path.exists(magisk_dir): + os.makedirs(magisk_dir, exist_ok=True) + if not os.path.exists(os.path.join(sys_image_mount, "sbin")): + os.makedirs(os.path.join(sys_image_mount, "sbin"), exist_ok=True) + # Now setup and install magisk binary and app print("==> Installing magisk now ...") @@ -505,21 +494,31 @@ on property:init.svc.zygote=stopped for filename in filenames: o_path = os.path.join(lib_dir, filename) filename = re.search('lib(.*)\.so', filename) - n_path = os.path.join(sbin_dir, filename.group(1)) + n_path = os.path.join(magisk_dir, filename.group(1)) shutil.copyfile(o_path, n_path) + shutil.copyfile(dl_file_name, os.path.join(magisk_dir,"magisk.apk") ) + + # Mark magisk files as executable + print("==> Chmodding...") + try: os.system("chmod +x "+ os.path.join(magisk_dir, "magisk*")) + except: print("==> Couldn't mark files as executable!") # Add entry to init.rc + # Updating Magisk from Magisk manager will modify bootanim.rc, + # So it is necessary to backup the original bootanim.rc. print("==> Adding entry to init.rc") - init_path = os.path.join(sys_image_mount, "system", "etc", "init", "hw", "init.rc") - if not os.path.isfile(init_path): - # init.rc not found, assuming it's located in the root folder (Android 10 and older) - init_path = os.path.join(sys_image_mount, "init.rc") + init_path = os.path.join(sys_image_mount, "system", "etc", "init", "bootanim.rc") + gz_filename = os.path.join(init_path)+".gz" + with open(init_path,'rb') as f_ungz: + with gzip.open(gz_filename,'wb') as f_gz: + f_gz.writelines(f_ungz) with open(init_path, "r") as initfile: initcontent = initfile.read() if init_rc_component not in initcontent: initcontent=initcontent+init_rc_component with open(init_path, "w") as initfile: initfile.write(initcontent) + # Unmount and exit print("==> Unmounting .. ") try: @@ -527,7 +526,6 @@ on property:init.svc.zygote=stopped except subprocess.CalledProcessError as e: print("==> Warning: umount failed.. {} ".format(str(e.output.decode()))) - print("==> Magisk was installed ! Restart waydroid service to apply changes !") def install_widevine(): From 2ac028572252bfb74826d846eb09d4248420c5b6 Mon Sep 17 00:00:00 2001 From: Rikka <1103670381@qq.com> Date: Mon, 2 Jan 2023 01:18:35 +0800 Subject: [PATCH 2/3] Fix installation for 32bit magisk --- waydroid_extras.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/waydroid_extras.py b/waydroid_extras.py index bc82dff..44705b1 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -418,10 +418,12 @@ def install_magisk(): extract_to = "/tmp/magisk_unpack" sys_image_mount = "/tmp/waydroidimage" magisk_dir = os.path.join(sys_image_mount, "system", "etc", "init", "magisk") + arch_dir = "x86" if "x86" in platform.machine() else "arm" + arch = "_64" if "64" in platform.machine() else "" init_rc_component = """ on post-fs-data start logd - exec - root root -- /system/etc/init/magisk/magisk64 --setup-sbin /system/etc/init/magisk + exec - root root -- /system/etc/init/magisk/magisk{arch} --setup-sbin /system/etc/init/magisk exec - root root -- /system/etc/init/magisk/magiskpolicy --live --magisk "allow * magisk_file lnk_file *" mkdir /sbin/.magisk 700 mkdir /sbin/.magisk/mirror 700 @@ -450,7 +452,7 @@ on property:init.svc.zygote=restarting on property:init.svc.zygote=stopped exec - root root -- /sbin/magisk --zygote-restart - """ + """.format(arch=32 if arch=="" else 64) system_img = os.path.join(get_image_dir(), "system.img") if not os.path.isfile(system_img): @@ -486,8 +488,6 @@ on property:init.svc.zygote=stopped # Now setup and install magisk binary and app print("==> Installing magisk now ...") - arch_dir = "x86" if "x86" in platform.machine() else "arm" - arch = "_64" if "64" in platform.machine() else "" lib_dir = os.path.join(extract_to, "lib", "{arch_dir}{arch}".format(arch_dir=arch_dir, arch=arch)) for parent, dirnames, filenames in os.walk(lib_dir): From e765a0c880170513a3ce8a49261bae28999b100c Mon Sep 17 00:00:00 2001 From: LegacyGamerHD Date: Sat, 31 Dec 2022 20:17:56 +0100 Subject: [PATCH 3/3] Update waydroid_extras.py --- waydroid_extras.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waydroid_extras.py b/waydroid_extras.py index 44705b1..21b4d36 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -627,5 +627,5 @@ def main(): elif args.widevine: install_widevine() -if __name__ == "__main__": #sbin +if __name__ == "__main__": main()