android插件化 small rules

来源:互联网 发布:淘宝网购酸枣面 编辑:程序博客网 时间:2024/06/01 09:49
为什么要用small:

1:解决65535的问题,不再依赖multidex,拆分dex变的可控

2:small提供了一套插件间的解藕和通信方案,使得独立开发各个模块变得更加容易

3:解藕后,各个业务模块可以独立更新

4:低入侵性,即使后来改用其他的插件化方案也不需要更改代码结构--切换方案弹性更大

 
1: bundle.json 

用来配置需要被加载的插件

{  "uri": "account",  "pkg": "com.wuage.steel.appaccount",  "rules": {    "login": "JumpLoginActivity" },  "type": "lib"}

 

uri: 为插件之间跳转的链接,可以随便定义

pkg:  模块的包名

rules:定义插件须向外暴露的activity的名字

type:定义插件[lib |app],两者之间没有清晰的界限(如果只是定义utils类,做成lib插件,如果是业务模块,页面较多,做成app插件),

          如果不加type属性,url需按照模块名命名lib.* , app.*否则会造成模块加载失败

 

2:如果插件需要被依赖,则不能做成app.*  ,  如果需要被依赖做成lib.*插件;

 

3:公共库放到宿主工程,即module  app 

 

4:所有插件签名必须一致,否则会造成插件加载失败

 

5:跳转规则

 

Small.openUri("uri/rule",context); 用于 跳转到其他插件的activity

Small.createObject("[ fragment |  fragment-v4]" , uri , context) ;   用于加载其他插件的fragment  

 

6:关于更新

 small支持模块动态更新(但不是热更新),通过应用切到后台的方式来kill掉进程来达到模块重新加载-(看起来像热更新,但不是),其实是应用重启了,使用的时候应该注意保存应用状态。

 不建议使用,我们自己做的时候可以考虑其他策略。

 

http://wequick.github.io/small/upgrade/bundles.json (升级json格式)

 

"updates": [    {      "pkg": "net.wequick.example.small.app.about",      "url": "http://wequick.github.io/small/upgrade/libnet_wequick_example_small_app_about.so"    }  ]
对应的包的so下载下来后,会在应用重启后重新被加载。

 

 因为涉及到模块之间的依赖 ,即各个插件间不同版本的依赖 (moduleA v3 版本 依赖 moduleB v4版本,   升级后moduleA v4版本依赖 moduleB v6版本 ),以及app版本号的不同,策略之间的相互配合及各种未考虑的情况可能会导致升级失败。(可以先使用简单的升级策略)

 

 

坑:

1: 不要将百川openaccount sdk放到 插件中

 原因:openaccount sdk中通过反射的方式获取资源(获取到到是宿主的id),从而导致获取不到插件中的资源。

2: 宿主不要依赖任何 插件

原因:compile是将依赖编译成aar,而small在编译的时候会将插件以application的方式编译成so,导致依赖错误。

3: app.*不能被依赖,即不能 compile project(":app.*")

 


1 0