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
android:name="a.e"
android:appComponentFactory="a.a"
android:allowBackup="true"
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning"
tools:replace="android:appComponentFactory">
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning">
<!-- Splash -->
<activity

View File

@ -1,11 +1,9 @@
package a;
import androidx.core.app.AppComponentFactory;
import com.topjohnwu.magisk.utils.PatchAPK;
import com.topjohnwu.signing.BootSigner;
public class a extends AppComponentFactory {
public class a {
@Deprecated
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 {
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))
@ -131,7 +131,7 @@ private class JobSchedulerWrapper(private val base: JobScheduler) : JobScheduler
val name = service.className
val component = ComponentName(
service.packageName,
Info.stub!!.componentMap[name] ?: name)
Info.stub!!.classToComponent[name] ?: name)
// Clone the JobInfo except component
val builder = JobInfo.Builder(id, component)

View File

@ -15,7 +15,7 @@ public class DynAPK {
// Indices of the object array
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 Method addAssetPath;
@ -44,14 +44,14 @@ public class DynAPK {
Object[] arr = (Object[]) o;
Data data = new Data();
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;
}
public static Object pack(Data data) {
Object[] arr = new Object[2];
arr[STUB_VERSION_ENTRY] = data.version;
arr[COMPONENT_MAP] = data.componentMap;
arr[CLASS_COMPONENT_MAP] = data.classToComponent;
return arr;
}
@ -65,6 +65,6 @@ public class DynAPK {
public static class Data {
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;
private Object factory;
private DelegateComponentFactory factory;
private Application delegate;
public DelegateApplication() {}
public DelegateApplication(Object o) {
public DelegateApplication(DelegateComponentFactory o) {
factory = o;
}
@ -46,7 +46,6 @@ public class DelegateApplication extends Application {
@SuppressLint("NewApi")
private void setUpDynAPK() {
DelegateComponentFactory factory = (DelegateComponentFactory) this.factory;
MANAGER_APK = DynAPK.current(this);
File update = DynAPK.update(this);
if (update.exists())
@ -55,7 +54,8 @@ public class DelegateApplication extends Application {
ClassLoader cl = new DynamicClassLoader(MANAGER_APK, factory.loader);
try {
// 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
delegate = (Application) cl.loadClass("a.e").getConstructor(Object.class)

View File

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