11package app.revanced.library.installation.installer
22
33import 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
46import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
5- import app.revanced.library.installation.installer.Installer.Apk
67import se.vidstige.jadb.JadbException
78import se.vidstige.jadb.managers.Package
89import 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
1719class 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)
0 commit comments