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():