Android学习之plugin插件apk中Resource、AssetManager资源获取

来源:互联网 发布:淘宝网的女款衬衣 编辑:程序博客网 时间:2024/06/06 05:17

demo下载​

友情跳转:基于DexClassLoader类装载器开发plugin插件

/** * 根据plugin插件路径创建插件AssetManager对象 * * @param apkPath * @return */private AssetManager createPluginAssetManager(String apkPath) {    try {        AssetManager assetManager = AssetManager.class.newInstance();        try {            AssetManager.class.getDeclaredMethod("addAssetPath", String.class).invoke(                    assetManager, apkPath);        } catch (Throwable th) {            System.out.println("debug:createAssetManager :"+th.getMessage());            th.printStackTrace();        }        return assetManager;    } catch (Throwable th) {        System.out.println("debug:createAssetManager :"+th.getMessage());        th.printStackTrace();    }    return null;}/** * 使用反射的方式,使用PluginResource对象,替换ContextmResources对象 * * @param context * @param resources */public void replaceContextResources(Context context, Resources resources){    try {        Field field = context.getClass().getDeclaredField("mResources");        field.setAccessible(true);        field.set(context, resources);        System.out.println("debug:repalceResources succ");    } catch (Exception e) {        System.out.println("debug:repalceResources error");        e.printStackTrace();    }}/** * 获取plugin插件中的Resources资源对象 * * @param context * @param apkPath * @return */public Resources getPluginResource(Context context, String apkPath){    AssetManager assetManager = createPluginAssetManager(apkPath);    return new Resources(assetManager, context.getResources().getDisplayMetrics(), context.getResources().getConfiguration());

}

1 0
原创粉丝点击