From 9fda40744173669c84b0c2599ae5ac5d39591798 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 7 Dec 2023 16:39:41 +0100 Subject: [PATCH] feat: Improve mount reliability by unmounting existing mounts and killing running apps --- .../kotlin/app/revanced/library/adb/AdbManager.kt | 14 +++++++------- .../kotlin/app/revanced/library/adb/Constants.kt | 15 +++++++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/app/revanced/library/adb/AdbManager.kt b/src/main/kotlin/app/revanced/library/adb/AdbManager.kt index d6d868f..82a71f5 100644 --- a/src/main/kotlin/app/revanced/library/adb/AdbManager.kt +++ b/src/main/kotlin/app/revanced/library/adb/AdbManager.kt @@ -5,10 +5,11 @@ import app.revanced.library.adb.Constants.CREATE_DIR import app.revanced.library.adb.Constants.DELETE import app.revanced.library.adb.Constants.GET_INSTALLED_PATH import app.revanced.library.adb.Constants.INSTALLATION_PATH -import app.revanced.library.adb.Constants.INSTALL_MOUNT +import app.revanced.library.adb.Constants.INSTALL_MOUNT_SCRIPT import app.revanced.library.adb.Constants.INSTALL_PATCHED_APK -import app.revanced.library.adb.Constants.MOUNT_PATH +import app.revanced.library.adb.Constants.KILL import app.revanced.library.adb.Constants.MOUNT_SCRIPT +import app.revanced.library.adb.Constants.MOUNT_SCRIPT_PATH import app.revanced.library.adb.Constants.PATCHED_APK_PATH import app.revanced.library.adb.Constants.PLACEHOLDER import app.revanced.library.adb.Constants.RESTART @@ -104,9 +105,8 @@ sealed class AdbManager private constructor(deviceSerial: String?) { device.createFile(TMP_PATH, MOUNT_SCRIPT.applyReplacement(packageName)) - device.run(INSTALL_MOUNT, packageName).waitFor() - device.run(UMOUNT, packageName).waitFor() // Sanity check. - device.run(MOUNT_PATH, packageName).waitFor() + device.run(INSTALL_MOUNT_SCRIPT, packageName).waitFor() + device.run(MOUNT_SCRIPT_PATH, packageName).waitFor() device.run(RESTART, packageName) device.run(DELETE, TMP_PATH) @@ -118,9 +118,9 @@ sealed class AdbManager private constructor(deviceSerial: String?) { device.run(UMOUNT, packageName) device.run(DELETE.applyReplacement(PATCHED_APK_PATH), packageName) - device.run(DELETE, MOUNT_PATH.applyReplacement(packageName)) + device.run(DELETE, MOUNT_SCRIPT_PATH.applyReplacement(packageName)) device.run(DELETE, TMP_PATH) - device.run(RESTART, packageName) + device.run(KILL, packageName) super.uninstall(packageName) } diff --git a/src/main/kotlin/app/revanced/library/adb/Constants.kt b/src/main/kotlin/app/revanced/library/adb/Constants.kt index 74641a0..ada0a2f 100644 --- a/src/main/kotlin/app/revanced/library/adb/Constants.kt +++ b/src/main/kotlin/app/revanced/library/adb/Constants.kt @@ -6,11 +6,12 @@ internal object Constants { internal const val TMP_PATH = "/data/local/tmp/revanced.tmp" internal const val INSTALLATION_PATH = "/data/adb/revanced/" internal const val PATCHED_APK_PATH = "$INSTALLATION_PATH$PLACEHOLDER.apk" - internal const val MOUNT_PATH = "/data/adb/service.d/mount_revanced_$PLACEHOLDER.sh" + internal const val MOUNT_SCRIPT_PATH = "/data/adb/service.d/mount_revanced_$PLACEHOLDER.sh" internal const val DELETE = "rm -rf $PLACEHOLDER" internal const val CREATE_DIR = "mkdir -p" internal const val RESTART = "am start -S $PLACEHOLDER" + internal const val KILL = "am force-stop $PLACEHOLDER" internal const val GET_INSTALLED_PATH = "pm path $PLACEHOLDER" internal const val INSTALL_PATCHED_APK = @@ -23,7 +24,7 @@ internal object Constants { internal const val UMOUNT = "grep $PLACEHOLDER /proc/mounts | while read -r line; do echo ${'$'}line | cut -d ' ' -f 2 | sed 's/apk.*/apk/' | xargs -r umount -l; done" - internal const val INSTALL_MOUNT = "mv $TMP_PATH $MOUNT_PATH && chmod +x $MOUNT_PATH" + internal const val INSTALL_MOUNT_SCRIPT = "mv $TMP_PATH $MOUNT_SCRIPT_PATH && chmod +x $MOUNT_SCRIPT_PATH" internal val MOUNT_SCRIPT = """ @@ -33,11 +34,17 @@ internal object Constants { until [ "$( getprop sys.boot_completed )" = 1 ]; do sleep 3; done until [ -d "/sdcard/Android" ]; do sleep 1; done - + + # Unmount any existing mount as a safety measure + $UMOUNT + base_path="$PATCHED_APK_PATH" stock_path=$( pm path $PLACEHOLDER | grep base | sed 's/package://g' ) - chcon u:object_r:apk_data_file:s0 ${'$'}base_path + chcon u:object_r:apk_data_file:s0 ${'$'}base_path mount -o bind ${'$'}MIRROR${'$'}base_path ${'$'}stock_path + + # Kill the app to force it to restart the mounted APK in case it's already running + $KILL """.trimIndent() }