mirror of
https://github.com/ReVanced/revanced-library.git
synced 2026-01-11 13:56:17 +00:00
feat: Request the update ownership enforcement (#71)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
This commit is contained in:
@@ -4,7 +4,7 @@ bcpkix-jdk18on = "1.77"
|
||||
binary-compatibility-validator = "0.15.1"
|
||||
core-ktx = "1.15.0"
|
||||
guava = "33.2.1-jre"
|
||||
jadb = "1.2.1"
|
||||
jadb = "1.2.1.1"
|
||||
kotlin = "2.0.20"
|
||||
kotlinx-coroutines = "1.8.1"
|
||||
kotlinx-serialization = "1.7.1"
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import androidx.core.content.ContextCompat
|
||||
import app.revanced.library.installation.installer.Installer.Apk
|
||||
import java.io.Closeable
|
||||
@@ -85,10 +86,13 @@ class LocalInstaller(
|
||||
|
||||
override fun close() = context.unregisterReceiver(broadcastReceiver)
|
||||
|
||||
@SuppressLint("MissingPermission")
|
||||
companion object {
|
||||
private val sessionParams = PackageInstaller.SessionParams(
|
||||
PackageInstaller.SessionParams.MODE_FULL_INSTALL,
|
||||
).apply {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
|
||||
setRequestUpdateOwnership(true)
|
||||
setInstallReason(PackageManager.INSTALL_REASON_USER)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package app.revanced.library.installation.installer
|
||||
|
||||
import app.revanced.library.installation.command.AdbShellCommandRunner
|
||||
import app.revanced.library.installation.command.ShellCommandRunner
|
||||
import app.revanced.library.installation.installer.Constants.GET_SDK_VERSION
|
||||
import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
|
||||
import app.revanced.library.installation.installer.Installer.Apk
|
||||
import se.vidstige.jadb.JadbException
|
||||
import se.vidstige.jadb.managers.Package
|
||||
import se.vidstige.jadb.managers.PackageManager
|
||||
import se.vidstige.jadb.managers.PackageManager.UPDATE_OWNERSHIP
|
||||
|
||||
/**
|
||||
* [AdbInstaller] for installing and uninstalling [Apk] files using ADB.
|
||||
@@ -17,18 +19,23 @@ import se.vidstige.jadb.managers.PackageManager
|
||||
class AdbInstaller(
|
||||
deviceSerial: String? = null,
|
||||
) : Installer<AdbInstallerResult, Installation>() {
|
||||
private val device = getDevice(deviceSerial, logger)
|
||||
private val adbShellCommandRunner = AdbShellCommandRunner(device)
|
||||
private val packageManager = PackageManager(device)
|
||||
private val shellCommandRunner: ShellCommandRunner
|
||||
private val packageManager: PackageManager
|
||||
|
||||
init {
|
||||
val device = getDevice(deviceSerial, logger)
|
||||
shellCommandRunner = AdbShellCommandRunner(device)
|
||||
packageManager = PackageManager(device)
|
||||
|
||||
logger.fine("Connected to $deviceSerial")
|
||||
}
|
||||
|
||||
override suspend fun install(apk: Apk): AdbInstallerResult {
|
||||
logger.info("Installing ${apk.file.name}")
|
||||
|
||||
return runPackageManager { install(apk.file) }
|
||||
return runPackageManager {
|
||||
val sdkVersion = shellCommandRunner(GET_SDK_VERSION).output.toInt()
|
||||
if (sdkVersion < 34) install(apk.file)
|
||||
else installWithOptions(apk.file, listOf(UPDATE_OWNERSHIP))
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun uninstall(packageName: String): AdbInstallerResult {
|
||||
@@ -39,7 +46,7 @@ class AdbInstaller(
|
||||
|
||||
override suspend fun getInstallation(packageName: String): Installation? = packageManager.packages.find {
|
||||
it.toString() == packageName
|
||||
}?.let { Installation(adbShellCommandRunner(INSTALLED_APK_PATH).output) }
|
||||
}?.let { Installation(shellCommandRunner(INSTALLED_APK_PATH).output) }
|
||||
|
||||
private fun runPackageManager(block: PackageManager.() -> Unit) = try {
|
||||
packageManager.run(block)
|
||||
|
||||
@@ -18,7 +18,8 @@ internal object Constants {
|
||||
const val KILL = "am force-stop $PLACEHOLDER"
|
||||
const val INSTALLED_APK_PATH = "pm path $PLACEHOLDER"
|
||||
const val CREATE_INSTALLATION_PATH = "$CREATE_DIR $MOUNT_PATH"
|
||||
|
||||
const val GET_SDK_VERSION = "getprop ro.build.version.sdk"
|
||||
|
||||
const val MOUNT_APK =
|
||||
"base_path=\"$MOUNTED_APK_PATH\" && " +
|
||||
"mv $TMP_FILE_PATH \$base_path && " +
|
||||
|
||||
Reference in New Issue
Block a user