前几天接到一个需求,在自主开发的SDK中接入其他的项目,而其他的项目是打成了aar包,需要把Context传入到aar中,让该aar包中调用该SDK的Context,原本双方写一个接口传递就可以了,但是该项目不愿意动任何代码,这个时候就另开一种途径,通过反射获取aar包中的Context值,并赋值当前的Context.
不说了上代码:
public class ContextUtil {
/**
* 通过反射把context赋值给支付的MyApplication
* 首先进行attach,然后再调用onCreate方法初始化
* @return Context
*/
public static void setContext(Context context) {
Context appContext = new ContextThemeWrapper(context,android.R.style.Theme);
//aar包中的application
MyApplication myApplication = new MyApplication();
try {
Method sAttachBaseContextMethod = Application.class.getDeclaredMethod("attach",Context.class);
sAttachBaseContextMethod.setAccessible(true);
sAttachBaseContextMethod.invoke(myApplication,appContext); //先attach
myApplication.onCreate();//在调用onCreate
}catch (Throwable e){
Log.e("errorMessage",e.toString());
}
}
}
通过上面的注释就可以看懂了,最后就是在初始化的地方,把Context传进去就可以了!!!