文章参考来源:
small框架官网: https://github.com/wequick/Small/tree/master/Android
gradle版本,插件版本介绍:https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin
1.新建宿主工程
修改项目下的gradle配置:如下
添加依赖,应用插件,添加编译任务;
特别注意:Small插件自身与gradle兼容问题,gradle插件版本和版本需要不能随意配置;
个人实践:插件版本不能超过2.3.0,版本不要是4.6
由于加载插件需要对Application注入一些方法,我们对包名目录 app > java > com.example.mysmall 右键 New > Java Class 来新建一个Application,并在AndroidManifest.xml文件中指定application名字 android:name=".SmallApplication"
2、新建插件模块
右键 app 模块 > New > Module,创建一个应用模块 Phone & Tablet Module或者Android Library;
需注意两点,如下图
1) 模块名形如:app.*, lib.*或者web.*,插件用于识别查找
2) 包名必须为*.app.*
3、编译插件
在 Terminal 面板,先编译公共库 : gradlew buildLib
再编译 插件: gradlew buildBundle
4、启动插件
右键 app 模块,New > Folder > Assets Folder 新建 assets 目录:
再右键生成的 assets 目录,New > File 新建路由配置文件 bundle.json
回到宿主的 app > java > com.example.mysmall > MainActivity,在 onStart 方法中我们通过上述配置的 uri 来启动 app.main 插件
5、运行编译运行主app即可
6、热更新
Small类中方法:
public static boolean updateManifest(JSONObject manifest, boolean force): force表示更新bundle.json文件
public static Bundle getBundle(String bundleName): 获取pkg = bundleName插件信息
Bundle 类中方法:public File getPatchFile():获取插件文件
热更新的实质是新文件替换旧文件;Small框架,优先加载Download目录下的文件
Small插件文件位置到现在为止,使用Small的一个项目已经可以运行了;从自己折腾使用这个框架以及对插件化热更新框架认知来看
1)插件化,热更新的实质都是动态加载
2)动态加载,需要解决资源,类加载,四大组件启动及生命周期,资源
3)由于动态加载依赖现有系统基础上进行解决2问题,所以很多兼容性、稳定性问题
4)从android技术发展到现在,其优点基本只有快速更新、修复apk功能;
我自己认为其并有减少模块耦合的作用;但是非插件化的模块间耦合是项目内部设计的,认为考虑各方面优势所作出的取舍;而插件化的耦合是强制的,所以这并不是优点,而且是不得已而为之,造成项目总体积变大
网友评论