Commit 9b18960b authored by topjohnwu's avatar topjohnwu

Getting APK doesn't need ContentProvider

parent a009fdbd
package com.topjohnwu.magisk; package com.topjohnwu.magisk;
import static com.topjohnwu.magisk.BuildConfig.APPLICATION_ID;
import android.app.AppComponentFactory; import android.app.AppComponentFactory;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
...@@ -7,7 +9,6 @@ import android.content.ContextWrapper; ...@@ -7,7 +9,6 @@ import android.content.ContextWrapper;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Environment; import android.os.Environment;
import android.util.Log; import android.util.Log;
...@@ -18,7 +19,6 @@ import java.io.File; ...@@ -18,7 +19,6 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
...@@ -105,19 +105,16 @@ public class DynLoad { ...@@ -105,19 +105,16 @@ public class DynLoad {
context.getExternalFilesDir(null); context.getExternalFilesDir(null);
// If no APK to load, attempt to copy from previous app // If no APK to load, attempt to copy from previous app
if (!isDynLoader() && !context.getPackageName().equals(BuildConfig.APPLICATION_ID)) { if (!isDynLoader() && !context.getPackageName().equals(APPLICATION_ID)) {
Uri uri = new Uri.Builder().scheme("content")
.authority("com.topjohnwu.magisk.provider")
.encodedPath("apk_file").build();
try { try {
InputStream src = context.getContentResolver().openInputStream(uri); var info = context.getPackageManager().getApplicationInfo(APPLICATION_ID, 0);
if (src != null) { var src = new FileInputStream(info.sourceDir);
var out = new FileOutputStream(apk); var out = new FileOutputStream(apk);
try (src; out) { try (src; out) {
APKInstall.transfer(src, out); APKInstall.transfer(src, out);
}
loader = new InjectedClassLoader(apk);
} }
loader = new InjectedClassLoader(apk);
} catch (PackageManager.NameNotFoundException ignored) {
} catch (IOException e) { } catch (IOException e) {
Log.e(DynLoad.class.getSimpleName(), "", e); Log.e(DynLoad.class.getSimpleName(), "", e);
apk.delete(); apk.delete();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment