插件Resource创建
2019-12-16 本文已影响0人
云呆呆
Resources创建
1.系统本身是在ResourceManager中new出来的(assetManager,metrics,Configuration),我们自己去构造的时候需要传入的assetsManager,后面个参数用系统的resource.get即可
2.但是AssetManager无法直接创建,需要用反射创建AssetManager.class.newInstance,(Class.newInstance一般用在反射,类加载和无参构造)
3.方法反射调用addAssertPath,之后再用该AssetManager创建插件的resource
4.注意:resource.getAsset有兼容性问题有可能读不到
R文件的id获取
通过类加载器加载对应插件的R.java文件
AssetManager manager = AssetManager.class.newInstance();
DexClassLoader classLoader = new DexClassLoader("", "", "", getClassLoader());
Class<?> animClass = classLoader.loadClass("packageName" + ".R$anim");
Field[] fields = animClass.getDeclaredFields();
for (Field field : fields) {
//获取到每一个animId
int animId = field.getInt(R.anim.class);
}
最终使用方式pluginresource.getAnim(animId)