插件Resource创建

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)

你可能感兴趣的:(插件Resource创建)