add uninstall function

This commit is contained in:
Rikka
2023-05-27 16:55:24 +08:00
committed by Rikka
parent 4d15b6153c
commit 0d7681bccb
12 changed files with 244 additions and 63 deletions
+51 -13
View File
@@ -3,7 +3,7 @@ import os
import shutil
import re
from stuffs.general import General
from tools.helper import download_file, host, run
from tools.helper import download_file, get_data_dir, host, run
from tools.logger import Logger
from tools import container
@@ -14,6 +14,7 @@ class Magisk(General):
extract_to = "/tmp/magisk_unpack"
magisk_dir = os.path.join(partition, "etc", "init", "magisk")
machine = host()
files = ["etc/init/magisk"]
oringinal_bootanim = """
service bootanim /system/bin/bootanimation
class core animation
@@ -60,6 +61,13 @@ on property:init.svc.zygote=stopped
Logger.info("Downloading latest Magisk-Delta to {} now ...".format(self.download_loc))
download_file(self.dl_link, self.download_loc)
# require additional setup
def setup(self):
Logger.info("Additional setup")
magisk_absolute_dir = os.path.join(self.copy_dir, self.magisk_dir)
data_dir = get_data_dir()
shutil.copytree(magisk_absolute_dir, os.path.join(data_dir, "adb", "magisk"), dirs_exist_ok=True)
def copy(self):
magisk_absolute_dir = os.path.join(self.copy_dir, self.magisk_dir)
if not os.path.exists(magisk_absolute_dir):
@@ -79,6 +87,16 @@ on property:init.svc.zygote=stopped
shutil.copyfile(o_path, n_path)
run(["chmod", "+x", n_path])
shutil.copyfile(self.download_loc, os.path.join(magisk_absolute_dir,"magisk.apk") )
shutil.copytree(os.path.join(self.extract_to, "assets", "chromeos"), os.path.join(magisk_absolute_dir, "chromeos"), dirs_exist_ok=True)
assets_files = [
"addon.d.sh",
"boot_patch.sh",
"stub.apk",
"util_functions.sh"
]
for f in assets_files:
shutil.copyfile(os.path.join(self.extract_to, "assets", f), os.path.join(magisk_absolute_dir, f))
self.setup()
# Updating Magisk from Magisk manager will modify bootanim.rc,
# So it is necessary to backup the original bootanim.rc.
@@ -94,16 +112,36 @@ on property:init.svc.zygote=stopped
def extra1(self):
if container.use_overlayfs():
sys_overlay_rw = "/var/lib/waydroid/overlay_rw"
old_bootanim_rc = os.path.join(sys_overlay_rw, "system","system", "etc", "init", "bootanim.rc")
old_bootanim_rc_gz = os.path.join(sys_overlay_rw, "system","system", "etc", "init", "bootanim.rc.gz")
old_magisk = os.path.join(sys_overlay_rw, "system","system", "etc", "init", "magisk")
files = [
"system/system/etc/init/bootanim.rc",
"system/system/etc/init/bootanim.rc.gz",
"system/system/etc/init/magisk",
"system/system/addon.d/99-magisk.sh",
"vendor/etc/selinux/precompiled_sepolicy"
]
if os.path.exists(old_bootanim_rc):
os.remove(old_bootanim_rc)
if os.path.exists(old_bootanim_rc_gz):
os.remove(old_bootanim_rc_gz)
if os.path.exists(old_magisk):
if os.path.isdir(old_magisk):
shutil.rmtree(old_magisk)
else:
os.remove(old_magisk)
for f in files:
file = os.path.join(sys_overlay_rw, f)
if os.path.isdir(file):
shutil.rmtree(file)
elif os.path.isfile(file) or os.path.exists(file):
os.remove(file)
def extra3(self):
self.extra1()
data_dir = get_data_dir()
files = [
os.path.join(data_dir, "adb/magisk.db"),
os.path.join(data_dir, "adb/magisk")
]
for file in files:
if os.path.isdir(file):
shutil.rmtree(file)
elif os.path.isfile(file):
os.remove(file)
bootanim_path = os.path.join(self.copy_dir, self.partition, "etc", "init", "bootanim.rc")
if container.use_overlayfs():
os.remove(bootanim_path)
else:
with open(bootanim_path, "w") as initfile:
initfile.write(self.oringinal_bootanim)