Reformat and clean up code, fix typos
This commit is contained in:
@@ -146,7 +146,7 @@ This is a temporary hack to combat against the apps permission issue on Android
|
|||||||
always enable a property (persist.sys.nodataperm) to make it execute a script to grant the data full permissions (777).
|
always enable a property (persist.sys.nodataperm) to make it execute a script to grant the data full permissions (777).
|
||||||
The **correct** way is to use `sdcardfs` or `esdfs`, both need to recompile the kernel or WayDroid image.
|
The **correct** way is to use `sdcardfs` or `esdfs`, both need to recompile the kernel or WayDroid image.
|
||||||
|
|
||||||
Arknights, PUNISHING: GRAY RAVEN and other games won't freeze on the black screen.
|
Arknights, PUNISHING: GRAY RAVEN, and other games won't freeze on the black screen.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from InquirerPy import inquirer
|
|
||||||
from InquirerPy.base.control import Choice
|
|
||||||
from InquirerPy.separator import Separator
|
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from InquirerPy import inquirer
|
||||||
|
from InquirerPy.base.control import Choice
|
||||||
|
|
||||||
|
import tools.helper as helper
|
||||||
from stuff.android_id import AndroidId
|
from stuff.android_id import AndroidId
|
||||||
|
from stuff.fdroidpriv import FDroidPriv
|
||||||
from stuff.gapps import Gapps
|
from stuff.gapps import Gapps
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from stuff.hidestatusbar import HideStatusBar
|
from stuff.hidestatusbar import HideStatusBar
|
||||||
@@ -17,13 +20,8 @@ from stuff.ndk import Ndk
|
|||||||
from stuff.nodataperm import Nodataperm
|
from stuff.nodataperm import Nodataperm
|
||||||
from stuff.smartdock import Smartdock
|
from stuff.smartdock import Smartdock
|
||||||
from stuff.widevine import Widevine
|
from stuff.widevine import Widevine
|
||||||
from stuff.fdroidpriv import FDroidPriv
|
|
||||||
import tools.helper as helper
|
|
||||||
from tools import container
|
from tools import container
|
||||||
from tools import images
|
from tools import images
|
||||||
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
@@ -32,7 +30,7 @@ def get_certified(args):
|
|||||||
|
|
||||||
|
|
||||||
def mount(partition, copy_dir):
|
def mount(partition, copy_dir):
|
||||||
img = os.path.join(images.get_image_dir(), partition+".img")
|
img = os.path.join(images.get_image_dir(), partition + ".img")
|
||||||
mount_point = ""
|
mount_point = ""
|
||||||
if partition == "system":
|
if partition == "system":
|
||||||
mount_point = os.path.join(copy_dir)
|
mount_point = os.path.join(copy_dir)
|
||||||
@@ -43,9 +41,9 @@ def mount(partition, copy_dir):
|
|||||||
|
|
||||||
|
|
||||||
def resize(partition):
|
def resize(partition):
|
||||||
img = os.path.join(images.get_image_dir(), partition+".img")
|
img = os.path.join(images.get_image_dir(), partition + ".img")
|
||||||
img_size = int(os.path.getsize(img)/(1024*1024))
|
img_size = int(os.path.getsize(img) / (1024 * 1024))
|
||||||
new_size = "{}M".format(img_size+500)
|
new_size = "{}M".format(img_size + 500)
|
||||||
Logger.info("Resizing {} to {}".format(img, new_size))
|
Logger.info("Resizing {} to {}".format(img, new_size))
|
||||||
images.resize(img, new_size)
|
images.resize(img, new_size)
|
||||||
|
|
||||||
@@ -229,9 +227,9 @@ def interact():
|
|||||||
if not action:
|
if not action:
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
install_choices = ["gapps", "microg", "libndk", "magisk", "smartdock", "fdroidpriv",]
|
install_choices = ["gapps", "microg", "libndk", "magisk", "smartdock", "fdroidpriv", ]
|
||||||
hack_choices = []
|
hack_choices = []
|
||||||
if android_version=="11":
|
if android_version == "11":
|
||||||
install_choices.extend(["libhoudini", "widevine"])
|
install_choices.extend(["libhoudini", "widevine"])
|
||||||
hack_choices.extend(["nodataperm", "hidestatusbar"])
|
hack_choices.extend(["nodataperm", "hidestatusbar"])
|
||||||
|
|
||||||
@@ -263,7 +261,7 @@ def interact():
|
|||||||
choices=[*install_choices, *hack_choices]
|
choices=[*install_choices, *hack_choices]
|
||||||
).execute()
|
).execute()
|
||||||
args.app = apps
|
args.app = apps
|
||||||
args.microg_variant="Standard"
|
args.microg_variant = "Standard"
|
||||||
remove_app(args)
|
remove_app(args)
|
||||||
elif action == "Hack":
|
elif action == "Hack":
|
||||||
apps = inquirer.checkbox(
|
apps = inquirer.checkbox(
|
||||||
@@ -280,9 +278,8 @@ def interact():
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description='''
|
parser = argparse.ArgumentParser(description='''Does stuff like installing Aapps, installing Magisk, installing
|
||||||
Does stuff like installing Gapps, installing Magisk, installing NDK Translation and getting Android ID for device registration.
|
NDK Translation, and getting Android ID for device registration. Use -h flag for help!''')
|
||||||
Use -h flag for help!''')
|
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(title="coomand", dest='command')
|
subparsers = parser.add_subparsers(title="coomand", dest='command')
|
||||||
parser.add_argument('-a', '--android-version',
|
parser.add_argument('-a', '--android-version',
|
||||||
@@ -311,10 +308,10 @@ def main():
|
|||||||
|
|
||||||
install_help = """
|
install_help = """
|
||||||
gapps: Install Open GApps (Android 11) or MindTheGapps (Android 13)
|
gapps: Install Open GApps (Android 11) or MindTheGapps (Android 13)
|
||||||
microg: Add microG, Aurora Store and Aurora Droid to WayDriod
|
microg: Add microG, Aurora Store, and Aurora Droid to WayDroid
|
||||||
libndk: Add libndk arm translation, better for AMD CPUs
|
libndk: Add libndk ARM translation, better for AMD CPUs
|
||||||
libhoudini: Add libhoudini arm translation, better for Intel CPUs
|
libhoudini: Add libhoudini ARM translation, better for Intel CPUs
|
||||||
magisk: Install Magisk Delta to WayDroid
|
magisk: Install Magisk Delta to Waydroid
|
||||||
mitm -c CA_CERT_FILE: Install root CA cert into system trust store
|
mitm -c CA_CERT_FILE: Install root CA cert into system trust store
|
||||||
smartdock: A desktop mode launcher for Android
|
smartdock: A desktop mode launcher for Android
|
||||||
widevine: Add support for widevine DRM L3
|
widevine: Add support for widevine DRM L3
|
||||||
@@ -334,7 +331,7 @@ widevine: Add support for widevine DRM L3
|
|||||||
remove_parser = subparsers.add_parser(
|
remove_parser = subparsers.add_parser(
|
||||||
'remove', aliases=["uninstall"], help='Remove an app')
|
'remove', aliases=["uninstall"], help='Remove an app')
|
||||||
remove_parser.add_argument(
|
remove_parser.add_argument(
|
||||||
**arg_template, choices=[*remove_choices, * hack_choices], help='Name of app to remove')
|
**arg_template, choices=[*remove_choices, *hack_choices], help='Name of app to remove')
|
||||||
remove_parser.set_defaults(func=remove_app)
|
remove_parser.set_defaults(func=remove_app)
|
||||||
|
|
||||||
# hack and its aliases
|
# hack and its aliases
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ from tools.logger import Logger
|
|||||||
|
|
||||||
|
|
||||||
class AndroidId:
|
class AndroidId:
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
if container.is_running():
|
if container.is_running():
|
||||||
try:
|
try:
|
||||||
queryout = shell(
|
queryout = shell(
|
||||||
|
|||||||
+5
-4
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
|
|
||||||
|
|
||||||
@@ -20,10 +21,11 @@ class FDroidPriv(General):
|
|||||||
"priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk"
|
"priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk"
|
||||||
]
|
]
|
||||||
file_map = {
|
file_map = {
|
||||||
"permissions_org.fdroid.fdroid.privileged.xml": "etc/permissions/permissions_org.fdroid.fdroid.privileged.xml",
|
"permissions_org.fdroid.fdroid.privileged.xml": "etc/permissions/permissions_org.fdroid.fdroid.privileged.xml",
|
||||||
"F-Droid.apk": "app/F-Droid/F-Droid.apk",
|
"F-Droid.apk": "app/F-Droid/F-Droid.apk",
|
||||||
"F-DroidPrivilegedExtension.apk": "priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk",
|
"F-DroidPrivilegedExtension.apk": "priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk",
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, android_version="11") -> None:
|
def __init__(self, android_version="11") -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.dl_link = self.dl_links[android_version][0]
|
self.dl_link = self.dl_links[android_version][0]
|
||||||
@@ -37,4 +39,3 @@ class FDroidPriv(General):
|
|||||||
if not os.path.exists(rro_dir):
|
if not os.path.exists(rro_dir):
|
||||||
os.makedirs(rro_dir)
|
os.makedirs(rro_dir)
|
||||||
shutil.copyfile(os.path.join(self.extract_to, f), rro_file)
|
shutil.copyfile(os.path.join(self.extract_to, f), rro_file)
|
||||||
|
|
||||||
|
|||||||
+33
-13
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.helper import run
|
from tools.helper import run
|
||||||
|
|
||||||
@@ -9,16 +10,32 @@ class Gapps(General):
|
|||||||
partition = "system"
|
partition = "system"
|
||||||
dl_links = {
|
dl_links = {
|
||||||
"11": {
|
"11": {
|
||||||
"x86_64": ["https://sourceforge.net/projects/opengapps/files/x86_64/20220503/open_gapps-x86_64-11.0-pico-20220503.zip", "5a6d242be34ad1acf92899c7732afa1b"],
|
"x86_64": [
|
||||||
"x86": ["https://sourceforge.net/projects/opengapps/files/x86/20220503/open_gapps-x86-11.0-pico-20220503.zip", "efda4943076016d00b40e0874b12ddd3"],
|
"https://sourceforge.net/projects/opengapps/files/x86_64/20220503/open_gapps-x86_64-11.0-pico-20220503.zip",
|
||||||
"arm64-v8a": ["https://sourceforge.net/projects/opengapps/files/arm64/20220503/open_gapps-arm64-11.0-pico-20220503.zip", "7790055d34bbfc6fe610b0cd263a7add"],
|
"5a6d242be34ad1acf92899c7732afa1b"],
|
||||||
"armeabi-v7a": ["https://sourceforge.net/projects/opengapps/files/arm/20220215/open_gapps-arm-11.0-pico-20220215.zip", "8719519fa32ae83a62621c6056d32814"]
|
"x86": [
|
||||||
|
"https://sourceforge.net/projects/opengapps/files/x86/20220503/open_gapps-x86-11.0-pico-20220503.zip",
|
||||||
|
"efda4943076016d00b40e0874b12ddd3"],
|
||||||
|
"arm64-v8a": [
|
||||||
|
"https://sourceforge.net/projects/opengapps/files/arm64/20220503/open_gapps-arm64-11.0-pico-20220503.zip",
|
||||||
|
"7790055d34bbfc6fe610b0cd263a7add"],
|
||||||
|
"armeabi-v7a": [
|
||||||
|
"https://sourceforge.net/projects/opengapps/files/arm/20220215/open_gapps-arm-11.0-pico-20220215.zip",
|
||||||
|
"8719519fa32ae83a62621c6056d32814"]
|
||||||
},
|
},
|
||||||
"13": {
|
"13": {
|
||||||
"x86_64": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86_64-20231028.zip", "63ccebbf93d45c384f58d7c40049d398"],
|
"x86_64": [
|
||||||
"x86": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86-20231028.zip", "f12b6a8ed14eedbb4b5b3c932a865956"],
|
"https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86_64-20231028.zip",
|
||||||
"arm64-v8a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm64-20231028.zip", "11180da0a5d9f2ed2863882c30a8d556"],
|
"63ccebbf93d45c384f58d7c40049d398"],
|
||||||
"armeabi-v7a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm-20231028.zip", "d525c980bac427844aa4cb01628f8a8f"]
|
"x86": [
|
||||||
|
"https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86-20231028.zip",
|
||||||
|
"f12b6a8ed14eedbb4b5b3c932a865956"],
|
||||||
|
"arm64-v8a": [
|
||||||
|
"https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm64-20231028.zip",
|
||||||
|
"11180da0a5d9f2ed2863882c30a8d556"],
|
||||||
|
"armeabi-v7a": [
|
||||||
|
"https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm-20231028.zip",
|
||||||
|
"d525c980bac427844aa4cb01628f8a8f"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
android_version = ...
|
android_version = ...
|
||||||
@@ -124,7 +141,8 @@ class Gapps(General):
|
|||||||
print(" Processing app package : " +
|
print(" Processing app package : " +
|
||||||
os.path.join(self.extract_to, "Core", lz_file))
|
os.path.join(self.extract_to, "Core", lz_file))
|
||||||
run(["tar", "--lzip", "-xvf", os.path.join(self.extract_to, "Core",
|
run(["tar", "--lzip", "-xvf", os.path.join(self.extract_to, "Core",
|
||||||
lz_file), "-C", os.path.join(self.extract_to, "appunpack")])
|
lz_file), "-C",
|
||||||
|
os.path.join(self.extract_to, "appunpack")])
|
||||||
app_name = os.listdir(os.path.join(
|
app_name = os.listdir(os.path.join(
|
||||||
self.extract_to, "appunpack"))[0]
|
self.extract_to, "appunpack"))[0]
|
||||||
xx_dpi = os.listdir(os.path.join(
|
xx_dpi = os.listdir(os.path.join(
|
||||||
@@ -145,14 +163,16 @@ class Gapps(General):
|
|||||||
print(" Processing extra package : " +
|
print(" Processing extra package : " +
|
||||||
os.path.join(self.extract_to, "Core", lz_file))
|
os.path.join(self.extract_to, "Core", lz_file))
|
||||||
run(["tar", "--lzip", "-xvf", os.path.join(self.extract_to, "Core",
|
run(["tar", "--lzip", "-xvf", os.path.join(self.extract_to, "Core",
|
||||||
lz_file), "-C", os.path.join(self.extract_to, "appunpack")])
|
lz_file), "-C",
|
||||||
|
os.path.join(self.extract_to, "appunpack")])
|
||||||
app_name = os.listdir(os.path.join(
|
app_name = os.listdir(os.path.join(
|
||||||
self.extract_to, "appunpack"))[0]
|
self.extract_to, "appunpack"))[0]
|
||||||
common_content_dirs = os.listdir(os.path.join(
|
common_content_dirs = os.listdir(os.path.join(
|
||||||
self.extract_to, "appunpack", app_name, "common"))
|
self.extract_to, "appunpack", app_name, "common"))
|
||||||
for ccdir in common_content_dirs:
|
for ccdir in common_content_dirs:
|
||||||
shutil.copytree(os.path.join(self.extract_to, "appunpack", app_name, "common", ccdir), os.path.join(
|
shutil.copytree(os.path.join(self.extract_to, "appunpack", app_name, "common", ccdir),
|
||||||
self.copy_dir, self.partition, ccdir), dirs_exist_ok=True)
|
os.path.join(
|
||||||
|
self.copy_dir, self.partition, ccdir), dirs_exist_ok=True)
|
||||||
|
|
||||||
def copy_13(self):
|
def copy_13(self):
|
||||||
src_dir = os.path.join(self.extract_to, "system")
|
src_dir = os.path.join(self.extract_to, "system")
|
||||||
@@ -163,7 +183,7 @@ class Gapps(General):
|
|||||||
for file in files:
|
for file in files:
|
||||||
src_file_path = os.path.join(root, file)
|
src_file_path = os.path.join(root, file)
|
||||||
dst_file_path = os.path.join(dst_dir, os.path.relpath(
|
dst_file_path = os.path.join(dst_dir, os.path.relpath(
|
||||||
src_file_path, src_dir))
|
src_file_path, src_dir))
|
||||||
if not os.path.exists(os.path.dirname(dst_file_path)):
|
if not os.path.exists(os.path.dirname(dst_file_path)):
|
||||||
os.makedirs(os.path.dirname(dst_file_path))
|
os.makedirs(os.path.dirname(dst_file_path))
|
||||||
# Logger.info(f"{src_file_path} -> {dst_file_path}")
|
# Logger.info(f"{src_file_path} -> {dst_file_path}")
|
||||||
|
|||||||
+4
-3
@@ -1,11 +1,12 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import glob
|
import glob
|
||||||
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import zipfile
|
import zipfile
|
||||||
import hashlib
|
|
||||||
from tools.helper import download_file, get_download_dir, host
|
|
||||||
from tools import container
|
from tools import container
|
||||||
|
from tools.helper import download_file, get_download_dir, host
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ class General:
|
|||||||
if not os.path.exists(bin_dir):
|
if not os.path.exists(bin_dir):
|
||||||
os.makedirs(bin_dir)
|
os.makedirs(bin_dir)
|
||||||
shutil.copy(os.path.join(os.path.join(os.path.dirname(__file__), "..", "bin",
|
shutil.copy(os.path.join(os.path.join(os.path.dirname(__file__), "..", "bin",
|
||||||
self.arch[0], "resetprop")), bin_dir)
|
self.arch[0], "resetprop")), bin_dir)
|
||||||
os.chmod(os.path.join(bin_dir, "resetprop"), 0o755)
|
os.chmod(os.path.join(bin_dir, "resetprop"), 0o755)
|
||||||
if not os.path.isfile(os.path.join(bin_dir, "resetprop.sh")):
|
if not os.path.isfile(os.path.join(bin_dir, "resetprop.sh")):
|
||||||
with open(os.path.join(bin_dir, "resetprop.sh"), "w") as f:
|
with open(os.path.join(bin_dir, "resetprop.sh"), "w") as f:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
|
|
||||||
|
|
||||||
@@ -12,8 +13,9 @@ class HideStatusBar(General):
|
|||||||
dl_link = ...
|
dl_link = ...
|
||||||
act_md5 = ...
|
act_md5 = ...
|
||||||
files = [
|
files = [
|
||||||
"product/overlay/"+dl_file_name
|
"product/overlay/" + dl_file_name
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, android_version="11") -> None:
|
def __init__(self, android_version="11") -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.dl_link = self.dl_links[android_version][0]
|
self.dl_link = self.dl_links[android_version][0]
|
||||||
|
|||||||
+5
-2
@@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
@@ -9,7 +10,9 @@ class Houdini(General):
|
|||||||
id = "libhoudini"
|
id = "libhoudini"
|
||||||
partition = "system"
|
partition = "system"
|
||||||
dl_links = {
|
dl_links = {
|
||||||
"11": ["https://github.com/supremegamers/vendor_intel_proprietary_houdini/archive/81f2a51ef539a35aead396ab7fce2adf89f46e88.zip", "fbff756612b4144797fbc99eadcb6653"],
|
"11": [
|
||||||
|
"https://github.com/supremegamers/vendor_intel_proprietary_houdini/archive/81f2a51ef539a35aead396ab7fce2adf89f46e88.zip",
|
||||||
|
"fbff756612b4144797fbc99eadcb6653"],
|
||||||
# "13": ["https://github.com/supremegamers/vendor_intel_proprietary_houdini/archive/978d8cba061a08837b7e520cd03b635af643ba08.zip", "1e139054c05034648fae58a1810573b4"]
|
# "13": ["https://github.com/supremegamers/vendor_intel_proprietary_houdini/archive/978d8cba061a08837b7e520cd03b635af643ba08.zip", "1e139054c05034648fae58a1810573b4"]
|
||||||
}
|
}
|
||||||
act_md5 = ...
|
act_md5 = ...
|
||||||
@@ -57,7 +60,7 @@ on property:ro.enable.native.bridge.exec=1
|
|||||||
Logger.info("Copying libhoudini library files ...")
|
Logger.info("Copying libhoudini library files ...")
|
||||||
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
||||||
shutil.copytree(os.path.join(self.extract_to, "vendor_intel_proprietary_houdini-" + name,
|
shutil.copytree(os.path.join(self.extract_to, "vendor_intel_proprietary_houdini-" + name,
|
||||||
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
||||||
init_path = os.path.join(
|
init_path = os.path.join(
|
||||||
self.copy_dir, self.partition, "etc", "init", "houdini.rc")
|
self.copy_dir, self.partition, "etc", "init", "houdini.rc")
|
||||||
if not os.path.isfile(init_path):
|
if not os.path.isfile(init_path):
|
||||||
|
|||||||
+16
-13
@@ -1,11 +1,13 @@
|
|||||||
import gzip
|
import gzip
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.helper import download_file, get_data_dir, host
|
|
||||||
from tools.logger import Logger
|
|
||||||
from tools import container
|
from tools import container
|
||||||
|
from tools.helper import download_file, get_data_dir
|
||||||
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
class Magisk(General):
|
class Magisk(General):
|
||||||
id = "magisk delta"
|
id = "magisk delta"
|
||||||
@@ -75,16 +77,17 @@ on property:init.svc.zygote=stopped
|
|||||||
os.makedirs(os.path.join(self.copy_dir, "sbin"), exist_ok=True)
|
os.makedirs(os.path.join(self.copy_dir, "sbin"), exist_ok=True)
|
||||||
|
|
||||||
Logger.info("Copying magisk libs now ...")
|
Logger.info("Copying magisk libs now ...")
|
||||||
|
|
||||||
lib_dir = os.path.join(self.extract_to, "lib", self.arch[0])
|
lib_dir = os.path.join(self.extract_to, "lib", self.arch[0])
|
||||||
for parent, dirnames, filenames in os.walk(lib_dir):
|
for parent, dirnames, filenames in os.walk(lib_dir):
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
o_path = os.path.join(lib_dir, filename)
|
o_path = os.path.join(lib_dir, filename)
|
||||||
filename = re.search('lib(.*)\.so', filename)
|
filename = re.search('lib(.*)\.so', filename)
|
||||||
n_path = os.path.join(magisk_absolute_dir, filename.group(1))
|
n_path = os.path.join(magisk_absolute_dir, filename.group(1))
|
||||||
shutil.copyfile(o_path, n_path)
|
shutil.copyfile(o_path, n_path)
|
||||||
shutil.copyfile(self.download_loc, os.path.join(magisk_absolute_dir,"magisk.apk") )
|
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)
|
shutil.copytree(os.path.join(self.extract_to, "assets", "chromeos"),
|
||||||
|
os.path.join(magisk_absolute_dir, "chromeos"), dirs_exist_ok=True)
|
||||||
assets_files = [
|
assets_files = [
|
||||||
"addon.d.sh",
|
"addon.d.sh",
|
||||||
"boot_patch.sh",
|
"boot_patch.sh",
|
||||||
@@ -97,11 +100,11 @@ on property:init.svc.zygote=stopped
|
|||||||
# Updating Magisk from Magisk manager will modify bootanim.rc,
|
# Updating Magisk from Magisk manager will modify bootanim.rc,
|
||||||
# So it is necessary to backup the original bootanim.rc.
|
# So it is necessary to backup the original bootanim.rc.
|
||||||
bootanim_path = os.path.join(self.copy_dir, self.partition, "etc", "init", "bootanim.rc")
|
bootanim_path = os.path.join(self.copy_dir, self.partition, "etc", "init", "bootanim.rc")
|
||||||
gz_filename = os.path.join(bootanim_path)+".gz"
|
gz_filename = os.path.join(bootanim_path) + ".gz"
|
||||||
with gzip.open(gz_filename,'wb') as f_gz:
|
with gzip.open(gz_filename, 'wb') as f_gz:
|
||||||
f_gz.write(self.oringinal_bootanim.encode('utf-8'))
|
f_gz.write(self.oringinal_bootanim.encode('utf-8'))
|
||||||
with open(bootanim_path, "w") as initfile:
|
with open(bootanim_path, "w") as initfile:
|
||||||
initfile.write(self.oringinal_bootanim+self.bootanim_component)
|
initfile.write(self.oringinal_bootanim + self.bootanim_component)
|
||||||
|
|
||||||
def set_path_perm(self, path):
|
def set_path_perm(self, path):
|
||||||
if "magisk" in path.split("/"):
|
if "magisk" in path.split("/"):
|
||||||
@@ -122,7 +125,7 @@ on property:init.svc.zygote=stopped
|
|||||||
def extra1(self):
|
def extra1(self):
|
||||||
self.delete_upper()
|
self.delete_upper()
|
||||||
self.setup()
|
self.setup()
|
||||||
|
|
||||||
# Delete the contents of upperdir
|
# Delete the contents of upperdir
|
||||||
def delete_upper(self):
|
def delete_upper(self):
|
||||||
if container.use_overlayfs():
|
if container.use_overlayfs():
|
||||||
@@ -130,7 +133,7 @@ on property:init.svc.zygote=stopped
|
|||||||
files = [
|
files = [
|
||||||
"system/system/etc/init/bootanim.rc",
|
"system/system/etc/init/bootanim.rc",
|
||||||
"system/system/etc/init/bootanim.rc.gz",
|
"system/system/etc/init/bootanim.rc.gz",
|
||||||
"system/system/etc/init/magisk",
|
"system/system/etc/init/magisk",
|
||||||
"system/system/addon.d/99-magisk.sh",
|
"system/system/addon.d/99-magisk.sh",
|
||||||
"vendor/etc/selinux/precompiled_sepolicy"
|
"vendor/etc/selinux/precompiled_sepolicy"
|
||||||
]
|
]
|
||||||
@@ -141,7 +144,7 @@ on property:init.svc.zygote=stopped
|
|||||||
shutil.rmtree(file)
|
shutil.rmtree(file)
|
||||||
elif os.path.isfile(file) or os.path.exists(file):
|
elif os.path.isfile(file) or os.path.exists(file):
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
|
|
||||||
def extra2(self):
|
def extra2(self):
|
||||||
self.delete_upper()
|
self.delete_upper()
|
||||||
data_dir = get_data_dir()
|
data_dir = get_data_dir()
|
||||||
|
|||||||
+6
-4
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
@@ -15,7 +16,7 @@ class MicroG(General):
|
|||||||
"org.microg.nlp.backend.ichnaea_20036.apk": "0b3cb65f8458d1a5802737c7392df903",
|
"org.microg.nlp.backend.ichnaea_20036.apk": "0b3cb65f8458d1a5802737c7392df903",
|
||||||
"org.microg.nlp.backend.nominatim_20042.apk": "88e7397cbb9e5c71c8687d3681a23383",
|
"org.microg.nlp.backend.nominatim_20042.apk": "88e7397cbb9e5c71c8687d3681a23383",
|
||||||
}
|
}
|
||||||
microg_apks= {
|
microg_apks = {
|
||||||
"com.google.android.gms-223616054.apk": "a945481ca5d33a03bc0f9418263c3228",
|
"com.google.android.gms-223616054.apk": "a945481ca5d33a03bc0f9418263c3228",
|
||||||
"com.google.android.gsf-8.apk": "b2b4ea3642df6158e14689a4b2a246d4",
|
"com.google.android.gsf-8.apk": "b2b4ea3642df6158e14689a4b2a246d4",
|
||||||
"com.android.vending-22.apk": "6815d191433ffcd8fa65923d5b0b0573",
|
"com.android.vending-22.apk": "6815d191433ffcd8fa65923d5b0b0573",
|
||||||
@@ -107,7 +108,7 @@ service microg_service /system/bin/sh /system/bin/npem
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.dl_link = self.dl_links[variant][0]
|
self.dl_link = self.dl_links[variant][0]
|
||||||
self.act_md5 = self.dl_links[variant][1]
|
self.act_md5 = self.dl_links[variant][1]
|
||||||
self.id = self.id+f"-{variant}"
|
self.id = self.id + f"-{variant}"
|
||||||
self.dl_file_name = f'MinMicroG-{variant}.zip'
|
self.dl_file_name = f'MinMicroG-{variant}.zip'
|
||||||
if android_version == "11":
|
if android_version == "11":
|
||||||
self.sdk = 30
|
self.sdk = 30
|
||||||
@@ -123,7 +124,7 @@ service microg_service /system/bin/sh /system/bin/npem
|
|||||||
else:
|
else:
|
||||||
sub_arch = "x86"
|
sub_arch = "x86"
|
||||||
if 64 == self.arch[1]:
|
if 64 == self.arch[1]:
|
||||||
arch = f"{sub_arch}{'' if sub_arch=='arm' else '_'}64"
|
arch = f"{sub_arch}{'' if sub_arch == 'arm' else '_'}64"
|
||||||
for root, dirs, files in os.walk(src_dir):
|
for root, dirs, files in os.walk(src_dir):
|
||||||
flag = False
|
flag = False
|
||||||
dir_name = os.path.basename(root)
|
dir_name = os.path.basename(root)
|
||||||
@@ -135,7 +136,8 @@ service microg_service /system/bin/sh /system/bin/npem
|
|||||||
sdks.append(i)
|
sdks.append(i)
|
||||||
elif i:
|
elif i:
|
||||||
archs.append(i)
|
archs.append(i)
|
||||||
if len(archs) != 0 and arch not in archs and sub_arch not in archs or len(sdks) != 0 and str(self.sdk) not in sdks:
|
if len(archs) != 0 and arch not in archs and sub_arch not in archs or len(sdks) != 0 and str(
|
||||||
|
self.sdk) not in sdks:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
flag = True
|
flag = True
|
||||||
|
|||||||
+3
-1
@@ -1,14 +1,16 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.helper import run
|
from tools.helper import run
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
class Mitm(General):
|
class Mitm(General):
|
||||||
id = "mitm"
|
id = "mitm"
|
||||||
partition = "system"
|
partition = "system"
|
||||||
|
|
||||||
def __init__(self, ca_cert_file: str=None) -> None:
|
def __init__(self, ca_cert_file: str = None) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.ca_cert_file = ca_cert_file
|
self.ca_cert_file = ca_cert_file
|
||||||
|
|
||||||
|
|||||||
+22
-16
@@ -1,15 +1,21 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
class Ndk(General):
|
class Ndk(General):
|
||||||
id = "libndk"
|
id = "libndk"
|
||||||
partition = "system"
|
partition = "system"
|
||||||
dl_links = {
|
dl_links = {
|
||||||
"11": ["https://github.com/supremegamers/vendor_google_proprietary_ndk_translation-prebuilt/archive/9324a8914b649b885dad6f2bfd14a67e5d1520bf.zip", "c9572672d1045594448068079b34c350"],
|
"11": [
|
||||||
"13": ["https://github.com/supremegamers/vendor_google_proprietary_ndk_translation-prebuilt/archive/a090003c60df53a9eadb2df09bd4fd2fa86ea629.zip", "e6f0d9fc28ebc427b59a3942a9a4ffc0"]
|
"https://github.com/supremegamers/vendor_google_proprietary_ndk_translation-prebuilt/archive/9324a8914b649b885dad6f2bfd14a67e5d1520bf.zip",
|
||||||
|
"c9572672d1045594448068079b34c350"],
|
||||||
|
"13": [
|
||||||
|
"https://github.com/supremegamers/vendor_google_proprietary_ndk_translation-prebuilt/archive/a090003c60df53a9eadb2df09bd4fd2fa86ea629.zip",
|
||||||
|
"e6f0d9fc28ebc427b59a3942a9a4ffc0"]
|
||||||
}
|
}
|
||||||
dl_file_name = "libndktranslation.zip"
|
dl_file_name = "libndktranslation.zip"
|
||||||
extract_to = "/tmp/libndkunpack"
|
extract_to = "/tmp/libndkunpack"
|
||||||
@@ -26,19 +32,19 @@ class Ndk(General):
|
|||||||
"ro.dalvik.vm.isa.arm64": "x86_64"
|
"ro.dalvik.vm.isa.arm64": "x86_64"
|
||||||
}
|
}
|
||||||
files = [
|
files = [
|
||||||
"bin/arm",
|
"bin/arm",
|
||||||
"bin/arm64",
|
"bin/arm64",
|
||||||
"bin/ndk_translation_program_runner_binfmt_misc",
|
"bin/ndk_translation_program_runner_binfmt_misc",
|
||||||
"bin/ndk_translation_program_runner_binfmt_misc_arm64",
|
"bin/ndk_translation_program_runner_binfmt_misc_arm64",
|
||||||
"etc/binfmt_misc",
|
"etc/binfmt_misc",
|
||||||
"etc/ld.config.arm.txt",
|
"etc/ld.config.arm.txt",
|
||||||
"etc/ld.config.arm64.txt",
|
"etc/ld.config.arm64.txt",
|
||||||
"etc/init/ndk_translation.rc",
|
"etc/init/ndk_translation.rc",
|
||||||
"lib/arm",
|
"lib/arm",
|
||||||
"lib64/arm64",
|
"lib64/arm64",
|
||||||
"lib/libndk*",
|
"lib/libndk*",
|
||||||
"lib64/libndk*"
|
"lib64/libndk*"
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, android_version="11") -> None:
|
def __init__(self, android_version="11") -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -49,4 +55,4 @@ class Ndk(General):
|
|||||||
Logger.info("Copying libndk library files ...")
|
Logger.info("Copying libndk library files ...")
|
||||||
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
||||||
shutil.copytree(os.path.join(self.extract_to, "vendor_google_proprietary_ndk_translation-prebuilt-" + name,
|
shutil.copytree(os.path.join(self.extract_to, "vendor_google_proprietary_ndk_translation-prebuilt-" + name,
|
||||||
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
||||||
|
|||||||
+8
-7
@@ -1,22 +1,23 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
|
from tools import container
|
||||||
from tools.helper import backup, restore
|
from tools.helper import backup, restore
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
from tools import container
|
|
||||||
|
|
||||||
|
|
||||||
class Nodataperm(General):
|
class Nodataperm(General):
|
||||||
id = "nodataperm"
|
id = "nodataperm"
|
||||||
dl_links = {
|
dl_links = {
|
||||||
"11":
|
"11":
|
||||||
{
|
{
|
||||||
"x86_64": [
|
"x86_64": [
|
||||||
"https://github.com/ayasa520/hack_full_data_permission/archive/d4beab7780eb792059d33e77d865579c9ee41546.zip",
|
"https://github.com/ayasa520/hack_full_data_permission/archive/d4beab7780eb792059d33e77d865579c9ee41546.zip",
|
||||||
"b0e3908ffcf5df8ea62f4929aa680f1a"
|
"b0e3908ffcf5df8ea62f4929aa680f1a"
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"13": {}
|
"13": {}
|
||||||
}
|
}
|
||||||
dl_file_name = "nodataperm.zip"
|
dl_file_name = "nodataperm.zip"
|
||||||
|
|||||||
+11
-7
@@ -1,14 +1,16 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
|
|
||||||
|
|
||||||
class Smartdock(General):
|
class Smartdock(General):
|
||||||
id = "smartdock"
|
id = "smartdock"
|
||||||
dl_link = "https://f-droid.org/repo/cu.axel.smartdock_1100.apk"
|
dl_link = "https://f-droid.org/repo/cu.axel.smartdock_1100.apk"
|
||||||
partition = "system"
|
partition = "system"
|
||||||
dl_file_name = "smartdock.apk"
|
dl_file_name = "smartdock.apk"
|
||||||
act_md5 = "f4087d34218eac902a5cca98ee03d215"
|
act_md5 = "f4087d34218eac902a5cca98ee03d215"
|
||||||
apply_props = { "qemu.hw.mainkeys" : "1" }
|
apply_props = {"qemu.hw.mainkeys": "1"}
|
||||||
skip_extract = True
|
skip_extract = True
|
||||||
permissions = """<?xml version="1.0" encoding="utf-8"?>
|
permissions = """<?xml version="1.0" encoding="utf-8"?>
|
||||||
<permissions>
|
<permissions>
|
||||||
@@ -34,10 +36,10 @@ class Smartdock(General):
|
|||||||
</permissions>
|
</permissions>
|
||||||
"""
|
"""
|
||||||
files = [
|
files = [
|
||||||
"etc/permissions/permissions_cu.axel.smartdock.xml",
|
"etc/permissions/permissions_cu.axel.smartdock.xml",
|
||||||
"priv-app/SmartDock",
|
"priv-app/SmartDock",
|
||||||
"etc/init/smartdock.rc"
|
"etc/init/smartdock.rc"
|
||||||
]
|
]
|
||||||
rc_content = '''
|
rc_content = '''
|
||||||
on property:sys.boot_completed=1
|
on property:sys.boot_completed=1
|
||||||
start set_home_activity
|
start set_home_activity
|
||||||
@@ -55,8 +57,10 @@ service set_home_activity /system/bin/sh -c "cmd package set-home-activity cu.ax
|
|||||||
os.makedirs(os.path.join(self.copy_dir, self.partition, "etc", "permissions"))
|
os.makedirs(os.path.join(self.copy_dir, self.partition, "etc", "permissions"))
|
||||||
shutil.copyfile(os.path.join(self.download_loc),
|
shutil.copyfile(os.path.join(self.download_loc),
|
||||||
os.path.join(self.copy_dir, self.partition, "priv-app/SmartDock/smartdock.apk"))
|
os.path.join(self.copy_dir, self.partition, "priv-app/SmartDock/smartdock.apk"))
|
||||||
|
|
||||||
with open(os.path.join(self.copy_dir, self.partition, "etc", "permissions", "permissions_cu.axel.smartdock.xml"), "w") as f:
|
with open(
|
||||||
|
os.path.join(self.copy_dir, self.partition, "etc", "permissions", "permissions_cu.axel.smartdock.xml"),
|
||||||
|
"w") as f:
|
||||||
f.write(self.permissions)
|
f.write(self.permissions)
|
||||||
|
|
||||||
rc_dir = os.path.join(self.copy_dir, self.partition, "etc/init/smartdock.rc")
|
rc_dir = os.path.join(self.copy_dir, self.partition, "etc/init/smartdock.rc")
|
||||||
|
|||||||
+12
-8
@@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from stuff.general import General
|
from stuff.general import General
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
@@ -11,15 +12,18 @@ class Widevine(General):
|
|||||||
dl_links = {
|
dl_links = {
|
||||||
# "x86": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/94c9ee172e3d78fecc81863f50a59e3646f7a2bd.zip", "a31f325453c5d239c21ecab8cfdbd878"],
|
# "x86": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/94c9ee172e3d78fecc81863f50a59e3646f7a2bd.zip", "a31f325453c5d239c21ecab8cfdbd878"],
|
||||||
"x86_64": {
|
"x86_64": {
|
||||||
"11": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/48d1076a570837be6cdce8252d5d143363e37cc1.zip",
|
"11": [
|
||||||
"f587b8859f9071da4bca6cea1b9bed6a"],
|
"https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/48d1076a570837be6cdce8252d5d143363e37cc1.zip",
|
||||||
"13": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a8524d608431573ef1c9313822d271f78728f9a6.zip",
|
"f587b8859f9071da4bca6cea1b9bed6a"],
|
||||||
"5c55df61da5c012b4e43746547ab730f"]
|
"13": [
|
||||||
|
"https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a8524d608431573ef1c9313822d271f78728f9a6.zip",
|
||||||
|
"5c55df61da5c012b4e43746547ab730f"]
|
||||||
},
|
},
|
||||||
# "armeabi-v7a": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a1a19361d36311bee042da8cf4ced798d2c76d98.zip", "fed6898b5cfd2a908cb134df97802554"],
|
# "armeabi-v7a": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a1a19361d36311bee042da8cf4ced798d2c76d98.zip", "fed6898b5cfd2a908cb134df97802554"],
|
||||||
"arm64-v8a": {
|
"arm64-v8a": {
|
||||||
"11": ["https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a1a19361d36311bee042da8cf4ced798d2c76d98.zip",
|
"11": [
|
||||||
"fed6898b5cfd2a908cb134df97802554"]
|
"https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt/archive/a1a19361d36311bee042da8cf4ced798d2c76d98.zip",
|
||||||
|
"fed6898b5cfd2a908cb134df97802554"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dl_file_name = "widevine.zip"
|
dl_file_name = "widevine.zip"
|
||||||
@@ -42,5 +46,5 @@ class Widevine(General):
|
|||||||
def copy(self):
|
def copy(self):
|
||||||
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
|
||||||
Logger.info("Copying widevine library files ...")
|
Logger.info("Copying widevine library files ...")
|
||||||
shutil.copytree(os.path.join(self.extract_to, "vendor_google_proprietary_widevine-prebuilt-"+name,
|
shutil.copytree(os.path.join(self.extract_to, "vendor_google_proprietary_widevine-prebuilt-" + name,
|
||||||
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
"prebuilts"), os.path.join(self.copy_dir, self.partition), dirs_exist_ok=True)
|
||||||
|
|||||||
+7
-4
@@ -1,10 +1,12 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# import dbus
|
# import dbus
|
||||||
from tools.helper import run
|
from tools.helper import run
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
# def DBusContainerService(object_path="/ContainerManager", intf="id.waydro.ContainerManager"):
|
# def DBusContainerService(object_path="/ContainerManager", intf="id.waydro.ContainerManager"):
|
||||||
# return dbus.Interface(dbus.SystemBus().get_object("id.waydro.Container", object_path), intf)
|
# return dbus.Interface(dbus.SystemBus().get_object("id.waydro.Container", object_path), intf)
|
||||||
|
|
||||||
@@ -29,7 +31,7 @@ def use_overlayfs():
|
|||||||
Logger.error("Required entry in config was not found, Cannot continue!")
|
Logger.error("Required entry in config was not found, Cannot continue!")
|
||||||
if "mount_overlays" not in cfg["waydroid"]:
|
if "mount_overlays" not in cfg["waydroid"]:
|
||||||
return False
|
return False
|
||||||
if cfg["waydroid"]["mount_overlays"]=="True":
|
if cfg["waydroid"]["mount_overlays"] == "True":
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -43,11 +45,12 @@ def stop():
|
|||||||
# if session:
|
# if session:
|
||||||
# DBusContainerService().Stop(False)
|
# DBusContainerService().Stop(False)
|
||||||
# else:
|
# else:
|
||||||
run(["waydroid", "container", "stop"])
|
run(["waydroid", "container", "stop"])
|
||||||
|
|
||||||
|
|
||||||
def is_running():
|
def is_running():
|
||||||
return "Session:\tRUNNING" in run(["waydroid", "status"]).stdout.decode()
|
return "Session:\tRUNNING" in run(["waydroid", "status"]).stdout.decode()
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
run(["waydroid", "upgrade", "-o"], ignore=r"\[.*\] Stopping container\n\[.*\] Starting container")
|
run(["waydroid", "upgrade", "-o"], ignore=r"\[.*\] Stopping container\n\[.*\] Starting container")
|
||||||
|
|||||||
+24
-14
@@ -1,23 +1,24 @@
|
|||||||
import gzip
|
import gzip
|
||||||
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import platform
|
import platform
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import requests
|
|
||||||
from tools.logger import Logger
|
|
||||||
from tqdm import tqdm
|
|
||||||
import hashlib
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
def get_download_dir():
|
def get_download_dir():
|
||||||
download_loc = ""
|
download_loc = ""
|
||||||
if os.environ.get("XDG_CACHE_HOME", None) is None:
|
if os.environ.get("XDG_CACHE_HOME", None) is None:
|
||||||
download_loc = os.path.join('/', "home", os.environ.get(
|
download_loc = os.path.join('/', "home", os.environ.get(
|
||||||
"SUDO_USER", os.environ["USER"]), ".cache", "waydroid-script", "downloads"
|
"SUDO_USER", os.environ["USER"]), ".cache", "waydroid-script", "downloads"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
download_loc = os.path.join(
|
download_loc = os.path.join(
|
||||||
os.environ["XDG_CACHE_HOME"], "waydroid-script", "downloads"
|
os.environ["XDG_CACHE_HOME"], "waydroid-script", "downloads"
|
||||||
@@ -26,16 +27,19 @@ def get_download_dir():
|
|||||||
os.makedirs(download_loc)
|
os.makedirs(download_loc)
|
||||||
return download_loc
|
return download_loc
|
||||||
|
|
||||||
|
|
||||||
# not good
|
# not good
|
||||||
def get_data_dir():
|
def get_data_dir():
|
||||||
return os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".local", "share", "waydroid", "data")
|
return os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".local", "share", "waydroid",
|
||||||
|
"data")
|
||||||
|
|
||||||
|
|
||||||
# execute on host
|
# execute on host
|
||||||
def run(args: list, env: Optional[str] = None, ignore: Optional[str] = None):
|
def run(args: list, env: Optional[str] = None, ignore: Optional[str] = None):
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
args=args,
|
args=args,
|
||||||
env=env,
|
env=env,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE
|
stderr=subprocess.PIPE
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -52,6 +56,7 @@ def run(args: list, env: Optional[str] = None, ignore: Optional[str] = None):
|
|||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
# execute on waydroid shell
|
# execute on waydroid shell
|
||||||
def shell(arg: str, env: Optional[str] = None):
|
def shell(arg: str, env: Optional[str] = None):
|
||||||
a = subprocess.Popen(
|
a = subprocess.Popen(
|
||||||
@@ -61,7 +66,8 @@ def shell(arg: str, env: Optional[str] = None):
|
|||||||
stderr=subprocess.PIPE
|
stderr=subprocess.PIPE
|
||||||
)
|
)
|
||||||
subprocess.Popen(
|
subprocess.Popen(
|
||||||
args=["echo", "export BOOTCLASSPATH=/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/core-icu4j.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/framework-atb-backward-compatibility.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.wifi/javalib/framework-wifi.jar:/apex/com.android.tethering/javalib/framework-tethering.jar"],
|
args=["echo",
|
||||||
|
"export BOOTCLASSPATH=/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/core-icu4j.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/framework-atb-backward-compatibility.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.wifi/javalib/framework-wifi.jar:/apex/com.android.tethering/javalib/framework-tethering.jar"],
|
||||||
stdout=a.stdin,
|
stdout=a.stdin,
|
||||||
stdin=subprocess.PIPE
|
stdin=subprocess.PIPE
|
||||||
).communicate()
|
).communicate()
|
||||||
@@ -89,6 +95,7 @@ def shell(arg: str, env: Optional[str] = None):
|
|||||||
)
|
)
|
||||||
return a.stdout.read().decode("utf-8")
|
return a.stdout.read().decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
def download_file(url, f_name):
|
def download_file(url, f_name):
|
||||||
md5 = ""
|
md5 = ""
|
||||||
response = requests.get(url, stream=True)
|
response = requests.get(url, stream=True)
|
||||||
@@ -107,6 +114,7 @@ def download_file(url, f_name):
|
|||||||
raise ValueError("Something went wrong while downloading")
|
raise ValueError("Something went wrong while downloading")
|
||||||
return md5
|
return md5
|
||||||
|
|
||||||
|
|
||||||
def host():
|
def host():
|
||||||
machine = platform.machine()
|
machine = platform.machine()
|
||||||
|
|
||||||
@@ -125,7 +133,7 @@ def host():
|
|||||||
return ("x86", 32)
|
return ("x86", 32)
|
||||||
return mapping[machine]
|
return mapping[machine]
|
||||||
raise ValueError("platform.machine '" + machine + "'"
|
raise ValueError("platform.machine '" + machine + "'"
|
||||||
" architecture is not supported")
|
" architecture is not supported")
|
||||||
|
|
||||||
|
|
||||||
def check_root():
|
def check_root():
|
||||||
@@ -133,14 +141,16 @@ def check_root():
|
|||||||
Logger.error("This script must be run as root. Aborting.")
|
Logger.error("This script must be run as root. Aborting.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def backup(path):
|
def backup(path):
|
||||||
gz_filename = path+".gz"
|
gz_filename = path + ".gz"
|
||||||
with gzip.open(gz_filename, 'wb') as f_gz:
|
with gzip.open(gz_filename, 'wb') as f_gz:
|
||||||
with open(path, "rb") as f:
|
with open(path, "rb") as f:
|
||||||
f_gz.write(f.read())
|
f_gz.write(f.read())
|
||||||
|
|
||||||
|
|
||||||
def restore(path):
|
def restore(path):
|
||||||
gz_filename = path+".gz"
|
gz_filename = path + ".gz"
|
||||||
with gzip.GzipFile(gz_filename) as f_gz:
|
with gzip.GzipFile(gz_filename) as f_gz:
|
||||||
with open(path, "wb") as f:
|
with open(path, "wb") as f:
|
||||||
f.writelines(f_gz)
|
f.writelines(f_gz)
|
||||||
|
|||||||
+6
-2
@@ -1,16 +1,18 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import os
|
import os
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from tools.helper import run
|
from tools.helper import run
|
||||||
from tools.logger import Logger
|
from tools.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
def mount(image, mount_point):
|
def mount(image, mount_point):
|
||||||
umount(mount_point, False)
|
umount(mount_point, False)
|
||||||
if not os.path.exists(mount_point):
|
if not os.path.exists(mount_point):
|
||||||
os.makedirs(mount_point)
|
os.makedirs(mount_point)
|
||||||
run(["mount", "-o", "rw", image, mount_point])
|
run(["mount", "-o", "rw", image, mount_point])
|
||||||
|
|
||||||
|
|
||||||
def umount(mount_point, exists=True):
|
def umount(mount_point, exists=True):
|
||||||
if not os.path.exists(mount_point):
|
if not os.path.exists(mount_point):
|
||||||
if not exists:
|
if not exists:
|
||||||
@@ -23,10 +25,12 @@ def umount(mount_point, exists=True):
|
|||||||
Logger.warning("{} is not a mount point".format(
|
Logger.warning("{} is not a mount point".format(
|
||||||
mount_point))
|
mount_point))
|
||||||
|
|
||||||
|
|
||||||
def resize(img_file, size):
|
def resize(img_file, size):
|
||||||
run(["sudo", "e2fsck", "-y", "-f", img_file], ignore="^e2fsck \d+\.\d+\.\d (.+)\n$")
|
run(["sudo", "e2fsck", "-y", "-f", img_file], ignore="^e2fsck \d+\.\d+\.\d (.+)\n$")
|
||||||
run(["sudo", "resize2fs", img_file, size], ignore="^resize2fs \d+\.\d+\.\d (.+)\n$")
|
run(["sudo", "resize2fs", img_file, size], ignore="^resize2fs \d+\.\d+\.\d (.+)\n$")
|
||||||
|
|
||||||
|
|
||||||
def get_image_dir():
|
def get_image_dir():
|
||||||
# Read waydroid config to get image location
|
# Read waydroid config to get image location
|
||||||
cfg = configparser.ConfigParser()
|
cfg = configparser.ConfigParser()
|
||||||
@@ -36,6 +40,6 @@ def get_image_dir():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
cfg.read(cfg_file)
|
cfg.read(cfg_file)
|
||||||
if "waydroid" not in cfg:
|
if "waydroid" not in cfg:
|
||||||
Logger.error("Required entry in config was not found, Cannot continue!") #magisk
|
Logger.error("Required entry in config was not found, Cannot continue!") # magisk
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
return cfg["waydroid"]["images_path"]
|
return cfg["waydroid"]["images_path"]
|
||||||
|
|||||||
+3
-3
@@ -2,12 +2,12 @@ class Logger:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def error(str):
|
def error(str):
|
||||||
print("\033[31m"+"ERROR: "+str+"\033[0m")
|
print("\033[31m" + "ERROR: " + str + "\033[0m")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def info(str):
|
def info(str):
|
||||||
print("\033[32m"+"INFO: "+"\033[0m"+str)
|
print("\033[32m" + "INFO: " + "\033[0m" + str)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def warning(str):
|
def warning(str):
|
||||||
print("\033[33m"+"WARN: "+str+"\033[0m")
|
print("\033[33m" + "WARN: " + str + "\033[0m")
|
||||||
|
|||||||
Reference in New Issue
Block a user