From 7d5e85fc3e2bd26fdf4d98edff4afe2205cebea2 Mon Sep 17 00:00:00 2001 From: Nezumi-2711 Date: Tue, 21 Jul 2026 11:01:29 +0700 Subject: [PATCH] sync the author code --- build.sh | 4 +- config.toml | 20 +- ksu_profile/.gitignore | 3 - ksu_profile/jni/ksu_profile.c | 128 ------------ module/action.sh | 23 +++ module/bin/arm/ksu_profile | Bin 3988 -> 3988 bytes module/bin/arm64/ksu_profile | Bin 5712 -> 5712 bytes module/bin/x64/ksu_profile | Bin 5592 -> 5592 bytes module/bin/x86/ksu_profile | Bin 4328 -> 4328 bytes module/customize.sh | 59 +++--- module/service.sh | 53 ++--- module/utils.sh | 74 +++++++ .../META-INF/com/google/android/update-binary | 33 ---- .../com/google/android/updater-script | 1 - revanced-magisk/customize.sh | 185 ------------------ revanced-magisk/service.sh | 49 ----- revanced-magisk/uninstall.sh | 9 - utils.sh | 66 ++++--- 18 files changed, 186 insertions(+), 521 deletions(-) delete mode 100644 ksu_profile/.gitignore delete mode 100644 ksu_profile/jni/ksu_profile.c create mode 100755 module/action.sh create mode 100755 module/utils.sh delete mode 100755 revanced-magisk/META-INF/com/google/android/update-binary delete mode 100755 revanced-magisk/META-INF/com/google/android/updater-script delete mode 100755 revanced-magisk/customize.sh delete mode 100755 revanced-magisk/service.sh delete mode 100755 revanced-magisk/uninstall.sh diff --git a/build.sh b/build.sh index f5d57d1..402a573 100755 --- a/build.sh +++ b/build.sh @@ -81,7 +81,7 @@ for table_name in $(toml_get_table_names); do epr "Could not get prebuilts" continue fi - read -r cli_jar patches_jar <<<"$PREBUILTS" + read -r patches_jar cli_jar <<<"$PREBUILTS" app_args[cli]=$cli_jar app_args[ptjar]=$patches_jar app_args[rv_brand]=$(toml_get "$t" rv-brand) || app_args[rv_brand]=$DEF_RV_BRAND @@ -155,7 +155,7 @@ for table_name in $(toml_get_table_names); do fi done wait -rm -rf temp/tmp.* +_clean_tmp if [ -z "$(ls -A1 "${BUILD_DIR}")" ]; then abort "All builds failed."; fi log "\nInstall [Microg](https://github.com/ReVanced/GmsCore/releases) for non-root YouTube and YT Music APKs" diff --git a/config.toml b/config.toml index caef7a9..889b480 100755 --- a/config.toml +++ b/config.toml @@ -8,6 +8,7 @@ parallel-jobs = 1 [YouTube] build-mode = "both" +excluded-patches = "'Custom branding'" apkmirror-dlurl = "https://www.apkmirror.com/apk/google-inc/youtube" uptodown-dlurl = "https://youtube.en.uptodown.com/android" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.youtube" @@ -18,6 +19,7 @@ patches-source = "MorpheApp/morphe-patches" cli-source = "MorpheApp/morphe-cli" rv-brand = "Morphe" build-mode = "both" +excluded-patches = "'Custom branding'" apkmirror-dlurl = "https://www.apkmirror.com/apk/google-inc/youtube" uptodown-dlurl = "https://youtube.en.uptodown.com/android" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.youtube" @@ -25,6 +27,7 @@ archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.y [Music] build-mode = "both" arch = "both" +excluded-patches = "'Custom branding'" apkmirror-dlurl = "https://www.apkmirror.com/apk/google-inc/youtube-music" uptodown-dlurl = "https://youtube-music.en.uptodown.com/android" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.apps.youtube.music" @@ -36,6 +39,7 @@ cli-source = "MorpheApp/morphe-cli" rv-brand = "Morphe" build-mode = "both" arch = "both" +excluded-patches = "'Custom branding'" apkmirror-dlurl = "https://www.apkmirror.com/apk/google-inc/youtube-music" uptodown-dlurl = "https://youtube-music.en.uptodown.com/android" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.apps.youtube.music" @@ -43,15 +47,17 @@ archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.a [Reddit-Morphe] app-name = "Reddit" rv-brand = "Morphe" -build-mode = "both" +build-mode = "apk" patches-source = "MorpheApp/morphe-patches" cli-source = "MorpheApp/morphe-cli" apkmirror-dlurl = "https://www.apkmirror.com/apk/redditinc/reddit/" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.reddit.frontpage" uptodown-dlurl = "https://reddit-official-app.en.uptodown.com/android" +excluded-patches = "'Custom branding name for Reddit'" dpi = "120-640dpi" [Twitter] +enabled = false patches-source = "crimera/piko" cli-source = "MorpheApp/morphe-cli" rv-brand = "Piko" @@ -62,24 +68,12 @@ version = "11.81.0-release.0" include-stock = "split" [GooglePhotos] -patches-source = "RookieEnough/De-Vanced" -cli-source = "MorpheApp/morphe-cli" -rv-brand = "De-Vanced" build-mode = "both" arch = "both" apkmirror-dlurl = "https://www.apkmirror.com/apk/google-inc/photos/" uptodown-dlurl = "https://google-photos.en.uptodown.com/android" archive-dlurl = "https://archive.org/download/jhc-apks/apks/com.google.android.apps.photos" -[Instagram] -patches-source = "RookieEnough/De-Vanced" -cli-source = "MorpheApp/morphe-cli" -rv-brand = "De-Vanced" -build-mode = "both" -arch = "both" -apkmirror-dlurl = "https://www.apkmirror.com/apk/instagram/instagram-instagram/" -uptodown-dlurl = "https://instagram.en.uptodown.com/android" - [Twitch] enabled = false apkmirror-dlurl = "https://www.apkmirror.com/apk/twitch-interactive-inc/twitch/" diff --git a/ksu_profile/.gitignore b/ksu_profile/.gitignore deleted file mode 100644 index b3444dd..0000000 --- a/ksu_profile/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -libs -obj -*.mk diff --git a/ksu_profile/jni/ksu_profile.c b/ksu_profile/jni/ksu_profile.c deleted file mode 100644 index 9f52764..0000000 --- a/ksu_profile/jni/ksu_profile.c +++ /dev/null @@ -1,128 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define KSU_INSTALL_MAGIC1 0xDEADBEEF -#define KSU_INSTALL_MAGIC2 0xCAFEBABE - -#define KSU_APP_PROFILE_VER 2 -#define KSU_MAX_PACKAGE_NAME 256 -#define KSU_MAX_GROUPS 32 -#define KSU_SELINUX_DOMAIN 64 - -#define KSU_IOCTL_MAGIC 'K' -#define KSU_IOCTL_UID_SHOULD_UMOUNT _IOC(_IOC_READ | _IOC_WRITE, KSU_IOCTL_MAGIC, 9, 0) -#define KSU_IOCTL_GET_MANAGER_APPID _IOC(_IOC_READ, KSU_IOCTL_MAGIC, 10, 0) -#define KSU_IOCTL_GET_APP_PROFILE _IOC(_IOC_READ | _IOC_WRITE, KSU_IOCTL_MAGIC, 11, 0) -#define KSU_IOCTL_SET_APP_PROFILE _IOC(_IOC_WRITE, KSU_IOCTL_MAGIC, 12, 0) - -struct root_profile { - int32_t uid; - int32_t gid; - int32_t groups_count; - int32_t groups[KSU_MAX_GROUPS]; - - struct { - uint64_t effective; - uint64_t permitted; - uint64_t inheritable; - } capabilities; - - char selinux_domain[KSU_SELINUX_DOMAIN]; - int32_t namespaces; -}; - -struct non_root_profile { - bool umount_modules; -}; - -struct app_profile { - uint32_t version; - char key[KSU_MAX_PACKAGE_NAME]; - int32_t current_uid; - bool allow_su; - union { - struct { - bool use_default; - char template_name[KSU_MAX_PACKAGE_NAME]; - struct root_profile profile; - } rp_config; - struct { - bool use_default; - struct non_root_profile profile; - } nrp_config; - }; -}; - -struct ksu_uid_should_umount_cmd { - uint32_t uid; - uint8_t should_umount; -}; - -struct ksu_get_manager_appid_cmd { - uint32_t appid; -}; - -static int _fd = -1; -#define ksuctl(op, ...) (ioctl(_fd, op, __VA_ARGS__) >= 0) - -#define REPORT_ERR() fprintf(stderr, "%s:%d ERROR: %s\n", __FILE__, __LINE__, strerror(errno)); - -int main(int argc, char* argv[]) { - if (argc <= 2) { - fprintf(stderr, - "ksu_profile (github.com/j-hc)\n" - "Disables \"Unmount modules\" for given package\n" - " Usage: %s \n", - argv[0]); - return 1; - } - - syscall(SYS_reboot, KSU_INSTALL_MAGIC1, KSU_INSTALL_MAGIC2, 0, &_fd); - if (_fd == -1) { - REPORT_ERR(); - return 1; - } - long uid = atol(argv[1]); - - struct ksu_uid_should_umount_cmd umount_cmd = {0}; - if (!ksuctl(KSU_IOCTL_UID_SHOULD_UMOUNT, &umount_cmd)) { - REPORT_ERR(); - return 1; - } - if (!umount_cmd.should_umount) return 0; - - struct ksu_get_manager_appid_cmd appid_cmd = {0}; - if (!ksuctl(KSU_IOCTL_GET_MANAGER_APPID, &appid_cmd)) { - REPORT_ERR(); - return 1; - } - - if (setuid(appid_cmd.appid) != 0) { - REPORT_ERR(); - return 1; - } - struct app_profile profile = {0}; - profile.current_uid = uid; - if (!ksuctl(KSU_IOCTL_GET_APP_PROFILE, &profile)) { - printf("Create profile for %s\n", argv[2]); - profile.version = KSU_APP_PROFILE_VER; - strncpy(profile.key, argv[2], sizeof(profile.key) / sizeof(profile.key[0])); - } - - profile.nrp_config.use_default = false; - profile.nrp_config.profile.umount_modules = false; - - if (!ksuctl(KSU_IOCTL_SET_APP_PROFILE, &profile)) { - REPORT_ERR(); - return 1; - } - - return 0; -} diff --git a/module/action.sh b/module/action.sh new file mode 100755 index 0000000..f422b59 --- /dev/null +++ b/module/action.sh @@ -0,0 +1,23 @@ +#!/system/bin/sh +MODDIR=${0%/*} +. "$MODDIR/utils.sh" + +DFILE="$MODDIR/disabled_by_action" + +if [ -z "$(get_mounts)" ]; then + rm -f "$DFILE" + if mount_nosleep; then + echo "* Enabled successfully" + cp -f "$MODDIR/module.prop.orig" "$MODDIR/module.prop" + else + echo "* Failed" + fi + echo "" + get_mounts +else + touch "$DFILE" + umount_all + echo "* Disabled" + + ch_desc "⛔ Disabled by action" +fi diff --git a/module/bin/arm/ksu_profile b/module/bin/arm/ksu_profile index 10bc3e4f91a2c3bf250e027e306e49df47dbea95..ba73df527a056035166fa9e4175306d50b55cc01 100755 GIT binary patch delta 173 zcmbOtKSh3n0h6Sg2Y*Yb($bw*kF4I65wDoi_DAkI0|-nOp6LvNDG+W6kD54rO)#T4zL3 delta 173 zcmbOtKSh3n0h8o(p2xMShDSE1$9#{tD!=i3A46sz0|-nOp6PvNDG+WA)}j4rO)#a1lgT diff --git a/module/bin/arm64/ksu_profile b/module/bin/arm64/ksu_profile index a5c23b8b4d4b2699bbe24b03225f10bd92545ea2..6fadd22c16e004f2e697d4e5cf67ea2bcf4b62bb 100755 GIT binary patch delta 259 zcmcbhb3tc=A+vB#@oyWW1DdDuo}Ec5?V0tb)cpQrK_;2a3CwfZ7@H^mBXr$%B= delta 259 zcmcbhb3tc=A+xaH3X7i?c`n4R|M-d7F73(r_<&E71({?vCos=tV|1SUkF(k_nP=hy zW>GChh8;!!`x$@EVqlnZfaQnzi((&34mJi8Q3i$!j)|Q?kBoUHE-3Qf$;hyw=s!R6 z&Iv$u4y-@SAMj7!#bw0UJozn`KBMwvS#Ets=E=U?=3b9^8iE)OvP^UZDpX)-2>S2L zGx3YR^U81GPAmV#JFfi8?(*XRbNsaj%nTDBGRtc*B{l?o2eM;<>OmGAo!~>?fO-u?6K`)pYc6vgUHGWuXbKxYH43qt~+7#WI-mG%?ZqwY>XO{XK`k82`~VG zM{kIVz+`?dNedB%9UuYzmOnu9xQhx8h}UhqRRyAmXCIe0LxbUg7dlJ~46O(FJ7$BV zYgBk9CvcfC=1!i?M> zpU(e=-(KW0GBCJwZc&k$9Kmg2czt{RWI-mG%?ZqwY>X0doJ|A94Z!i1|bO diff --git a/module/bin/x86/ksu_profile b/module/bin/x86/ksu_profile index a0581542eb8811d1ed79b86297f1801d9d64d032..f64568a0efe003fa42708e9079adeac69faf9a87 100755 GIT binary patch delta 241 zcmaE%_(E}m0h37LWY=eL&F9~1v)KMs^xiuCce4BJ%`Qyktc(hi_psMWNE~-j5n%uV zAT0o*o8PeX0)-|Aa!84bFz~mWhsg0D zdHx%`=$(9!L!L2lvID1~MMhvy*b6a`)DeXpK#HL^^-ElQbnIb}H6RBsyDE6eh3aG*gmc0cmhiQ2;8=U;rxkU(ONmLL8zp?Rbld#$-mWV8)uw Ip)DFHmT5AcvGV4+DS8d59bfLXKl{6NeH|`%(^T#+=CyISlwCU&p;z&Ir=W z^WWe_@8p9V@{9?S9XJgw(gTCSUWkFDjwtK^QVhMRU*h7UV-JI@DN&Kg_`$@$ki`)8 zq6w@/dev/null 2>/dev/null; then - alias mm='su -M -c' -else alias mm='nsenter -t1 -m'; fi - -mm grep -F "$PKG_NAME" /proc/mounts | while read -r line; do - ui_print "* Un-mount" - mp=${line#* } mp=${mp%% *} - mm umount -l "${mp%%\\*}" -done -am force-stop "$PKG_NAME" - -pmex() { - OP=$(pm "$@" 2>&1 &2 "'$BASEPATH'" - BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} +if BASEPATH=$(get_basepath); then if [ "${BASEPATH:1:4}" != data ]; then ui_print "* Detected $PKG_NAME as a system app" SCNM="/data/adb/post-fs-data.d/$PKG_NAME-uninstall.sh" @@ -63,7 +46,7 @@ if BASEPATH=$(pmex path "$PKG_NAME"); then abort fi - VERSION=$(dumpsys package "$PKG_NAME" 2>&1 | grep -m1 versionName=) VERSION="${VERSION#*=}" + VERSION=$(get_app_version) if [ "$VERSION" ] && [ "$VERSION" = "$PKG_VER" ]; then ui_print "* $PKG_NAME is up-to-date ($VERSION)" INS=false @@ -113,9 +96,13 @@ install() { if ! op=$(pmex install-commit "$SES"); then ui_print "$op" - if echo "$op" | grep -q -e INSTALL_FAILED_VERSION_DOWNGRADE -e INSTALL_FAILED_UPDATE_INCOMPATIBLE; then + if echo "$op" | grep -q -e INSTALL_FAILED_VERSION_DOWNGRADE -e INSTALL_FAILED_UPDATE_INCOMPATIBLE -e INSTALL_FAILED_DUPLICATE; then ui_print "* Uninstalling..." - if ! op=$(pmex uninstall "$PKG_NAME"); then + ex_unins_arg="" + if echo "$op" | grep -q INSTALL_FAILED_DUPLICATE; then + ex_unins_arg="-k" + fi + if ! op=$(pmex uninstall --user 0 $ex_unins_arg "$PKG_NAME"); then ui_print "$op" if [ $IT = 2 ]; then install_err="ERROR: pm uninstall failed." @@ -128,8 +115,8 @@ install() { install_err="$op" break fi - if BASEPATH=$(pmex path "$PKG_NAME"); then - BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} + if BASEPATH=$(get_basepath); then + : else install_err=" " break @@ -154,37 +141,36 @@ if [ $INS = true ] || [ -z "$(ls -A1 "$BASEPATHLIB")" ]; then fi fi -ui_print "* Setting Permissions" set_perm "$MODPATH/base.apk" 1000 1000 644 u:object_r:apk_data_file:s0 ui_print "* Mounting $PKG_NAME" +# move out the apk from /data/adb/modules/.. to /data/adb/rvhc to not trip some root detections mkdir -p "/data/adb/rvhc" -RVPATH=/data/adb/rvhc/${MODPATH##*/}.apk mv -f "$MODPATH/base.apk" "$RVPATH" -if ! op=$(mm mount -o bind "$RVPATH" "$BASEPATH/base.apk" 2>&1); then +if ! op=$(su -M -c mount -o bind "$RVPATH" "$BASEPATH/base.apk" 2>&1); then ui_print "ERROR: Mount failed!" ui_print "$op" fi am force-stop "$PKG_NAME" -ui_print "* Optimizing $PKG_NAME" +ui_print "* Optimizing $PKG_NAME" cmd package compile -m speed-profile -f "$PKG_NAME" >/dev/null 2>&1 # nohup cmd package compile -m speed-profile -f "$PKG_NAME" >/dev/null 2>&1 if [ "$KSU" ]; then - UID=$(dumpsys package "$PKG_NAME" 2>&1 | grep -m1 uid=) + DUMPSYS=$(dumpsys package "$PKG_NAME" 2>&1) + UID=$(echo "$DUMPSYS" | grep -m1 uid=) UID=${UID#*=} UID=${UID%% *} if [ -z "$UID" ]; then - UID=$(dumpsys package "$PKG_NAME" 2>&1 | grep -m1 userId=) + UID=$(echo "$DUMPSYS" | grep -m1 userId=) UID=${UID#*=} UID=${UID%% *} fi if [ "$UID" ]; then if ! OP=$("${MODPATH:?}/bin/$ARCH/ksu_profile" "$UID" "$PKG_NAME" 2>&1); then ui_print " $OP" - ui_print "* Because you are using a fork of KernelSU, " - ui_print " you need to go to your root manager app and" - ui_print " disable 'Unmount modules' for $PKG_NAME" + ui_print " * In your root manager app," + ui_print " disable 'Unmount modules' for $PKG_NAME" fi else ui_print "ERROR: UID could not be found for $PKG_NAME" @@ -192,6 +178,7 @@ if [ "$KSU" ]; then fi rm -rf "${MODPATH:?}/bin" "$MODPATH/stock/" +cp -f "$MODPATH/module.prop" "$MODPATH/module.prop.orig" ui_print "* Done" ui_print " by j-hc (github.com/j-hc)" diff --git a/module/service.sh b/module/service.sh index 86a7e93..db5127e 100755 --- a/module/service.sh +++ b/module/service.sh @@ -1,49 +1,26 @@ #!/system/bin/sh MODDIR=${0%/*} -RVPATH=/data/adb/rvhc/${MODDIR##*/}.apk -. "$MODDIR/config" - -err() { - [ ! -f "$MODDIR/err" ] && cp "$MODDIR/module.prop" "$MODDIR/err" - sed -i "s/^des.*/description=⚠️ Needs reflash: '${1}'/g" "$MODDIR/module.prop" -} - -until [ "$(getprop sys.boot_completed)" = 1 ]; do sleep 1; done -until [ -d "/sdcard/Android" ]; do sleep 1; done -while - BASEPATH=$(pm path "$PKG_NAME" 2>&1 &1 | grep -m1 versionName) VERSION="${VERSION#*=}" - if [ "$VERSION" != "$PKG_VER" ] && [ "$VERSION" ]; then - err "version mismatch (installed:${VERSION}, module:$PKG_VER)" - return - fi - grep "$PKG_NAME" /proc/mounts | while read -r line; do - mp=${line#* } mp=${mp%% *} - umount -l "${mp%%\\*}" - done - if ! chcon u:object_r:apk_data_file:s0 "$RVPATH"; then - err "apk not found" - return - fi - mount -o bind "$RVPATH" "$BASEPATH/base.apk" - am force-stop "$PKG_NAME" - [ -f "$MODDIR/err" ] && mv -f "$MODDIR/err" "$MODDIR/module.prop" + mount_rv "$BASEPATH" } -run +if [ ! -f "$MODDIR/disabled_by_action" ]; then + run +fi diff --git a/module/utils.sh b/module/utils.sh new file mode 100755 index 0000000..66efa60 --- /dev/null +++ b/module/utils.sh @@ -0,0 +1,74 @@ +#!/system/bin/sh + +RVPATH=/data/adb/rvhc/${MODDIR##*/}.apk +. "$MODDIR/config" + +ch_desc() { + sed -i "s/^des.*/description=${1}/g" "$MODDIR/module.prop" +} + +ch_desc_err() { + ch_desc "⚠️ Needs reflash: '${1}'" +} + +pmex() { + OP=$(pm "$@" 2>&1 &1 | grep -m1 versionName=) VERSION="${VERSION#*=}" + echo "$VERSION" +} + +get_basepath() { + BASEPATH=$(pmex path "$PKG_NAME") + SVCL=$? + + BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} + echo "$BASEPATH" + return $SVCL +} + +umount_all() { + su -M -c grep -F "$PKG_NAME" /proc/mounts | while read -r line; do + mp=${line#* } mp=${mp%% *} mp=${mp%%\\*} + su -M -c umount -l "${mp}" + done + am force-stop "$PKG_NAME" || : +} + +get_mounts() { + su -M -c grep -F "$PKG_NAME" /proc/mounts || : +} + +mount_rv() { + if [ ! -d "${1}/lib" ]; then + ch_desc_err "Mount failed. Dont report this, consider using rvmm-zygisk-mount" + return 1 + fi + VERSION=$(get_app_version) + if [ "$VERSION" != "$PKG_VER" ] && [ "$VERSION" ]; then + ch_desc_err "Version mismatch (installed:${VERSION}, module:$PKG_VER)" + return 1 + fi + umount_all + if ! chcon u:object_r:apk_data_file:s0 "$RVPATH"; then + ch_desc_err "Apk not found" + return 1 + fi + mount -o bind "$RVPATH" "${1}/base.apk" + am force-stop "$PKG_NAME" + cp -f "$MODDIR/module.prop.orig" "$MODDIR/module.prop" + return 0 +} + +mount_nosleep() { + if ! BASEPATH=$(get_basepath); then + ch_desc_err "App not installed" + return 1 + fi + mount_rv "$BASEPATH" +} diff --git a/revanced-magisk/META-INF/com/google/android/update-binary b/revanced-magisk/META-INF/com/google/android/update-binary deleted file mode 100755 index 28b48e5..0000000 --- a/revanced-magisk/META-INF/com/google/android/update-binary +++ /dev/null @@ -1,33 +0,0 @@ -#!/sbin/sh - -################# -# Initialization -################# - -umask 022 - -# echo before loading util_functions -ui_print() { echo "$1"; } - -require_new_magisk() { - ui_print "*******************************" - ui_print " Please install Magisk v20.4+! " - ui_print "*******************************" - exit 1 -} - -######################### -# Load util_functions.sh -######################### - -OUTFD=$2 -ZIPFILE=$3 - -mount /data 2>/dev/null - -[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk -. /data/adb/magisk/util_functions.sh -[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk - -install_module -exit 0 diff --git a/revanced-magisk/META-INF/com/google/android/updater-script b/revanced-magisk/META-INF/com/google/android/updater-script deleted file mode 100755 index 11d5c96..0000000 --- a/revanced-magisk/META-INF/com/google/android/updater-script +++ /dev/null @@ -1 +0,0 @@ -#MAGISK diff --git a/revanced-magisk/customize.sh b/revanced-magisk/customize.sh deleted file mode 100755 index a40e0e9..0000000 --- a/revanced-magisk/customize.sh +++ /dev/null @@ -1,185 +0,0 @@ -. "$MODPATH/config" - -ui_print "" -if [ -n "$MODULE_ARCH" ] && [ "$MODULE_ARCH" != "$ARCH" ]; then - abort "ERROR: Wrong arch -Your device: $ARCH -Module: $MODULE_ARCH" -fi -if [ "$ARCH" = "arm" ]; then - ARCH_LIB=armeabi-v7a -elif [ "$ARCH" = "arm64" ]; then - ARCH_LIB=arm64-v8a -elif [ "$ARCH" = "x86" ]; then - ARCH_LIB=x86 -elif [ "$ARCH" = "x64" ]; then - ARCH_LIB=x86_64 -else abort "ERROR: unreachable: ${ARCH}"; fi -RVPATH=/data/adb/rvhc/${MODPATH##*/}.apk - -set_perm_recursive "$MODPATH/bin" 0 0 0755 0777 - -if su -M -c true >/dev/null 2>/dev/null; then - alias mm='su -M -c' -else alias mm='nsenter -t1 -m'; fi - -mm grep -F "$PKG_NAME" /proc/mounts | while read -r line; do - ui_print "* Un-mount" - mp=${line#* } mp=${mp%% *} - mm umount -l "${mp%%\\*}" -done -am force-stop "$PKG_NAME" - -pmex() { - OP=$(pm "$@" 2>&1 &2; then - if pmex install-existing "$PKG_NAME" >&2; then - BASEPATH=$(pmex path "$PKG_NAME") || abort "ERROR: pm path failed $BASEPATH" - echo >&2 "'$BASEPATH'" - BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} - if [ "${BASEPATH:1:4}" = data ]; then - if pmex uninstall -k --user 0 "$PKG_NAME" >&2; then - rm -rf "$BASEPATH" 2>&1 - ui_print "* Cleared existing $PKG_NAME package" - ui_print "* Reboot and reflash" - abort - else abort "ERROR: pm uninstall failed"; fi - else ui_print "* Installed stock $PKG_NAME package"; fi - fi -fi - -IS_SYS=false -INS=true -if BASEPATH=$(pmex path "$PKG_NAME"); then - echo >&2 "'$BASEPATH'" - BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} - if [ "${BASEPATH:1:4}" != data ]; then - ui_print "* $PKG_NAME is a system app." - IS_SYS=true - elif [ ! -f "$MODPATH/$PKG_NAME.apk" ]; then - ui_print "* Stock $PKG_NAME APK was not found" - VERSION=$(dumpsys package "$PKG_NAME" | grep -m1 versionName) VERSION="${VERSION#*=}" - if [ "$VERSION" = "$PKG_VER" ] || [ -z "$VERSION" ]; then - ui_print "* Skipping stock installation" - INS=false - else - abort "ERROR: Version mismatch - installed: $VERSION - module: $PKG_VER - " - fi - elif "${MODPATH:?}/bin/$ARCH/cmpr" "$BASEPATH/base.apk" "$MODPATH/$PKG_NAME.apk"; then - ui_print "* $PKG_NAME is up-to-date" - INS=false - fi -fi - -install() { - if [ ! -f "$MODPATH/$PKG_NAME.apk" ]; then - abort "ERROR: Stock $PKG_NAME apk was not found" - fi - ui_print "* Updating $PKG_NAME to $PKG_VER" - install_err="" - VERIF1=$(settings get global verifier_verify_adb_installs) - VERIF2=$(settings get global package_verifier_enable) - settings put global verifier_verify_adb_installs 0 - settings put global package_verifier_enable 0 - SZ=$(stat -c "%s" "$MODPATH/$PKG_NAME.apk") - for IT in 1 2; do - if ! SES=$(pmex install-create --user 0 -i com.android.vending -r -d -S "$SZ"); then - ui_print "ERROR: install-create failed" - install_err="$SES" - break - fi - SES=${SES#*[} SES=${SES%]*} - set_perm "$MODPATH/$PKG_NAME.apk" 1000 1000 644 u:object_r:apk_data_file:s0 - if ! op=$(pmex install-write -S "$SZ" "$SES" "$PKG_NAME.apk" "$MODPATH/$PKG_NAME.apk"); then - ui_print "ERROR: install-write failed" - install_err="$op" - break - fi - if ! op=$(pmex install-commit "$SES"); then - if echo "$op" | grep -q INSTALL_FAILED_VERSION_DOWNGRADE; then - ui_print "* Handling INSTALL_FAILED_VERSION_DOWNGRADE.." - if [ "$IS_SYS" = true ]; then - mkdir -p /data/adb/rvhc/empty /data/adb/post-fs-data.d - SCNM="/data/adb/post-fs-data.d/$PKG_NAME-uninstall.sh" - echo "mount -o bind /data/adb/rvhc/empty $BASEPATH" >"$SCNM" - chmod +x "$SCNM" - ui_print "* Created the uninstall script." - ui_print "" - ui_print "* Reboot and reflash the module!" - install_err=" " - break - else - ui_print "* Uninstalling..." - if ! op=$(pmex uninstall -k --user 0 "$PKG_NAME"); then - ui_print "$op" - if [ $IT = 2 ]; then - install_err="ERROR: pm uninstall failed." - break - fi - fi - continue - fi - fi - ui_print "ERROR: install-commit failed" - install_err="$op" - break - fi - if BASEPATH=$(pmex path "$PKG_NAME"); then - BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} - else - install_err="ERROR: install $PKG_NAME manually and reflash the module" - break - fi - break - done - settings put global verifier_verify_adb_installs "$VERIF1" - settings put global package_verifier_enable "$VERIF2" - if [ "$install_err" ]; then abort "$install_err"; fi -} -if [ $INS = true ] && ! install; then abort; fi -BASEPATHLIB=${BASEPATH}/lib/${ARCH} -if [ $INS = true ] || [ -z "$(ls -A1 "$BASEPATHLIB")" ]; then - ui_print "* Extracting native libs" - if [ ! -d "$BASEPATHLIB" ]; then mkdir -p "$BASEPATHLIB"; else rm -f "$BASEPATHLIB"/* >/dev/null 2>&1 || :; fi - if ! op=$(unzip -o -j "$MODPATH/$PKG_NAME.apk" "lib/${ARCH_LIB}/*" -d "$BASEPATHLIB" 2>&1); then - ui_print "ERROR: extracting native libs failed" - abort "$op" - fi - set_perm_recursive "${BASEPATH}/lib" 1000 1000 755 755 u:object_r:apk_data_file:s0 -fi - -ui_print "* Setting Permissions" -set_perm "$MODPATH/base.apk" 1000 1000 644 u:object_r:apk_data_file:s0 - -ui_print "* Mounting $PKG_NAME" -mkdir -p "/data/adb/rvhc" -RVPATH=/data/adb/rvhc/${MODPATH##*/}.apk -mv -f "$MODPATH/base.apk" "$RVPATH" - -if ! op=$(mm mount -o bind "$RVPATH" "$BASEPATH/base.apk" 2>&1); then - ui_print "ERROR: Mount failed!" - ui_print "$op" -fi -am force-stop "$PKG_NAME" -ui_print "* Optimizing $PKG_NAME" -nohup cmd package compile --reset "$PKG_NAME" >/dev/null 2>&1 & - -ui_print "* Cleanup" -rm -rf "${MODPATH:?}/bin" "$MODPATH/$PKG_NAME.apk" - -if [ "$KSU" ] && [ -d "/data/adb/modules/zygisk-assistant" ]; then - ui_print "* If you are using zygisk-assistant, you need to" - ui_print " give root permissions to $PKG_NAME" -fi - -ui_print "* Done" -ui_print " by j-hc (github.com/j-hc)" -ui_print " " diff --git a/revanced-magisk/service.sh b/revanced-magisk/service.sh deleted file mode 100755 index aa40f26..0000000 --- a/revanced-magisk/service.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/system/bin/sh -MODDIR=${0%/*} -RVPATH=/data/adb/rvhc/${MODDIR##*/}.apk -. "$MODDIR/config" - -err() { - [ ! -f "$MODDIR/err" ] && cp "$MODDIR/module.prop" "$MODDIR/err" - sed -i "s/^des.*/description=⚠️ Needs reflash: '${1}'/g" "$MODDIR/module.prop" -} - -until [ "$(getprop sys.boot_completed)" = 1 ]; do sleep 1; done -until [ -d "/sdcard/Android" ]; do sleep 1; done -while - BASEPATH=$(pm path "$PKG_NAME" 2>&1 "$MODDIR/log.txt" - ls -Zla "$BASEPATH/lib" >>"$MODDIR/log.txt" - else rm "$MODDIR/log.txt" >/dev/null 2>&1; fi - VERSION=$(dumpsys package "$PKG_NAME" | grep -m1 versionName) VERSION="${VERSION#*=}" - if [ "$VERSION" != "$PKG_VER" ] && [ "$VERSION" ]; then - err "version mismatch (installed:${VERSION}, module:$PKG_VER)" - return - fi - grep "$PKG_NAME" /proc/mounts | while read -r line; do - mp=${line#* } mp=${mp%% *} - umount -l "${mp%%\\*}" - done - if ! chcon u:object_r:apk_data_file:s0 "$RVPATH"; then - err "apk not found" - return - fi - mount -o bind "$RVPATH" "$BASEPATH/base.apk" - am force-stop "$PKG_NAME" - [ -f "$MODDIR/err" ] && mv -f "$MODDIR/err" "$MODDIR/module.prop" -} - -run diff --git a/revanced-magisk/uninstall.sh b/revanced-magisk/uninstall.sh deleted file mode 100755 index 57f75ff..0000000 --- a/revanced-magisk/uninstall.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/system/bin/sh -{ - MODDIR=${0%/*} - . "$MODDIR/config" - - rm "/data/adb/rvhc/${MODDIR##*/}.apk" - rmdir "/data/adb/rvhc" - rm "/data/adb/post-fs-data.d/$PKG_NAME-uninstall.sh" -} & diff --git a/utils.sh b/utils.sh index 7f831b6..4c64f2e 100755 --- a/utils.sh +++ b/utils.sh @@ -45,11 +45,16 @@ wpr() { echo >&2 -e "\033[0;33m[!] ${1}\033[0m" if [ "${GITHUB_REPOSITORY-}" ]; then echo >&2 -e "::warning::utils.sh [!] ${1}\n"; fi } + +_clean_tmp() { + rm -rf ./${TEMP_DIR}/*tmp.* ./${TEMP_DIR}/*tmp_* ./${TEMP_DIR}/*/*tmp.* ./${TEMP_DIR}/*-temporary-files ./*-temporary-files +} + abort() { epr "ABORT: ${1-}" - rm -rf ./${TEMP_DIR}/*tmp.* ./${TEMP_DIR}/*/*tmp.* ./${TEMP_DIR}/*-temporary-files ./*-temporary-files + _clean_tmp trap - SIGTERM SIGINT EXIT - kill -- -$$ 2>/dev/null + kill -9 -- -$$ 2>/dev/null exit 1 } java() { env -i java --enable-native-access=ALL-UNNAMED "$@"; } @@ -61,15 +66,9 @@ get_prebuilts() { cl_dir=${TEMP_DIR}/${cl_dir,,}-rv [ -d "$cl_dir" ] || mkdir "$cl_dir" - for src_ver in "$cli_src CLI $cli_ver cli" "$patches_src Patches $patches_ver patches"; do + for src_ver in "Patches $patches_src $patches_ver" "CLI $cli_src $cli_ver"; do set -- $src_ver - local src=$1 tag=$2 ver=${3-} fprefix=$4 - - if [ "$tag" = "CLI" ]; then - local grab_cl=false - elif [ "$tag" = "Patches" ]; then - local grab_cl=true - else abort unreachable; fi + local tag=$1 src=$2 ver=${3-} local dir=${src%/*} dir=${TEMP_DIR}/${dir,,}-rv @@ -89,8 +88,16 @@ get_prebuilts() { name_ver="$ver" fi - local url file tag_name matches - file=$(find "$dir" -name "*${fprefix}-${name_ver#v}.*" -type f 2>/dev/null) + local file + if [ "$tag" = "CLI" ]; then + file=$(find "$dir" -maxdepth 1 -name "*cli-${name_ver#v}*.jar" -o -name "*desktop-${name_ver#v}*.jar" -type f 2>/dev/null) + local grab_cl=false + elif [ "$tag" = "Patches" ]; then + file=$(find "$dir" -maxdepth 1 -name "*patches-${name_ver#v}.*" -type f 2>/dev/null) + local grab_cl=true + else abort unreachable; fi + + local url tag_name matches if [ "$ver" = "latest" ]; then file=$(grep -v '/[^/]*dev[^/]*$' <<<"$file" | head -1) else @@ -244,7 +251,7 @@ get_highest_ver() { local vers m vers=$(tee) m=$(head -1 <<<"$vers") - if ! semver_validate "$m"; then echo "$m"; else sort -rV <<<"$vers" | head -1; fi + if ! semver_validate "$m"; then echo "$m"; else sort -s -t- -k1,1Vr <<<"$vers" | head -1; fi } semver_validate() { local a="${1%-*}" @@ -349,7 +356,7 @@ apkmirror_search() { local dlurl="" node app_table emptyCheck local apparch=('universal' 'noarch' 'arm64-v8a + armeabi-v7a') - if [ "$arch" != all ]; then + if [ "$arch" != "all" ]; then apparch+=("$arch") fi @@ -504,7 +511,7 @@ get_uptodown_pkg_name() { $HTMLQ --text "tr.full:nth-child(1) > td:nth-child(3)" # -------------------- archive -------------------- dl_archive() { local url=$1 version=$2 output=$3 arch=$4 - local path output_m version=${version// /} + local path version=${version// /} if [ -f "${output}.apkm" ]; then merge_splits "${output}.apkm" "$output" @@ -513,13 +520,10 @@ dl_archive() { path=$(grep -m1 "${version_f#v}-${arch// /}" <<<"$__ARCHIVE_RESP__") || return 1 if [ "${path##*.}" = "apkm" ]; then - output_m="${output}.apkm" + req "${url}/${path}" "${output}.apkm" || return 1 + merge_splits "${output}.apkm" "$output" else - output_m=$output - fi - req "${url}/${path}" "$output_m" || return 1 - if [ "${path##*.}" = "apkm" ]; then - merge_splits "$output_m" "$output" + req "${url}/${path}" "${output}" || return 1 fi } get_archive_resp() { @@ -534,7 +538,16 @@ get_archive_pkg_name() { echo "$__ARCHIVE_PKG_NAME__"; } # -------------------- direct -------------------- dl_direct() { local url=$1 version=${2// /-} output=$3 arch=$4 _dpi=$5 - req "$url" "${output}" || return 1 + if ! grep -q "${version_f#v}-${arch// /}" <<<"$url"; then + epr "Given direct-dlurl for $output is not compatible. Set proper 'arch' and 'version' options." + return 1 + fi + if [ "${url##*.}" = "apkm" ]; then + req "$url" "${output}.apkm" || return 1 + merge_splits "${output}.apkm" "$output" + else + req "$url" "${output}" || return 1 + fi } get_direct_vers() { cut -d- -f2 <<<"$__DIRECT_APKNAME__"; } get_direct_pkg_name() { cut -d- -f1 <<<"$__DIRECT_APKNAME__"; } @@ -543,8 +556,11 @@ get_direct_resp() { __DIRECT_APKNAME__=$(awk -F/ '{print $NF}' <<<"$1"); } patch_apk() { local stock_input=$1 patched_apk=$2 patcher_args=$3 cli_jar=$4 patches_jar=$5 - local cmd="java -jar '$cli_jar' patch '$stock_input' --purge -o '$patched_apk' -p '$patches_jar' --keystore=ks.keystore \ ---keystore-entry-password=123456789 --keystore-password=123456789 --signer=jhc --keystore-entry-alias=jhc $patcher_args" + local tmp_files + tmp_files="$(pwd)/$(mktemp -d -p "$TEMP_DIR")" + + local cmd="java -jar '$cli_jar' patch '$stock_input' -o '$patched_apk' -p '$patches_jar' --keystore=ks.keystore \ +--keystore-entry-password=123456789 --keystore-password=123456789 --signer=jhc --keystore-entry-alias=jhc -t '$tmp_files' $patcher_args" # TODO: remove this later local cli_name @@ -743,6 +759,8 @@ build_rv() { if [ "$build_mode" = apk ]; then if [ "${NORB:-}" != true ] || { [ ! -f "$patched_apk" ] && [ ! -f "$apk_output" ]; }; then mv -f "$patched_apk" "$apk_output" + else + cp -f "$patched_apk" "$apk_output" fi pr "Built ${table} (non-root): '${apk_output}'" continue