在Android 插件化技術中(宿主app和插件app設置相同的sharedUserId),動態加載apk有兩種方式:app
下面介紹幾種常見的方法獲取資源以及代碼的方法。函數
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 獲取圖片、字符串、佈局文件了。spa