|
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