mirror of
https://github.com/ReVanced/revanced-library.git
synced 2026-01-11 13:56:17 +00:00
feat: Improve mount reliability by unmounting existing mounts and killing running apps
This commit is contained in:
@@ -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.DELETE
|
||||||
import app.revanced.library.adb.Constants.GET_INSTALLED_PATH
|
import app.revanced.library.adb.Constants.GET_INSTALLED_PATH
|
||||||
import app.revanced.library.adb.Constants.INSTALLATION_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.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
|
||||||
|
import app.revanced.library.adb.Constants.MOUNT_SCRIPT_PATH
|
||||||
import app.revanced.library.adb.Constants.PATCHED_APK_PATH
|
import app.revanced.library.adb.Constants.PATCHED_APK_PATH
|
||||||
import app.revanced.library.adb.Constants.PLACEHOLDER
|
import app.revanced.library.adb.Constants.PLACEHOLDER
|
||||||
import app.revanced.library.adb.Constants.RESTART
|
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.createFile(TMP_PATH, MOUNT_SCRIPT.applyReplacement(packageName))
|
||||||
|
|
||||||
device.run(INSTALL_MOUNT, packageName).waitFor()
|
device.run(INSTALL_MOUNT_SCRIPT, packageName).waitFor()
|
||||||
device.run(UMOUNT, packageName).waitFor() // Sanity check.
|
device.run(MOUNT_SCRIPT_PATH, packageName).waitFor()
|
||||||
device.run(MOUNT_PATH, packageName).waitFor()
|
|
||||||
device.run(RESTART, packageName)
|
device.run(RESTART, packageName)
|
||||||
device.run(DELETE, TMP_PATH)
|
device.run(DELETE, TMP_PATH)
|
||||||
|
|
||||||
@@ -118,9 +118,9 @@ sealed class AdbManager private constructor(deviceSerial: String?) {
|
|||||||
|
|
||||||
device.run(UMOUNT, packageName)
|
device.run(UMOUNT, packageName)
|
||||||
device.run(DELETE.applyReplacement(PATCHED_APK_PATH), 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(DELETE, TMP_PATH)
|
||||||
device.run(RESTART, packageName)
|
device.run(KILL, packageName)
|
||||||
|
|
||||||
super.uninstall(packageName)
|
super.uninstall(packageName)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ internal object Constants {
|
|||||||
internal const val TMP_PATH = "/data/local/tmp/revanced.tmp"
|
internal const val TMP_PATH = "/data/local/tmp/revanced.tmp"
|
||||||
internal const val INSTALLATION_PATH = "/data/adb/revanced/"
|
internal const val INSTALLATION_PATH = "/data/adb/revanced/"
|
||||||
internal const val PATCHED_APK_PATH = "$INSTALLATION_PATH$PLACEHOLDER.apk"
|
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 DELETE = "rm -rf $PLACEHOLDER"
|
||||||
internal const val CREATE_DIR = "mkdir -p"
|
internal const val CREATE_DIR = "mkdir -p"
|
||||||
internal const val RESTART = "am start -S $PLACEHOLDER"
|
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 GET_INSTALLED_PATH = "pm path $PLACEHOLDER"
|
||||||
|
|
||||||
internal const val INSTALL_PATCHED_APK =
|
internal const val INSTALL_PATCHED_APK =
|
||||||
@@ -23,7 +24,7 @@ internal object Constants {
|
|||||||
internal const val UMOUNT =
|
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"
|
"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 =
|
internal val MOUNT_SCRIPT =
|
||||||
"""
|
"""
|
||||||
@@ -34,10 +35,16 @@ internal object Constants {
|
|||||||
until [ "$( getprop sys.boot_completed )" = 1 ]; do sleep 3; done
|
until [ "$( getprop sys.boot_completed )" = 1 ]; do sleep 3; done
|
||||||
until [ -d "/sdcard/Android" ]; do sleep 1; done
|
until [ -d "/sdcard/Android" ]; do sleep 1; done
|
||||||
|
|
||||||
|
# Unmount any existing mount as a safety measure
|
||||||
|
$UMOUNT
|
||||||
|
|
||||||
base_path="$PATCHED_APK_PATH"
|
base_path="$PATCHED_APK_PATH"
|
||||||
stock_path=$( pm path $PLACEHOLDER | grep base | sed 's/package://g' )
|
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
|
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()
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user