前几天接到一个需求,在自主开发的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传进去就可以了!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