From 2bd9ca5d5a16980f34c468705135fba43e3ba8ee Mon Sep 17 00:00:00 2001 From: LegacyGamerHD Date: Sat, 31 Dec 2022 12:25:59 +0100 Subject: [PATCH 1/8] re upload my work and the others --- waydroid_extras.py | 208 ++++++++++++++++++++++++++++----------------- 1 file changed, 131 insertions(+), 77 deletions(-) diff --git a/waydroid_extras.py b/waydroid_extras.py index c1e7e95..135106e 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -16,7 +16,7 @@ if os.environ.get("XDG_CACHE_HOME", None) is None: download_loc = os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".cache", "waydroid_script", "downloads") else: download_loc = os.path.join(os.environ["XDG_CACHE_HOME"], "waydroid_script", "downloads") - + print(download_loc) if not os.path.exists(download_loc): @@ -58,7 +58,7 @@ def get_image_dir(): cfg.read(cfg_file) if "waydroid" not in cfg: - print("==> Required entry in config was not found, Cannot continue !s") + print("==> Required entry in config was not found, Cannot continue !s") #magisk sys.exit(1) return cfg["waydroid"]["images_path"] @@ -202,18 +202,18 @@ def get_android_id(): def install_ndk(): sys_image_mount = "/tmp/waydroidimage" - ndk_zip_url = "https://github.com/newbit1/libndk_translation_Module/archive/c6077f3398172c64f55aad7aab0e55fad9110cf3.zip" + ndk_zip_url = "https://www.dropbox.com/s/eaf4dj3novwiccp/libndk_translation_Module-c6077f3398172c64f55aad7aab0e55fad9110cf3.zip?dl=1" dl_file_name = os.path.join(download_loc, "libndktranslation.zip") extract_to = "/tmp/libndkunpack" #All catalog files will be marked as executable! - act_md5 = "5e8e0cbde0e672fdc2b47f20a87472fd" + act_md5 = "4456fc1002dc78e544e8d9721bb24398" loc_md5 = "" apply_props = { - "ro.product.cpu.abilist": "x86_64,x86,armeabi-v7a,armeabi", #arm64-v8a, + "ro.product.cpu.abilist": "x86_64,x86,armeabi-v7a,armeabi,arm64-v8a", "ro.product.cpu.abilist32": "x86,armeabi-v7a,armeabi", - "ro.product.cpu.abilist64": "x86_64", #,arm64-v8a", + "ro.product.cpu.abilist64": "x86_64,arm64-v8a", "ro.dalvik.vm.native.bridge": "libndk_translation.so", "ro.enable.native.bridge.exec": "1", - "ro.ndk_translation.version": "0.2.2", + # "ro.ndk_translation.version": "0.2.2", "ro.dalvik.vm.isa.arm": "x86", "ro.dalvik.vm.isa.arm64": "x86_64" } @@ -308,10 +308,10 @@ on property:ro.enable.native.bridge.exec=1 def install_houdini(): sys_image_mount = "/tmp/waydroidimage" - houdini_zip_url = "https://raw.githubusercontent.com/casualsnek/miscpackages/main/libhoudini_a11.zip" + houdini_zip_url = "https://www.dropbox.com/s/v7g0fluc7e8tod8/libhoudini.zip?dl=1" dl_file_name = os.path.join(download_loc, "libhoudini.zip") extract_to = "/tmp/houdiniunpack" #All catalog files will be marked as executable! - act_md5 = "c9a80831641de8fd44ccf93a0ad8b585" + act_md5 = "838097117cec7762e958d7cbc209415e" loc_md5 = "" apply_props = { @@ -411,47 +411,56 @@ on property:ro.enable.native.bridge.exec=1 print("==> libhoudini translation installed ! Restart waydroid service to apply changes !") - def install_magisk(): - dl_link = "https://github.com/topjohnwu/Magisk/releases/download/v20.4/Magisk-v20.4.zip" + dl_link = "https://huskydg.github.io/download/magisk/25.2-delta-5.apk" busybox_dl_link = "https://github.com/Gnurou/busybox-android/raw/master/busybox-android" busybox_dl_file_name = os.path.join(download_loc, "busybox-android") - dl_file_name = os.path.join(download_loc, "magisk.zip") + dl_file_name = os.path.join(download_loc, "magisk.apk") extract_to = "/tmp/magisk_unpack" - act_md5 = "9503fc692e03d60cb8897ff2753c193f" + act_md5 = "ea22b994ba110d0dba9f85748e264607" busybox_act_md5 = "2e43cc2e8f44b83f9029a6561ce5d8b9" sys_image_mount = "/tmp/waydroidimage" + magisk_sbin = os.path.join(sys_image_mount, "sbin") loc_md5 = "" busybox_loc_md5 = "" - magisk_init = """#!/system/bin/sh -mount -o remount,rw / -rm /sbin/magisk /sbin/magiskpolicy /sbin/magiskinit -cp /magiskinit /sbin/magiskinit -ln -s /sbin/magiskinit /sbin/magisk -ln -s /sbin/magiskinit /sbin/magiskpolicy -mkdir -p /data/adb/magisk -cp /busybox /data/adb/magisk/busybox -cp /util_functions.sh /data/adb/magisk/util_functions.sh -cp /boot_patch.sh /data/adb/magisk/boot_patch.sh -cp /addon.d.sh /data/adb/magisk/addon.d.sh -magisk -c >&2 -ln -sf /data /sbin/.magisk/mirror/data -ln -sf /vendor /sbin/.magisk/mirror/vendor -magisk --post-fs-data -sleep 1 -magisk --service -magisk --boot-complete -mount -o remount,ro / - """ - init_rc_component = """on property:dev.bootcomplete=1 - start magisk + init_rc_component = """ +on post-fs-data + 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 + symlink ./magisk64 /dev/waydroid-magisk/su + symlink ./magisk64 /dev/waydroid-magisk/resetprop + 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 + symlink ./magiskinit /dev/waydroid-magisk/magiskpolicy + mkdir /dev/waydroid-magisk/.magisk 700 + mkdir /dev/waydroid-magisk/.magisk/mirror 700 + mkdir /dev/waydroid-magisk/.magisk/mirror/data 700 + mkdir /dev/waydroid-magisk/.magisk/block 700 + mount none /data /dev/waydroid-magisk/.magisk/mirror/data bind rec + start FAhW7H9G5sf -service magisk /system/bin/init-magisk.sh - class main +service FAhW7H9G5sf /dev/waydroid-magisk/magisk --post-fs-data user root - group root oneshot - """ + +service HLiFsR1HtIXVN6 /dev/waydroid-magisk/magisk --service + class late_start + user root + oneshot + +on property:sys.boot_completed=1 + start YqCTLTppv3ML + exec -- /system/bin/sh -c "if [ ! -e /data/data/io.github.huskydg.magisk ] ; then pm install /sbin/magisk.apk; fi" + +service YqCTLTppv3ML /dev/waydroid-magisk/magisk --boot-complete + user root + oneshot + """ #sbin if os.path.isfile(dl_file_name): with open(dl_file_name,"rb") as f: bytes = f.read() @@ -496,53 +505,36 @@ service magisk /system/bin/init-magisk.sh with zipfile.ZipFile(dl_file_name) as z: z.extractall(extract_to) + if not os.path.exists(magisk_sbin): + os.makedirs(magisk_sbin) + # Now setup and install magisk binary and app print("==> Installing magisk now ...") - with open(os.path.join(sys_image_mount, "system", "bin", "init-magisk.sh"), "w") as imf: - imf.write(magisk_init) - os.system("chmod 755 {}".format(os.path.join(sys_image_mount, "system", "bin", "init-magisk.sh"))) + arch_dir = "x86" if "x86" in platform.machine() else "arm" - arch = "64" if "64" in platform.machine() else "" - shutil.copyfile(os.path.join(extract_to, arch_dir, "magiskinit{arch}".format(arch=arch)), - os.path.join(sys_image_mount, "sbin", "magiskinit")) - shutil.copyfile(os.path.join(extract_to, arch_dir, "magiskinit{arch}".format(arch=arch)), - os.path.join(sys_image_mount, "magiskinit")) - os.system("chmod 755 {} & chmod 755 {}".format(os.path.join(sys_image_mount, "sbin", "magiskinit"), os.path.join(sys_image_mount, "magiskinit"))) - - # Copy busybox - print("==> Installing BusyBox") - shutil.copyfile(busybox_dl_file_name, os.path.join(sys_image_mount, "busybox")) - os.system("chmod 755 {}".format(os.path.join(sys_image_mount, "busybox"))) - - # Copy files from common directory - for file in ["util_functions.sh", "boot_patch.sh", "addon.d.sh"]: - shutil.copyfile(os.path.join(extract_to, "common", file), - os.path.join(sys_image_mount, file)) - os.system("chmod 755 {}".format(os.path.join(sys_image_mount, file))) - - # Create symlinks - print("==> Creating symlinks") - os.system("cd {root}/sbin && ln -sf magiskinit magiskinit >> /dev/null 2>&1".format(root=sys_image_mount)) - os.system("cd {root}/sbin && ln -sf magiskinit magisk >> /dev/null 2>&1".format(root=sys_image_mount)) - print("==> magiskinit -> magisk") - os.system("cd {root}/sbin && ln -sf /magiskinit magiskpolicy >> /dev/null 2>&1".format(root=sys_image_mount)) - print("==> magiskinit -> magiskpolicy") + 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): + for filename in filenames: + o_path = os.path.join(lib_dir, filename) + filename = re.search('lib(.*)\.so', filename) + n_path = os.path.join(magisk_sbin, filename.group(1)) + shutil.copyfile(o_path, n_path) + shutil.copyfile(dl_file_name, os.path.join(magisk_sbin,"magisk.apk") ) # Add entry to init.rc print("==> Adding entry to init.rc") - with open(os.path.join(sys_image_mount, "init.rc"), "r") as initfile: + 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") + with open(init_path, "r") as initfile: initcontent = initfile.read() if init_rc_component not in initcontent: initcontent=initcontent+init_rc_component - with open(os.path.join(sys_image_mount, "init.rc"), "w") as initfile: + with open(init_path, "w") as initfile: initfile.write(initcontent) - - # Install Magisk apk - if not os.path.exists(os.path.join(sys_image_mount, "system", "priv-app", "Magisk")): - os.makedirs(os.path.join(sys_image_mount, "system", "priv-app", "Magisk")) - shutil.copyfile(os.path.join(extract_to, "common", "magisk.apk"), - os.path.join(sys_image_mount, "system", "priv-app", "Magisk", "magisk.apk")) - # Unmount and exit print("==> Unmounting .. ") try: @@ -550,7 +542,64 @@ service magisk /system/bin/init-magisk.sh 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(): + vendor_image_mount = "/tmp/waydroidvendor" + widevine_zip_url = "https://codeload.github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/zip/refs/heads/chromeos_hatch" + dl_file_name = os.path.join(download_loc, "widevine.zip") + extract_to = "/tmp/widevineunpack" #All catalog files will be marked as executable! + act_md5 = "7fe3b2a9502da9ad63189a077c457ad2" + loc_md5 = "" + + if os.path.isfile(dl_file_name): + with open(dl_file_name,"rb") as f: + bytes = f.read() + loc_md5 = hashlib.md5(bytes).hexdigest() + vendor_img = os.path.join(get_image_dir(), "vendor.img") + if not os.path.isfile(vendor_img): + print("The vendor image path '{}' from waydroid config is not valid !".format(vendor_img)) + sys.exit(1) + print("==> Found vendor image: "+vendor_img) + + img_size = int(os.path.getsize(vendor_img)/(1024*1024)) + + # Resize image to get some free space + resize_img(vendor_img, "{}M".format(img_size+50)) + + # Mount the system image + mount_image(vendor_img, vendor_image_mount) + + # Download the file if hash mismatches or if file does not exist + while not os.path.isfile(dl_file_name) or loc_md5 != act_md5: + if os.path.isfile(dl_file_name): + os.remove(dl_file_name) + print("==> windevine zip not downloaded or hash mismatches, downloading now .....") + loc_md5 = download_file(widevine_zip_url, dl_file_name) + + # Extract widevine files + print("==> Extracting archive...") + with zipfile.ZipFile(dl_file_name) as z: + z.extractall(extract_to) + + #Mark widevine files as executable + print("==> Chmodding...") + try: os.system("chmod +x "+extract_to+" -R") + except: print("==> Couldn't mark files as executable!") + + # Copy library file + print("==> Copying library files ...") + shutil.copytree(os.path.join(extract_to, "vendor_google_proprietary_widevine-prebuilt-chromeos_hatch", "prebuilts"), vendor_image_mount, dirs_exist_ok=True) + + print("==> Unmounting .. ") + try: + subprocess.check_output(["umount", vendor_image_mount], stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + print("==> Warning: umount failed.. {} ".format(str(e.output.decode()))) + + print("==> Widevine installed ! Restart waydroid service to apply changes !") + def main(): about = """ WayDroid Helper script v0.3 @@ -575,6 +624,9 @@ def main(): parser.add_argument('-l', '--install-libhoudini', dest='houdini', help='Install libhoudini for arm translation', action='store_true') + parser.add_argument('-w', '--install-windevine', dest='widevine', + help='Integrate Widevine DRM (L3)', + action='store_true') args = parser.parse_args() if args.install: @@ -589,6 +641,8 @@ def main(): install_magisk() elif args.houdini: install_houdini() + elif args.widevine: + install_widevine() -if __name__ == "__main__": +if __name__ == "__main__": #sbin main() From 3cb971a4aed02ed3557e0a64ab0c3e1b5c495a7d Mon Sep 17 00:00:00 2001 From: ayasa520 <55699692+ayasa520@users.noreply.github.com> Date: Sat, 31 Dec 2022 21:47:21 +0800 Subject: [PATCH 2/8] Update waydroid_extras.py --- waydroid_extras.py | 64 +++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/waydroid_extras.py b/waydroid_extras.py index 135106e..beb6fda 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -31,7 +31,7 @@ def stop_waydroid(): def download_file(url, f_name): md5 = "" - response = requests.get(url, stream=True) + response = requests.get(url, stream=True,proxies={"http":"127.0.0.1:7890","https":"127.0.0.1:7890"}) total_size_in_bytes = int(response.headers.get('content-length', 0)) block_size = 1024 # 1 Kibibyte progress_bar = tqdm(total=total_size_in_bytes, unit='iB', unit_scale=True) @@ -412,66 +412,64 @@ on property:ro.enable.native.bridge.exec=1 print("==> libhoudini translation installed ! Restart waydroid service to apply changes !") def install_magisk(): - dl_link = "https://huskydg.github.io/download/magisk/25.2-delta-5.apk" - busybox_dl_link = "https://github.com/Gnurou/busybox-android/raw/master/busybox-android" - busybox_dl_file_name = os.path.join(download_loc, "busybox-android") + 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 = "ea22b994ba110d0dba9f85748e264607" - busybox_act_md5 = "2e43cc2e8f44b83f9029a6561ce5d8b9" + # act_md5 = "d60706f6ac22dc7ee32ae297e5252ef7" sys_image_mount = "/tmp/waydroidimage" - magisk_sbin = os.path.join(sys_image_mount, "sbin") + sbin_dir = os.path.join(sys_image_mount, "sbin") loc_md5 = "" - busybox_loc_md5 = "" 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 - symlink ./magisk64 /dev/waydroid-magisk/su - symlink ./magisk64 /dev/waydroid-magisk/resetprop + 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 - symlink ./magiskinit /dev/waydroid-magisk/magiskpolicy + 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/mirror/data 700 mkdir /dev/waydroid-magisk/.magisk/block 700 - mount none /data /dev/waydroid-magisk/.magisk/mirror/data bind rec start FAhW7H9G5sf + wait /dev/.magisk_unblock 40 service FAhW7H9G5sf /dev/waydroid-magisk/magisk --post-fs-data user root + seclabel - oneshot service HLiFsR1HtIXVN6 /dev/waydroid-magisk/magisk --service class late_start user root + seclabel - oneshot on property:sys.boot_completed=1 - start YqCTLTppv3ML - exec -- /system/bin/sh -c "if [ ! -e /data/data/io.github.huskydg.magisk ] ; then pm install /sbin/magisk.apk; fi" + mkdir /data/adb/magisk 755 + exec - root root -- /dev/waydroid-magisk/magisk --boot-complete + +on property:init.svc.zygote=restarting + exec - root root -- /dev/waydroid-magisk/magisk --zygote-restart + +on property:init.svc.zygote=stopped + exec - root root -- /dev/waydroid-magisk/magisk --zygote-restart + """ -service YqCTLTppv3ML /dev/waydroid-magisk/magisk --boot-complete - user root - oneshot - """ #sbin if os.path.isfile(dl_file_name): with open(dl_file_name,"rb") as f: bytes = f.read() loc_md5 = hashlib.md5(bytes).hexdigest() - if os.path.isfile(busybox_dl_file_name): - with open(busybox_dl_file_name,"rb") as f: - bytes = f.read() - busybox_loc_md5 = hashlib.md5(bytes).hexdigest() - - system_img = os.path.join(get_image_dir(), "system.img") if not os.path.isfile(system_img): print("The system image path '{}' from waydroid config is not valid !".format(system_img)) @@ -487,26 +485,19 @@ service YqCTLTppv3ML /dev/waydroid-magisk/magisk --boot-complete mount_image(system_img, sys_image_mount) # Download magisk - while not os.path.isfile(dl_file_name) or loc_md5 != act_md5: + 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) - # Download busybox android binary - while not os.path.isfile(busybox_dl_file_name) or busybox_loc_md5 != busybox_act_md5: - if os.path.isfile(busybox_dl_file_name): - os.remove(busybox_dl_file_name) - print("==> BusyBox binary not downloaded or hash mismatches, downloading now .....") - busybox_loc_md5 = download_file(busybox_dl_link, busybox_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(magisk_sbin): - os.makedirs(magisk_sbin) + if not os.path.exists(sbin_dir): + os.makedirs(sbin_dir, exist_ok=True) # Now setup and install magisk binary and app print("==> Installing magisk now ...") @@ -519,9 +510,8 @@ service YqCTLTppv3ML /dev/waydroid-magisk/magisk --boot-complete for filename in filenames: o_path = os.path.join(lib_dir, filename) filename = re.search('lib(.*)\.so', filename) - n_path = os.path.join(magisk_sbin, filename.group(1)) + n_path = os.path.join(sbin_dir, filename.group(1)) shutil.copyfile(o_path, n_path) - shutil.copyfile(dl_file_name, os.path.join(magisk_sbin,"magisk.apk") ) # Add entry to init.rc print("==> Adding entry to init.rc") From 6b4ab03ba342539f1f1afe45b7c493d63d96eec7 Mon Sep 17 00:00:00 2001 From: ayasa520 <55699692+ayasa520@users.noreply.github.com> Date: Sat, 31 Dec 2022 21:50:21 +0800 Subject: [PATCH 3/8] Update waydroid_extras.py --- waydroid_extras.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/waydroid_extras.py b/waydroid_extras.py index beb6fda..feae3e9 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -31,7 +31,7 @@ def stop_waydroid(): def download_file(url, f_name): md5 = "" - response = requests.get(url, stream=True,proxies={"http":"127.0.0.1:7890","https":"127.0.0.1:7890"}) + response = requests.get(url, stream=True) total_size_in_bytes = int(response.headers.get('content-length', 0)) block_size = 1024 # 1 Kibibyte progress_bar = tqdm(total=total_size_in_bytes, unit='iB', unit_scale=True) @@ -418,7 +418,7 @@ def install_magisk(): # act_md5 = "d60706f6ac22dc7ee32ae297e5252ef7" sys_image_mount = "/tmp/waydroidimage" sbin_dir = os.path.join(sys_image_mount, "sbin") - loc_md5 = "" + # loc_md5 = "" init_rc_component = """ on post-fs-data start logd @@ -464,12 +464,7 @@ on property:init.svc.zygote=restarting on property:init.svc.zygote=stopped exec - root root -- /dev/waydroid-magisk/magisk --zygote-restart """ - - if os.path.isfile(dl_file_name): - with open(dl_file_name,"rb") as f: - bytes = f.read() - loc_md5 = hashlib.md5(bytes).hexdigest() - + system_img = os.path.join(get_image_dir(), "system.img") if not os.path.isfile(system_img): print("The system image path '{}' from waydroid config is not valid !".format(system_img)) From 9af33d60f490fd4dd2656cb9955fd54ddb4b720e Mon Sep 17 00:00:00 2001 From: LegacyGamerHD Date: Sat, 31 Dec 2022 20:17:56 +0100 Subject: [PATCH 4/8] 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 feae3e9..a56b208 100755 --- a/waydroid_extras.py +++ b/waydroid_extras.py @@ -629,5 +629,5 @@ def main(): elif args.widevine: install_widevine() -if __name__ == "__main__": #sbin +if __name__ == "__main__": main() 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 5/8] 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 6/8] 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 7/8] 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() From e77cd523a027011a5f7cf3d078049a3c0c99da1e Mon Sep 17 00:00:00 2001 From: LegacyGamerHD Date: Mon, 2 Jan 2023 13:15:11 +0100 Subject: [PATCH 8/8] add Widevine to the readme --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index db20dc3..ebdd7b8 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,14 @@ 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 + +## Integrate Widevine DRM (L3) + + sudo python3 waydroid_extras.py -w +Then restart waydroid service with command below : + + sudo systemctl start waydroid-container.service + ## Get Android ID for device registration