diff --git a/android/app/build.gradle b/android/app/build.gradle index 2559d75..a0cc750 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -109,6 +109,7 @@ dependencies { implementation "dev.rikka.tools.refine:runtime:$hidden_api_version" implementation "dev.rikka.hidden:compat:$hidden_api_version" compileOnly "dev.rikka.hidden:stub:$hidden_api_version" + implementation "org.lsposed.hiddenapibypass:hiddenapibypass:4.3" implementation "com.github.topjohnwu.libsu:core:5.2.2" } diff --git a/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt b/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt index af2da43..b711892 100644 --- a/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt +++ b/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt @@ -22,6 +22,7 @@ import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.Result import java.io.IOException import java.util.concurrent.CountDownLatch +import org.lsposed.hiddenapibypass.HiddenApiBypass import rikka.shizuku.Shizuku import rikka.shizuku.Shizuku.OnRequestPermissionResultListener import rikka.shizuku.ShizukuBinderWrapper @@ -76,7 +77,8 @@ class MainActivity: FlutterActivity() { val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) var installFlags: Int = PackageInstallerUtils.getInstallFlags(params) - installFlags = installFlags or 0x00000004 // PackageManager.INSTALL_ALLOW_TEST + installFlags = installFlags or (0x00000002/*PackageManager.INSTALL_REPLACE_EXISTING*/ or + 0x00000004 /*PackageManager.INSTALL_ALLOW_TEST*/) PackageInstallerUtils.setInstallFlags(params, installFlags) val sessionId = packageInstaller.createSession(params) val iSession = IPackageInstallerSession.Stub.asInterface( @@ -136,7 +138,7 @@ class MainActivity: FlutterActivity() { } private fun rootInstallApk(apkFilePath: String, result: Result) { - Shell.sh("pm install -R -t " + apkFilePath).submit { out -> + Shell.sh("pm install -r -t " + apkFilePath).submit { out -> val builder = StringBuilder() for (data in out.getOut()) { builder.append(data) } result.success(builder.toString().endsWith("Success")) @@ -145,6 +147,9 @@ class MainActivity: FlutterActivity() { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + HiddenApiBypass.addHiddenApiExemptions("") + } Shizuku.addRequestPermissionResultListener(shizukuRequestPermissionResultListener) installersChannel = MethodChannel( flutterEngine.dartExecutor.binaryMessenger, "installers")