插件化 加载资源的核心代码

插件化 加载其他apk 的资源的核心思想是 拿到其他apk 的Resources 对象,然后通过反射 ,

可以拿到 我们想要的资源,然后使用。

 

拿到其他apk 的对象 ,主要是通过 AssetManager 的 addAssetPath,方法;

因为这个方法在frameWork 层,所以要通过反射来拿;

相关framework层代码 涉及到(contentImp,ApkLoad,AssetManager )

 

/**

 * 插件化加载资源的核心代码
 * @author lsw8569013
 *
 */
public class PluginResource extends Resources{
    
    public PluginResource(AssetManager assets, DisplayMetrics metrics,
            Configuration config) {
        super(assets, metrics, config);
        // TODO Auto-generated constructor stub
    }

    public static AssetManager getAssetManager(File file ,Resources resource){
//        
        try {
            Class<?> AssetManager = Class.forName("android.content.res.AssetManager");
            Method[] declaredMethods = AssetManager.getDeclaredMethods();
            
            for(Method method : declaredMethods){
                if(method.getName().equals("addAssetPath")){
                    android.content.res.AssetManager assetManager = AssetManager.class.newInstance();
                     method.invoke(assetManager, file.getAbsolutePath());
                    return assetManager;
                }
            }
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static PluginResource getPluginResource(Resources res,AssetManager assetManager){
        return new PluginResource(assetManager, res.getDisplayMetrics(), res.getConfiguration());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值