Android 插件化技术窥探

2018-06-17  本文已影响28人  01_小小鱼_01

在Android 插件化技术中(宿主app和插件app设置相同的sharedUserId),动态加载apk有两种方式:

下面介绍几种常见的方法获取资源以及代码的方法。

try {  
    context = createPackageContext("com.test.resource", 
                                   Context.CONTEXT_INCLUDE_CODE  
                                  | Context.CONTEXT_IGNORE_SECURITY);  
    textView.setText(context.getResources().getText(R.string.message));  
} catch (NameNotFoundException e) {  
   e.printStackTrace();  
}  

新建一个获取资源的接口,传入插件APK的路径返回Resources对象

// 获取插件apk的Resources对象
public Resources getBundleResource(Context context, String apkPath) {
    AssetManager assetManager = createAssetManager(apkPath);
    return new Resources(assetManager, 
                         context.getResources().getDisplayMetrics(), 
                         context.getResources().getConfiguration());
}

private AssetManager createAssetManager(String apkPath) {
    try {
        AssetManager assetManager = AssetManager.class.newInstance();
        AssetManager.class.getDeclaredMethod("addAssetPath", String.class)
                          .invoke(assetManager, apkPath);
        return assetManager;
    } catch (Throwable th) {
        th.printStackTrace();
    }
    return null;
}

获得了Resource 对象之后,就可以通过函数resources.getDrawable、resources.getString、resources.getLayout 获取图片、字符串、布局文件了。

上一篇 下一篇

猜你喜欢

热点阅读