diff --git a/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt b/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt index 6ec467e29..eb8652ac9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt @@ -14,6 +14,7 @@ import com.topjohnwu.magisk.core.Provider import com.topjohnwu.magisk.core.utils.AXML import com.topjohnwu.magisk.core.utils.Keygen import com.topjohnwu.magisk.di.ServiceLocator +import com.topjohnwu.magisk.ktx.await import com.topjohnwu.magisk.ktx.writeTo import com.topjohnwu.magisk.signing.JarMap import com.topjohnwu.magisk.signing.SignApk @@ -25,6 +26,7 @@ import kotlinx.coroutines.Runnable import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File +import java.io.FileOutputStream import java.io.IOException import java.io.OutputStream import java.security.SecureRandom @@ -115,18 +117,23 @@ object HideAPK { } // Generate a new random package name and signature + val repack = File(activity.cacheDir, "patched.apk") val pkg = genPackageName() Config.keyStoreRaw = "" + if (!patch(activity, stub, FileOutputStream(repack), pkg, label)) + return false + // Install and auto launch app val session = APKInstall.startSession(activity, pkg, onFailure) { launchApp(activity, pkg) } + + val cmd = "adb_pm_install $repack ${activity.applicationInfo.uid}" + if (Shell.su(cmd).exec().isSuccess) return true + try { - val success = session.openStream(activity).use { - patch(activity, stub, it, pkg, label) - } - if (!success) return false + session.install(activity, repack) } catch (e: IOException) { Timber.e(e) return false @@ -170,6 +177,8 @@ object HideAPK { launchApp(activity, APPLICATION_ID) dialog.dismiss() } + val cmd = "adb_pm_install $apk ${activity.applicationInfo.uid}" + if (Shell.su(cmd).await().isSuccess) return val success = withContext(Dispatchers.IO) { try { session.install(activity, apk)