Make a.a not extend AppComponentFactory

Fix #2053
This commit is contained in:
topjohnwu 2019-11-09 15:57:12 -05:00
parent 65eca31635
commit a2ddf362d8
6 changed files with 13 additions and 18 deletions

View File

@ -11,10 +11,8 @@
<application <application
android:name="a.e" android:name="a.e"
android:appComponentFactory="a.a"
android:allowBackup="true" android:allowBackup="true"
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning" tools:ignore="UnusedAttribute,GoogleAppIndexingWarning">
tools:replace="android:appComponentFactory">
<!-- Splash --> <!-- Splash -->
<activity <activity

View File

@ -1,11 +1,9 @@
package a; package a;
import androidx.core.app.AppComponentFactory;
import com.topjohnwu.magisk.utils.PatchAPK; import com.topjohnwu.magisk.utils.PatchAPK;
import com.topjohnwu.signing.BootSigner; import com.topjohnwu.signing.BootSigner;
public class a extends AppComponentFactory { public class a {
@Deprecated @Deprecated
public static boolean patchAPK(String in, String out, String pkg) { public static boolean patchAPK(String in, String out, String pkg) {

View File

@ -50,7 +50,7 @@ fun Context.wrapJob(): Context = object : GlobalResContext(this) {
fun Class<*>.cmp(pkg: String): ComponentName { fun Class<*>.cmp(pkg: String): ComponentName {
val name = ClassMap[this].name val name = ClassMap[this].name
return ComponentName(pkg, Info.stub?.componentMap?.get(name) ?: name) return ComponentName(pkg, Info.stub?.classToComponent?.get(name) ?: name)
} }
inline fun <reified T> Context.intent() = Intent().setComponent(T::class.java.cmp(packageName)) inline fun <reified T> Context.intent() = Intent().setComponent(T::class.java.cmp(packageName))
@ -131,7 +131,7 @@ private class JobSchedulerWrapper(private val base: JobScheduler) : JobScheduler
val name = service.className val name = service.className
val component = ComponentName( val component = ComponentName(
service.packageName, service.packageName,
Info.stub!!.componentMap[name] ?: name) Info.stub!!.classToComponent[name] ?: name)
// Clone the JobInfo except component // Clone the JobInfo except component
val builder = JobInfo.Builder(id, component) val builder = JobInfo.Builder(id, component)

View File

@ -15,7 +15,7 @@ public class DynAPK {
// Indices of the object array // Indices of the object array
private static final int STUB_VERSION_ENTRY = 0; private static final int STUB_VERSION_ENTRY = 0;
private static final int COMPONENT_MAP = 1; private static final int CLASS_COMPONENT_MAP = 1;
private static File dynDir; private static File dynDir;
private static Method addAssetPath; private static Method addAssetPath;
@ -44,14 +44,14 @@ public class DynAPK {
Object[] arr = (Object[]) o; Object[] arr = (Object[]) o;
Data data = new Data(); Data data = new Data();
data.version = (int) arr[STUB_VERSION_ENTRY]; data.version = (int) arr[STUB_VERSION_ENTRY];
data.componentMap = (Map<String, String>) arr[COMPONENT_MAP]; data.classToComponent = (Map<String, String>) arr[CLASS_COMPONENT_MAP];
return data; return data;
} }
public static Object pack(Data data) { public static Object pack(Data data) {
Object[] arr = new Object[2]; Object[] arr = new Object[2];
arr[STUB_VERSION_ENTRY] = data.version; arr[STUB_VERSION_ENTRY] = data.version;
arr[COMPONENT_MAP] = data.componentMap; arr[CLASS_COMPONENT_MAP] = data.classToComponent;
return arr; return arr;
} }
@ -65,6 +65,6 @@ public class DynAPK {
public static class Data { public static class Data {
public int version = STUB_VERSION; public int version = STUB_VERSION;
public Map<String, String> componentMap; public Map<String, String> classToComponent;
} }
} }

View File

@ -19,12 +19,12 @@ public class DelegateApplication extends Application {
static File MANAGER_APK; static File MANAGER_APK;
private Object factory; private DelegateComponentFactory factory;
private Application delegate; private Application delegate;
public DelegateApplication() {} public DelegateApplication() {}
public DelegateApplication(Object o) { public DelegateApplication(DelegateComponentFactory o) {
factory = o; factory = o;
} }
@ -46,7 +46,6 @@ public class DelegateApplication extends Application {
@SuppressLint("NewApi") @SuppressLint("NewApi")
private void setUpDynAPK() { private void setUpDynAPK() {
DelegateComponentFactory factory = (DelegateComponentFactory) this.factory;
MANAGER_APK = DynAPK.current(this); MANAGER_APK = DynAPK.current(this);
File update = DynAPK.update(this); File update = DynAPK.update(this);
if (update.exists()) if (update.exists())
@ -55,7 +54,8 @@ public class DelegateApplication extends Application {
ClassLoader cl = new DynamicClassLoader(MANAGER_APK, factory.loader); ClassLoader cl = new DynamicClassLoader(MANAGER_APK, factory.loader);
try { try {
// Create the delegate AppComponentFactory // Create the delegate AppComponentFactory
AppComponentFactory df = (AppComponentFactory) cl.loadClass("a.a").newInstance(); AppComponentFactory df = (AppComponentFactory)
cl.loadClass("androidx.core.app.CoreComponentFactory").newInstance();
// Create the delegate Application // Create the delegate Application
delegate = (Application) cl.loadClass("a.e").getConstructor(Object.class) delegate = (Application) cl.loadClass("a.e").getConstructor(Object.class)

View File

@ -29,8 +29,7 @@ public class Mapping {
public static Data data() { public static Data data() {
Data data = new Data(); Data data = new Data();
data.componentMap = inverseMap; data.classToComponent = inverseMap;
return data; return data;
} }
} }