Compare commits

...
Author SHA1 Message Date
Anton Gilgur 3bbf8d8472 perf: --depth=1 shallow clones for end users
- rather than cloning the entire history of repos, can do a shallow clone with a [depth](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-code--depthcodeemltdepthgtem) of 1
  - this should make it more efficient, particularly when there are many commits or many large commits
  - since the history is unused by regular end users, there is no need to fetch/download it

- could alternatively do a [bare](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-code--barecode) clone to be even more efficient
  - but I thought a shallow clone is a bit less intrusive for now
    - and is reversible, if needed (i.e. a local shallow clone can fetch the rest of the depth)

- also add syntax highlighting to the first code block, matching the second one
2024-12-22 16:54:53 -05:00
Casu Al Snek 1a2d3ad643 Merge pull request #143 from mistrmochov/patch-2
Update to Magisk Delta 26.3
2024-01-20 19:29:28 +05:45
mistrmochov 7cccf2b56d Maintainer of Magisk Delta, just deleted the repo for older Magisk Delta, so I put it on my repo 2024-01-10 19:16:24 +01:00
mistrmochov d31988a829 Update to Magisk Delta 26.3
Your script works fine with last Magisk Delta (before Kitsune Mask update).

Also with modified setup for bootanim
2024-01-09 16:44:57 +01:00
Casu Al Snek b12c06568c Merge pull request #132 from mkg20001/nix
Add nixos derivation
2024-01-09 09:12:53 +05:45
Casu Al Snek e0de64c047 Merge pull request #133 from mkg20001/fdroidpriv
Add fdroidpriv for installing f-droid privleged extension
2024-01-09 09:12:10 +05:45
Casu Al Snek bc3efd48c2 Merge pull request #131 from linyinfeng/fix-houdini
Fix binfmt_misc mounting for libhoudini
2024-01-09 09:11:33 +05:45
Casu Al Snek cd6239737a Downgrade magisk to Magisk_Delta_25210_canary_fdac22ba 2024-01-09 09:09:14 +05:45
Casu Al Snek 97293f3cc1 Merge pull request #140 from s1204IT/main
Update MindTheGapps package
2024-01-03 18:24:03 +05:45
Syuugo 76caf7e1d7 Fix filename 2023-12-22 12:49:35 +09:00
Syuugo 3527282950 Redirect user 2023-12-22 08:39:07 +09:00
Syuugo d2502086ed Update MTG package 2023-12-22 08:37:26 +09:00
Maciej Krüger c5110830f7 Add fdroidpriv for installing f-droid privleged extension 2023-11-20 03:35:08 +01:00
Maciej Krüger d81b72fed7 Add nixos derivation 2023-11-20 03:34:03 +01:00
Lin Yinfeng bd8d53906a Fix binfmt_misc mounting for libhoudini 2023-10-23 20:17:25 +08:00
Casu Al Snek acbb764ac5 Merge pull request #94 from mak448a/patch-1
Various grammar fixes
2023-09-26 19:06:34 +05:45
Casu Al Snek 45602d27c8 Merge pull request #122 from claui/mitm
Install self-signed CA cert into trust store
2023-09-25 19:47:04 +05:45
mak448a 6706f4b9d7 Merge branch 'main' into patch-1 2023-09-24 20:50:18 -05:00
Claudia b1c88db1ce Feature: install self-signed cacert to trust store
For analysis and reverse engineering, it can be helpful to insert a
custom CA certificate into Waydroid’s system-wide trust store.
Users used to be able to do that via Android’s settings but not anymore.

The `install mitm` command accepts a path to a file that contains a
– typically self-signed – CA certificate in PEM format.
It then renames [1] and copies the file into the overlay file system,
placing it into Waydroid’s trust store.

As a usage example, the following command lines enable your host to use
mitmproxy [2] to act as a proxy and to intercept [3] HTTP(S) connections
that come from the Waydroid container:

