The background is :
DexClassLoader
. To get a DexClassLoader
instance, I need a Context instance of the third party app.I searched stackoverflow and found someone said you can hook the method in Activity or Receiver to retrieve their context. But I checked the Activity.class and found no method that return Context type value, and only one method has Context type parameter, the onCreateView(String name, Context context, AttributeSet attrs)
.
Is there any way to get the Context?
Xposed already gives you the current hooked apps class loader.
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.android.systemui"))
return;
findAndHookMethod("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// this will be called before the clock was updated by the original method
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// this will be called after the clock was updated by the original method
}
});
}
As you can see "lpparam.classLoader" is the current apps class loader.
I think you may just have typed something incorrectly, are you able to post the code? But you can get the current hooked apps application intense witch can be casted to context. Context context = (Context) AndroidAppHelper.currentApplication();
Source:https://github.com/rovo89/XposedBridge/blob/master/src/android/app/AndroidAppHelper.java#L131 Source: https://github.com/rovo89/XposedBridge/wiki/Development-tutorial