个人动态加载apk写法,还有问题请提出
在插件中加入唯一ID标识,以免资源冲突
aaptOptions {
additionalParameters '--allow-reserved-package-id', '--package-id', '0x65'
}
资源加载使用父类的Assets插入插件的资源,以免资源等各种问题,上面必须唯一标识,不然资源混乱
assertManagerObj = context.getAssets();
Method addAssetPathMethod = assetManagerClass.getMethod("addAssetPath", String.class);
addAssetPathMethod.setAccessible(true);
int cookie = (int) addAssetPathMethod.invoke(assertManagerObj, PluginFile1.getAbsolutePath());
AndroidManifest = assertManagerObj.openXmlResourceParser(cookie, "AndroidManifest.xml");
插入插件主题,好像可以去掉
initInnerRIdValue(theme, packageInfo.packageName + ".R$style", true);
private void initInnerRIdValue(Resources.Theme theme, String rStrnig, boolean force) {
try {
Class<?> cls = dexClassLoader.loadClass(rStrnig);
Field[] field = cls.getDeclaredFields();
for (Field field1 : field) {
int value = field1.getInt(null);
theme.applyStyle(value, force);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
如果宿主有框架则可以用
compileOnly 不打包进插件中
可以解决避免控制大小内存,和依赖冲突