1
1
package app.revanced.library.installation.installer
2
2
3
3
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
4
6
import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
5
- import app.revanced.library.installation.installer.Installer.Apk
6
7
import se.vidstige.jadb.JadbException
7
8
import se.vidstige.jadb.managers.Package
8
9
import se.vidstige.jadb.managers.PackageManager
10
+ import se.vidstige.jadb.managers.PackageManager.UPDATE_OWNERSHIP
9
11
10
12
/* *
11
13
* [AdbInstaller] for installing and uninstalling [Apk] files using ADB.
@@ -17,18 +19,23 @@ import se.vidstige.jadb.managers.PackageManager
17
19
class AdbInstaller (
18
20
deviceSerial : String? = null ,
19
21
) : 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
23
24
24
25
init {
26
+ val device = getDevice(deviceSerial, logger)
27
+ shellCommandRunner = AdbShellCommandRunner (device)
28
+ packageManager = PackageManager (device)
29
+
25
30
logger.fine(" Connected to $deviceSerial " )
26
31
}
27
32
28
33
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
+ }
32
39
}
33
40
34
41
override suspend fun uninstall (packageName : String ): AdbInstallerResult {
@@ -39,7 +46,7 @@ class AdbInstaller(
39
46
40
47
override suspend fun getInstallation (packageName : String ): Installation ? = packageManager.packages.find {
41
48
it.toString() == packageName
42
- }?.let { Installation (adbShellCommandRunner (INSTALLED_APK_PATH ).output) }
49
+ }?.let { Installation (shellCommandRunner (INSTALLED_APK_PATH ).output) }
43
50
44
51
private fun runPackageManager (block : PackageManager .() -> Unit ) = try {
45
52
packageManager.run (block)
0 commit comments