android插件化 small rules

为什么要用small:

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

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

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

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

 
1: bundle.json 

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

{
  "uri": "account",
  "pkg": "com.***.***.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.*")

 

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值