Skip to content

Commit be0f6bf

Browse files
brossshoSumAtrIX
andauthored
feat: Request the update ownership enforcement (#71)
Co-authored-by: oSumAtrIX <[email protected]>
1 parent 9d060c1 commit be0f6bf

File tree

4 files changed

+22
-10
lines changed

4 files changed

+22
-10
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ bcpkix-jdk18on = "1.77"
44
binary-compatibility-validator = "0.15.1"
55
core-ktx = "1.15.0"
66
guava = "33.2.1-jre"
7-
jadb = "1.2.1"
7+
jadb = "1.2.1.1"
88
kotlin = "2.0.20"
99
kotlinx-coroutines = "1.8.1"
1010
kotlinx-serialization = "1.7.1"

src/androidMain/kotlin/app/revanced/library/installation/installer/LocalInstaller.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.content.Intent
88
import android.content.IntentFilter
99
import android.content.pm.PackageInstaller
1010
import android.content.pm.PackageManager
11+
import android.os.Build
1112
import androidx.core.content.ContextCompat
1213
import app.revanced.library.installation.installer.Installer.Apk
1314
import java.io.Closeable
@@ -85,10 +86,13 @@ class LocalInstaller(
8586

8687
override fun close() = context.unregisterReceiver(broadcastReceiver)
8788

89+
@SuppressLint("MissingPermission")
8890
companion object {
8991
private val sessionParams = PackageInstaller.SessionParams(
9092
PackageInstaller.SessionParams.MODE_FULL_INSTALL,
9193
).apply {
94+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
95+
setRequestUpdateOwnership(true)
9296
setInstallReason(PackageManager.INSTALL_REASON_USER)
9397
}
9498

src/commonMain/kotlin/app/revanced/library/installation/installer/AdbInstaller.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package app.revanced.library.installation.installer
22

33
import app.revanced.library.installation.command.AdbShellCommandRunner
4+
import app.revanced.library.installation.command.ShellCommandRunner
5+
import app.revanced.library.installation.installer.Constants.GET_SDK_VERSION
46
import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
5-
import app.revanced.library.installation.installer.Installer.Apk
67
import se.vidstige.jadb.JadbException
78
import se.vidstige.jadb.managers.Package
89
import se.vidstige.jadb.managers.PackageManager
10+
import se.vidstige.jadb.managers.PackageManager.UPDATE_OWNERSHIP
911

1012
/**
1113
* [AdbInstaller] for installing and uninstalling [Apk] files using ADB.
@@ -17,18 +19,23 @@ import se.vidstige.jadb.managers.PackageManager
1719
class AdbInstaller(
1820
deviceSerial: String? = null,
1921
) : Installer<AdbInstallerResult, Installation>() {
20-
private val device = getDevice(deviceSerial, logger)
21-
private val adbShellCommandRunner = AdbShellCommandRunner(device)
22-
private val packageManager = PackageManager(device)
22+
private val shellCommandRunner: ShellCommandRunner
23+
private val packageManager: PackageManager
2324

2425
init {
26+
val device = getDevice(deviceSerial, logger)
27+
shellCommandRunner = AdbShellCommandRunner(device)
28+
packageManager = PackageManager(device)
29+
2530
logger.fine("Connected to $deviceSerial")
2631
}
2732

2833
override suspend fun install(apk: Apk): AdbInstallerResult {
29-
logger.info("Installing ${apk.file.name}")
30-
31-
return runPackageManager { install(apk.file) }
34+
return runPackageManager {
35+
val sdkVersion = shellCommandRunner(GET_SDK_VERSION).output.toInt()
36+
if (sdkVersion < 34) install(apk.file)
37+
else installWithOptions(apk.file, listOf(UPDATE_OWNERSHIP))
38+
}
3239
}
3340

3441
override suspend fun uninstall(packageName: String): AdbInstallerResult {
@@ -39,7 +46,7 @@ class AdbInstaller(
3946

4047
override suspend fun getInstallation(packageName: String): Installation? = packageManager.packages.find {
4148
it.toString() == packageName
42-
}?.let { Installation(adbShellCommandRunner(INSTALLED_APK_PATH).output) }
49+
}?.let { Installation(shellCommandRunner(INSTALLED_APK_PATH).output) }
4350

4451
private fun runPackageManager(block: PackageManager.() -> Unit) = try {
4552
packageManager.run(block)

src/commonMain/kotlin/app/revanced/library/installation/installer/Constants.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ internal object Constants {
1818
const val KILL = "am force-stop $PLACEHOLDER"
1919
const val INSTALLED_APK_PATH = "pm path $PLACEHOLDER"
2020
const val CREATE_INSTALLATION_PATH = "$CREATE_DIR $MOUNT_PATH"
21-
21+
const val GET_SDK_VERSION = "getprop ro.build.version.sdk"
22+
2223
const val MOUNT_APK =
2324
"base_path=\"$MOUNTED_APK_PATH\" && " +
2425
"mv $TMP_FILE_PATH \$base_path && " +

0 commit comments

Comments
 (0)