```sh
$ timeout --preserve-status 2 mitmdump -n                           # creates a CA cert in ~/.mitmproxy
$ sudo venv/bin/python3 main.py install mitm --ca-cert ~/.mitmproxy/mitmproxy-ca-cert.pem
INFO: Creating directory: /system/etc/security/cacerts
INFO: Copying /home/yourname/.mitmproxy/mitmproxy-ca-cert.pem to system trust store
INFO: Target file: /system/etc/security/cacerts/6320a7db.0
INFO: mitm installation finished
$ sudo waydroid shell -- ls -l /system/etc/security/cacerts         # double-check that it worked
[…]
-rw-r--r-- 1 root root 1191 2024-01-01 00:00 6320a7db.0
[…]
$ adb shell settings put global http_proxy ${YOUR_IP_HERE?}:3128    # tell Waydroid to use the proxy
                                                                    #     for all connections
$ mitmproxy -p 3128                                                 # start proxy and display a TUI
                                                                    #     with HTTP(S) connections
                                                                    #     coming from Waydroid
```

[1]: https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/#2-rename-certificate

[2]: https://mitmproxy.org/

[3]: https://docs.mitmproxy.org/stable/mitmproxytutorial-interceptrequests/
2023-09-23 18:34:14 +02:00
Casu Al Snek 688c84fd58 Merge pull request #124 from Benjamin-Loison/main
Add `bash` syntax highlighting to `README.md`
2023-09-23 20:54:44 +05:45
Benjamin Loison 367697d59e Add bash syntax highlighting to README.md 2023-09-17 02:26:48 +02:00
Casu Al Snek 77e222fb16 Merge pull request #118 from ayasa520/main
Fix some issues that prevented scripts from working properly
2023-08-25 14:47:59 +05:45
Rikka 821c7c0bc2 Update prompt 2023-08-24 23:33:10 +08:00
Rikka 854b4b0a6c Use venv to avoid breaking Python installation or OS 2023-08-24 23:33:04 +08:00
Rikka 6d5af57ebc fix: Fix simlink path issue
https://github.com/casualsnek/waydroid_script/issues/101
Relative path fails when using symlink. Replace it with absolute path.
2023-08-24 23:22:20 +08:00
Rikka a80ff8e855 update hidestatusbar link 2023-08-24 23:22:16 +08:00
Rikka 3e51f7f56e update smartdock link 2023-08-24 23:22:05 +08:00
Rikka e1ee7f0b0c Fix capitalization of MicroG and update nodataperm 2023-08-24 23:21:53 +08:00
ayasa520 337d066eeb fix(microg): typos 2023-08-24 23:17:14 +08:00
Casu Al Snek 4db9bb3cba Merge pull request #110 from axolotlek/main
fix cli commands mistakes in readme
2023-08-19 00:13:01 +05:45
Casu Al Snek 489159c5f9 Merge pull request #111 from SUFandom/patch-1
[URGENT] Update nodataperm.py by changing MD5SUM hash to updated state
2023-07-25 23:48:31 +05:45
SUFandom 9c2d8fcd83 [URGENT] Update nodataperm.py
Change the MD5Sum Because trying it spams error because its invalid

