|
2 | 2 |
|
3 | 3 | import android.annotation.SuppressLint;
|
4 | 4 | import android.app.Application;
|
5 |
| -import android.app.Instrumentation; |
6 |
| -import android.content.Context; |
| 5 | +import android.content.ContextWrapper; |
7 | 6 | import android.content.pm.ApplicationInfo;
|
8 | 7 | import android.os.Looper;
|
9 | 8 |
|
10 | 9 | import java.lang.reflect.Constructor;
|
11 | 10 | import java.lang.reflect.Field;
|
12 |
| -import java.lang.reflect.Method; |
13 | 11 |
|
14 | 12 | public final class Workarounds {
|
15 | 13 | private Workarounds() {
|
@@ -62,11 +60,10 @@ public static void fillAppInfo() {
|
62 | 60 | mBoundApplicationField.setAccessible(true);
|
63 | 61 | mBoundApplicationField.set(activityThread, appBindData);
|
64 | 62 |
|
65 |
| - // Context ctx = activityThread.getSystemContext(); |
66 |
| - Method getSystemContextMethod = activityThreadClass.getDeclaredMethod("getSystemContext"); |
67 |
| - Context ctx = (Context) getSystemContextMethod.invoke(activityThread); |
68 |
| - |
69 |
| - Application app = Instrumentation.newApplication(Application.class, ctx); |
| 63 | + Application app = Application.class.newInstance(); |
| 64 | + Field baseField = ContextWrapper.class.getDeclaredField("mBase"); |
| 65 | + baseField.setAccessible(true); |
| 66 | + baseField.set(app, FakeContext.get()); |
70 | 67 |
|
71 | 68 | // activityThread.mInitialApplication = app;
|
72 | 69 | Field mInitialApplicationField = activityThreadClass.getDeclaredField("mInitialApplication");
|
|
0 commit comments