插件化介绍:
插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件。支持插件化的app可以在运行时加载和运行插件,这样便可以将app中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展。想要实现插件化,主要是解决下面三个问题:
- 插件中代码的加载和与主工程的互相调用
- 插件中资源的加载和与主工程的互相访问
- 四大组件生命周期的管理
插件化好处
宿主和插件分开编译
编译时只需要编译宿主app,插件app是在编译好后下发到宿主app里的。
并发开发
宿主app什么时候发布版本跟插件app什么时候开发完没有关系,宿主app只要开发完并且为插件app提供一个入口就可以了。
动态更新插件
插件app在开发完后下发到宿主app里,点击相应的入口就可以跳转到最新版的插件app了。
按需下载模块
解决方法数或变量数爆棚(65536)
直接上代码吧:
//得到packageManager来获取包信息
PackageManager packageManager = context.getPackageManager();
//参数一是apk的路径,参数二是希望得到的内容
PackageInfo packageInfo = packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
//得到插件app的入口activity名称
ActivityInfo[] lists = packageInfo.activities;
//得到插件app的入口activity名称
entryName = packageInfo.activities[0].name;
//由于构建resources必须要传入AssetManager,这里先构建一个AssetManager
try {
AssetManager assetManager = AssetManager.class.newInstance();
Method addAssetPath = AssetManager.class.getMethod("addAssetPath", String.class);
addAssetPath.invoke(assetManager, path);
resources = new Resources(assetManager, context.getResources().getDisplayMetrics(), context.getResources().getConfiguration());
} catch (Exception ignored) {
}