Suggestion: Just add the main.zip to the Releases tag and let The script grab the 'stable' version there an just change it alongside with the python script library for update to not add issues
2023-07-25 20:09:05 +08:00
axolotlek 098036cca9 fixed mistakes in readme 2023-07-25 14:46:43 +03:00
axolotlek 212135d3c8 fixed mistakes in readme 2023-07-25 13:59:51 +03:00
mak448a 7b5c7f64c0 Update README.md 2023-06-15 13:53:47 -05:00
mak448a b80dcf171f Update README.md 2023-06-15 13:38:56 -05:00
15 changed files with 245 additions and 84 deletions
+4 -1
View File
@@ -105,4 +105,7 @@ venv.bak/
# mypy # mypy
.mypy_cache/ .mypy_cache/
test.py # nix
result*
test.py
+44 -32
View File
@@ -1,15 +1,17 @@
# Waydroid Extras Script # Waydroid Extras Script
Script to add gapps and other stuff to waydroid !
Script to add GApps and other stuff to Waydroid!
# Installation/Usage # Installation/Usage
## Interactive terminal interface ## Interactive terminal interface
``` ```bash
git clone https://github.com/casualsnek/waydroid_script git clone --depth=1 https://github.com/casualsnek/waydroid_script
cd waydroid_script cd waydroid_script
sudo python3 -m pip install -r python3 -m venv venv
sudo python main.py venv/bin/pip install -r requirements.txt
sudo venv/bin/python3 main.py
``` ```
![image-20230430013103883](assets/img/README/image-20230430013103883.png) ![image-20230430013103883](assets/img/README/image-20230430013103883.png)
@@ -22,17 +24,20 @@ sudo python main.py
## Command Line ## Command Line
git clone https://github.com/casualsnek/waydroid_script ```bash
cd waydroid_script git clone --depth=1 https://github.com/casualsnek/waydroid_script
sudo python3 -m pip install -r requirements.txt cd waydroid_script
# install something python3 -m venv venv
sudo python3 main.py install {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg} venv/bin/pip install -r requirements.txt
# uninstall something # install something
sudo python3 main.py uninstall {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg} sudo venv/bin/python3 main.py install {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg, mitm}
# get Android device ID # uninstall something
sudo python main.py certified sudo venv/bin/python3 main.py uninstall {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg}
# some hacks # get Android device ID
sudo python3 hack {nodataperm, hidestatusbar} sudo venv/bin/python3 main.py certified
# some hacks
sudo venv/bin/python3 main.py hack {nodataperm, hidestatusbar}
```
## Dependencies ## Dependencies
@@ -50,18 +55,19 @@ sudo python main.py
![](assets/1.png) ![](assets/1.png)
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to the directory where "main.py" is located then run:
sudo python3 main.py install gapps sudo venv/bin/python3 main.py install gapps
Then launch waydroid with: Then launch waydroid with:
waydroid show-full-ui waydroid show-full-ui
After waydroid has finished booting open terminal and switch to directory where "main.py" is located then run: After waydroid has finished booting, open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py google sudo python3 main.py google
Copy the returned numeric ID open ["https://google.com/android/uncertified/?pli=1"](https://google.com/android/uncertified/?pli=1) enter the id and register it, you may need to wait upto 10-20 minutes for device to get registered, then clear Google Play Service's cache and try logging in ! Copy the returned numeric ID, then open ["https://google.com/android/uncertified/?pli=1"](https://google.com/android/uncertified/?pli=1). Enter the ID and register it. Wait 10-20 minutes for device to get registered. Then clear Google Play Service's cache and try logging in!
## Install Magisk ## Install Magisk
@@ -69,9 +75,9 @@ Copy the returned numeric ID open ["https://google.com/android/uncertified/?pli=
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py install magisk sudo venv/bin/python3 main.py install magisk
Magisk will be installed on next boot ! Magisk will be installed on next boot!
Zygisk and modules like LSPosed should work now. Zygisk and modules like LSPosed should work now.
@@ -87,7 +93,7 @@ libndk seems to have better performance than libhoudini on AMD.
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py install libndk sudo venv/bin/python3 main.py install libndk
## Install libhoudini arm translation ## Install libhoudini arm translation
@@ -99,7 +105,7 @@ houdini64 version: 11.0.1b_z.38765.m
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py install libhoudini sudo venv/bin/python3 main.py install libhoudini
## Integrate Widevine DRM (L3) ## Integrate Widevine DRM (L3)
@@ -107,7 +113,7 @@ Open terminal and switch to directory where "main.py" is located then run:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py install widevine sudo venv/bin/python3 main.py install widevine
## Install Smart Dock ## Install Smart Dock
@@ -116,7 +122,13 @@ Open terminal and switch to directory where "main.py" is located then run:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py install smartdock sudo venv/bin/python3 main.py install smartdock
## Install a self-signed CA certificate
Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install mitm --ca-cert mycert.pem
## Granting full permission for apps data (HACK) ## Granting full permission for apps data (HACK)
@@ -130,9 +142,9 @@ Arknights, PUNISHING: GRAY RAVEN and other games won't freeze on the black scree
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
``` ```
sudo python3 main.py hack nodataperm sudo venv/bin/python3 main.py hack nodataperm
``` ```
**WARNING**: Tested on `lineage-18.1-20230128-VANILLA-waydroid_x86_64.img`. This script will replace `/system/framework/service.jar`, which may prevent WayDroid from booting. If so, run `sudo python3 main.py uninstall nodataperm` to remove it. **WARNING**: Tested on `lineage-18.1-20230128-VANILLA-waydroid_x86_64.img`. This script will replace `/system/framework/service.jar`, which may prevent WayDroid from booting. If so, run `sudo venv/bin/python3 main.py uninstall nodataperm` to remove it.
Or you can run the following commands directly in `sudo waydroid shell`. In this way, every time a new game is installed, you need to run it again, but it's much less risky. Or you can run the following commands directly in `sudo waydroid shell`. In this way, every time a new game is installed, you need to run it again, but it's much less risky.
@@ -165,18 +177,18 @@ After
![After](assets/9.png) ![After](assets/9.png)
``` ```
sudo python3 main.py hack hidestatusbar sudo venv/bin/python3 main.py hack hidestatusbar
``` ```
## Get Android ID for device registration ## 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: 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:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py google sudo venv/bin/python3 main.py certified
Star this repository if you find this useful, if you encounter problem create a issue on github ! Star this repository if you find this useful, if you encounter problem create an issue on GitHub!
## Error handling ## Error handling
+22
View File
@@ -0,0 +1,22 @@
with (import <nixpkgs> {});
stdenv.mkDerivation {
name = "waydroid_script";
buildInputs = [
(python3.withPackages(ps: with ps; [ tqdm requests inquirerpy ]))
];
src = ./.;
postPatch = ''
patchShebangs main.py
'';
installPhase = ''
mkdir -p $out/libexec
cp -r . $out/libexec/waydroid_script
mkdir -p $out/bin
ln -s $out/libexec/waydroid_script/main.py $out/bin/waydroid_script
'';
}
+20 -5
View File
@@ -12,10 +12,12 @@ from stuff.hidestatusbar import HideStatusBar
from stuff.houdini import Houdini from stuff.houdini import Houdini
from stuff.magisk import Magisk from stuff.magisk import Magisk
from stuff.microg import MicroG from stuff.microg import MicroG
from stuff.mitm import Mitm
from stuff.ndk import Ndk 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 import tools.helper as helper
from tools import container from tools import container
from tools import images from tools import images
@@ -82,7 +84,11 @@ def install_app(args):
if "smartdock" in app: if "smartdock" in app:
install_list.append(Smartdock()) install_list.append(Smartdock())
if "microg" in app: if "microg" in app:
install_list.append(MicroG(args.android_version)) install_list.append(MicroG(args.android_version, args.microg_variant))
if "mitm" in app:
install_list.append(Mitm(args.ca_cert_file))
if "fdroidpriv" in app:
install_list.append(FDroidPriv(args.android_version))
if not container.use_overlayfs(): if not container.use_overlayfs():
copy_dir = "/tmp/waydroid" copy_dir = "/tmp/waydroid"
@@ -130,6 +136,10 @@ def remove_app(args):
remove_list.append(Smartdock()) remove_list.append(Smartdock())
if "microg" in app: if "microg" in app:
remove_list.append(MicroG(args.android_version, args.microg_variant)) remove_list.append(MicroG(args.android_version, args.microg_variant))
if "mitm" in app:
remove_list.append(Mitm())
if "fdroidpriv" in app:
remove_list.append(FDroidPriv(args.android_version))
if "nodataperm" in app: if "nodataperm" in app:
remove_list.append(Nodataperm(args.android_version)) remove_list.append(Nodataperm(args.android_version))
if "hidestatusbar" in app: if "hidestatusbar" in app:
@@ -219,7 +229,7 @@ def interact():
if not action: if not action:
exit() exit()
install_choices = ["gapps", "microg", "libndk", "magisk", "smartdock",] 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"])
@@ -235,7 +245,7 @@ def interact():
).execute() ).execute()
microg_variants = ["Standard", "NoGoolag", microg_variants = ["Standard", "NoGoolag",
"UNLP", "Minimal", "MinimalIAP"] "UNLP", "Minimal", "MinimalIAP"]
if "MicroG" in apps: if "microg" in apps:
microg_variant = inquirer.select( microg_variant = inquirer.select(
message="Select MicroG variant", message="Select MicroG variant",
choices=microg_variants, choices=microg_variants,
@@ -286,8 +296,8 @@ def main():
'certified', help='Get device ID to obtain Play Store certification') 'certified', help='Get device ID to obtain Play Store certification')
certified.set_defaults(func=get_certified) certified.set_defaults(func=get_certified)
install_choices = ["gapps", "microg", "libndk", install_choices = ["gapps", "microg", "libndk", "libhoudini",
"libhoudini", "magisk", "smartdock", "widevine"] "magisk", "mitm", "smartdock", "widevine"]
hack_choices = ["nodataperm", "hidestatusbar"] hack_choices = ["nodataperm", "hidestatusbar"]
micrg_variants = ["Standard", "NoGoolag", "UNLP", "Minimal", "MinimalIAP"] micrg_variants = ["Standard", "NoGoolag", "UNLP", "Minimal", "MinimalIAP"]
remove_choices = install_choices remove_choices = install_choices
@@ -305,6 +315,7 @@ microg: Add microG, Aurora Store and Aurora Droid to WayDriod
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
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
""" """
@@ -313,6 +324,10 @@ widevine: Add support for widevine DRM L3
'install', formatter_class=argparse.RawTextHelpFormatter, help='Install an app') 'install', formatter_class=argparse.RawTextHelpFormatter, help='Install an app')
install_parser.add_argument( install_parser.add_argument(
**arg_template, choices=install_choices, help=install_help) **arg_template, choices=install_choices, help=install_help)
install_parser.add_argument('-c', '--ca-cert',
dest='ca_cert_file',
help='[for mitm only] The CA certificate file (*.pem) to install',
default=None)
install_parser.set_defaults(func=install_app) install_parser.set_defaults(func=install_app)
# remove and its aliases # remove and its aliases
+1 -1
View File
@@ -14,7 +14,7 @@ class AndroidId:
except: except:
return return
else: else:
Logger.error("WayDroid isn't running !") Logger.error("Please make sure Waydroid is running and Gapps has been installed!")
return return
print(queryout.replace("android_id|", "").strip()) print(queryout.replace("android_id|", "").strip())
print(" ^----- Open https://google.com/android/uncertified/?pli=1") print(" ^----- Open https://google.com/android/uncertified/?pli=1")
+40
View File
@@ -0,0 +1,40 @@
import os
import shutil
from stuff.general import General
class FDroidPriv(General):
id = "fdroid priv"
dl_links = {"11": ["https://f-droid.org/repo/org.fdroid.fdroid.privileged.ota_2130.zip",
"6242cab56d197d80c598593a46da62e4"]}
partition = "system"
dl_file_name = "org.fdroid.fdroid.privileged.ota_2130.zip"
dl_link = ...
act_md5 = ...
extract_to = "/tmp/fdroid_ota_2130"
files = [
"app/F-Droid.apk"
"app/F-Droid/F-Droid.apk"
"etc/permissions/permissions_org.fdroid.fdroid.privileged.xml"
"priv-app/F-DroidPrivilegedExtension.apk"
"priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk"
]
file_map = {
"permissions_org.fdroid.fdroid.privileged.xml": "etc/permissions/permissions_org.fdroid.fdroid.privileged.xml",
"F-Droid.apk": "app/F-Droid/F-Droid.apk",
"F-DroidPrivilegedExtension.apk": "priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk",
}
def __init__(self, android_version="11") -> None:
super().__init__()
self.dl_link = self.dl_links[android_version][0]
self.act_md5 = self.dl_links[android_version][1]
def copy(self):
for f, d in self.file_map.items():
rro_file = os.path.join(
self.copy_dir, self.partition, d)
rro_dir = os.path.dirname(rro_file)
if not os.path.exists(rro_dir):
os.makedirs(rro_dir)
shutil.copyfile(os.path.join(self.extract_to, f), rro_file)
+4 -4
View File
@@ -15,10 +15,10 @@ class Gapps(General):
"armeabi-v7a": ["https://sourceforge.net/projects/opengapps/files/arm/20220215/open_gapps-arm-11.0-pico-20220215.zip", "8719519fa32ae83a62621c6056d32814"] "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/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-x86_64-20230323.zip", "aba427be1ddd0963121c87a4eda80299"], "x86_64": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86_64-20231028.zip", "63ccebbf93d45c384f58d7c40049d398"],
"x86": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-x86-20230323.zip", "f02d2f1a3f0a084f13ab4c1b58ad7554"], "x86": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86-20231028.zip", "f12b6a8ed14eedbb4b5b3c932a865956"],
"arm64-v8a": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-arm64-20230323.zip", "18484a5622eeccffcea2b43205655d8a"], "arm64-v8a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm64-20231028.zip", "11180da0a5d9f2ed2863882c30a8d556"],
"armeabi-v7a": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-arm-20230323.zip", "e4c00a7eb1e4dfca0fc6a3e447710264"] "armeabi-v7a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm-20231028.zip", "d525c980bac427844aa4cb01628f8a8f"]
} }
} }
android_version = ... android_version = ...
+2 -2
View File
@@ -73,8 +73,8 @@ class General:
if not os.path.isfile(os.path.join(bin_dir, "resetprop")): if not os.path.isfile(os.path.join(bin_dir, "resetprop")):
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( shutil.copy(os.path.join(os.path.join(os.path.dirname(__file__), "..", "bin",
"./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:
+2 -2
View File
@@ -5,8 +5,8 @@ from stuff.general import General
class HideStatusBar(General): class HideStatusBar(General):
id = "hide status bar" id = "hide status bar"
dl_links = {"11": ["https://github.com/ayasa520/hide-status-bar/releases/download/v0.0.1/app-release.apk", dl_links = {"11": ["https://github.com/ayasa520/hide-status-bar/releases/download/v0.0.2/app-release.apk",
"ae6c4cc567d6f3de77068e54e43818e2"]} "ff2fe63ddfb4b035e6720a1b195b2355"]}
partition = "system" partition = "system"
dl_file_name = "hidestatusbar.apk" dl_file_name = "hidestatusbar.apk"
dl_link = ... dl_link = ...
+1 -1
View File
@@ -18,7 +18,7 @@ class Houdini(General):
extract_to = "/tmp/houdiniunpack" extract_to = "/tmp/houdiniunpack"
init_rc_component = """ init_rc_component = """
on early-init on early-init
mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc mount binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
on property:ro.enable.native.bridge.exec=1 on property:ro.enable.native.bridge.exec=1
exec -- /system/bin/sh -c "echo ':arm_exe:M::\\\\x7f\\\\x45\\\\x4c\\\\x46\\\\x01\\\\x01\\\\x01\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x02\\\\x00\\\\x28::/system/bin/houdini:P' > /proc/sys/fs/binfmt_misc/register" exec -- /system/bin/sh -c "echo ':arm_exe:M::\\\\x7f\\\\x45\\\\x4c\\\\x46\\\\x01\\\\x01\\\\x01\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x02\\\\x00\\\\x28::/system/bin/houdini:P' > /proc/sys/fs/binfmt_misc/register"
+15 -17
View File
@@ -10,7 +10,7 @@ from tools import container
class Magisk(General): class Magisk(General):
id = "magisk delta" id = "magisk delta"
partition = "system" partition = "system"
dl_link = "https://huskydg.github.io/magisk-files/app-debug.apk" dl_link = "https://github.com/mistrmochov/magiskdeltaorig/raw/main/app-release.apk"
dl_file_name = "magisk.apk" dl_file_name = "magisk.apk"
extract_to = "/tmp/magisk_unpack" extract_to = "/tmp/magisk_unpack"
magisk_dir = os.path.join(partition, "etc", "init", "magisk") magisk_dir = os.path.join(partition, "etc", "init", "magisk")
@@ -29,30 +29,28 @@ service bootanim /system/bin/bootanimation
bootanim_component = f""" bootanim_component = f"""
on post-fs-data on post-fs-data
start logd start logd
exec u:r:su:s0 root root -- /system/etc/init/magisk/magisk{host()[1]} --auto-selinux --setup-sbin /system/etc/init/magisk exec u:r:su:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk
exec u:r:su:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk "allow * magisk_file lnk_file *" exec u:r:magisk:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk
mkdir /sbin/.magisk 700 exec u:r:update_engine:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk
mkdir /sbin/.magisk/mirror 700 mkdir /dev/magisk_iqeoVo2mDrO 700
mkdir /sbin/.magisk/block 700 exec u:r:su:s0 root root -- /system/etc/init/magisk/magisk64 --auto-selinux --setup-sbin /system/etc/init/magisk /dev/magisk_iqeoVo2mDrO
copy /system/etc/init/magisk/config /sbin/.magisk/config exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --post-fs-data
rm /dev/.magisk_unblock
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --post-fs-data
wait /dev/.magisk_unblock 40
rm /dev/.magisk_unblock
on zygote-start on nonencrypted
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --service exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --service
on property:vold.decrypt=trigger_restart_framework
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --service
on property:sys.boot_completed=1 on property:sys.boot_completed=1
mkdir /data/adb/magisk 755 mkdir /data/adb/magisk 755
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --boot-complete exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --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 on property:init.svc.zygote=restarting
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --zygote-restart exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --zygote-restart
on property:init.svc.zygote=stopped on property:init.svc.zygote=stopped
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --zygote-restart exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --zygote-restart
""" """
def download(self): def download(self):
+40
View File
@@ -0,0 +1,40 @@
import os
import shutil
from stuff.general import General
from tools.helper import run
from tools.logger import Logger
class Mitm(General):
id = "mitm"
partition = "system"
def __init__(self, ca_cert_file: str=None) -> None:
super().__init__()
self.ca_cert_file = ca_cert_file
def download(self):
pass
def skip_extract(self):
return True
def copy(self):
file_hash = run([
'openssl', 'x509', '-noout', '-subject_hash_old', '-in',
self.ca_cert_file,
]).stdout.decode("ascii").strip()
target_dir = os.path.join(
self.copy_dir, self.partition, "etc", "security", "cacerts")
Logger.info(f"Creating directory: {target_dir}")
os.makedirs(target_dir, exist_ok=True)
target_path = os.path.join(target_dir, f'{file_hash}.0')
Logger.info(f"Copying {self.ca_cert_file} to system trust store")
Logger.info(f"Target file: {target_path}")
shutil.copyfile(self.ca_cert_file, target_path)
os.chmod(target_path, 0o644)
def install(self):
if not self.ca_cert_file:
raise ValueError(
"This command requires the --ca-cert switch and a *.pem file")
super().install()
+35 -17
View File
@@ -1,7 +1,8 @@
import gzip
import os import os
import re
import shutil import shutil
from stuff.general import General from stuff.general import General
from tools.helper import backup, restore
from tools.logger import Logger from tools.logger import Logger
from tools import container from tools import container
@@ -9,9 +10,14 @@ from tools import container
class Nodataperm(General): class Nodataperm(General):
id = "nodataperm" id = "nodataperm"
dl_links = { dl_links = {
"11": ["https://github.com/ayasa520/hack_full_data_permission/archive/refs/heads/main.zip", "11":
"eafd7b0986f3edaebaf1dd89f19d49bf"], {
"13": ["", ""] "x86_64": [
"https://github.com/ayasa520/hack_full_data_permission/archive/d4beab7780eb792059d33e77d865579c9ee41546.zip",
"b0e3908ffcf5df8ea62f4929aa680f1a"
],
},
"13": {}
} }
dl_file_name = "nodataperm.zip" dl_file_name = "nodataperm.zip"
extract_to = "/tmp/nodataperm" extract_to = "/tmp/nodataperm"
@@ -21,25 +27,34 @@ class Nodataperm(General):
files = [ files = [
"etc/nodataperm.sh", "etc/nodataperm.sh",
"etc/init/nodataperm.rc", "etc/init/nodataperm.rc",
"framework/services.jar" "framework/services.jar",
"framework/services.jar.prof",
"framework/services.jar.bprof",
] ]
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] print("ok")
self.act_md5 = self.dl_links[android_version][1] arch = self.arch[0]
self.dl_link = self.dl_links[android_version][arch][0]
self.act_md5 = self.dl_links[android_version][arch][1]
def copy(self): def copy(self):
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
extract_path = os.path.join( extract_path = os.path.join(
self.extract_to, "hack_full_data_permission-main") self.extract_to, f"hack_full_data_permission-{name}")
if not container.use_overlayfs(): if not container.use_overlayfs():
services_jar = os.path.join( services_jar = os.path.join(
self.copy_dir, self.partition, "framework", "services.jar") self.copy_dir, self.partition, "framework", "services.jar")
gz_filename = services_jar+".gz" services_jar_prof = os.path.join(
with gzip.open(gz_filename, 'wb') as f_gz: self.copy_dir, self.partition, "framework", "services.jar.prof")
with open(services_jar, "rb") as f: services_jar_bprof = os.path.join(
f_gz.write(f.read()) self.copy_dir, self.partition, "framework", "services.jar.bprof")
Logger.info("Copying widevine library files ...") backup(services_jar)
backup(services_jar_prof)
backup(services_jar_bprof)
Logger.info(f"Copying {self.id} library files ...")
shutil.copytree(extract_path, os.path.join( shutil.copytree(extract_path, os.path.join(
self.copy_dir, self.partition), dirs_exist_ok=True) self.copy_dir, self.partition), dirs_exist_ok=True)
@@ -47,7 +62,10 @@ class Nodataperm(General):
if not container.use_overlayfs(): if not container.use_overlayfs():
services_jar = os.path.join( services_jar = os.path.join(
self.copy_dir, self.partition, "framework", "services.jar") self.copy_dir, self.partition, "framework", "services.jar")
gz_filename = services_jar+".gz" services_jar_prof = os.path.join(
with gzip.GzipFile(gz_filename) as f_gz: self.copy_dir, self.partition, "framework", "services.jar.prof")
with open(services_jar, "wb") as f: services_jar_bprof = os.path.join(
f.writelines(f_gz) self.copy_dir, self.partition, "framework", "services.jar.bprof")
restore(services_jar)
restore(services_jar_prof)
restore(services_jar_bprof)
+2 -2
View File
@@ -4,10 +4,10 @@ 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_198.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 = "a8ce0bca5e1772796404602e0fa250a4" 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"?>
+13
View File
@@ -1,3 +1,4 @@
import gzip
import os import os
import re import re
import platform import platform
@@ -131,3 +132,15 @@ def check_root():
if os.geteuid() != 0: if os.geteuid() != 0:
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):
gz_filename = path+".gz"
with gzip.open(gz_filename, 'wb') as f_gz:
with open(path, "rb") as f:
f_gz.write(f.read())
def restore(path):
gz_filename = path+".gz"
with gzip.GzipFile(gz_filename) as f_gz:
with open(path, "wb") as f:
f.writelines(f_gz)