Android插件化之Small第二弹

2017-07-19  本文已影响0人  懒癌患者2018

1.公共库插件

在Small框架中一般可以将插件分为业务插件和公共库插件,一般情况下,公共库插件module name的命名方式是lib.,对应的package name为.lib*。这是small推荐的命名方式,这样就不用做其他额外配置了,然后只要在宿主module的bundle.json中配置声明就能正常工作了。

{
      "pkg": "com.example.liblogic"
}

因为这只是一个公共库插件,所有不需要配置uri。为了开发阶段的方便,业务插件依赖公共库插件的依赖关系还是要配置的,否则会找不到对应的类,但是在small打包时,这个依赖关系时无用的,就是说就算module间的依赖关系不配置,最终打包出来的程序一样能正常运行。

有时因为一些特殊情况,公共库的命名不能用small推荐的方式,那么就要做一些特殊的配置。在整个项目的build.gradle中添加配置如下,

small {
    aarVersion = '1.2.0-alpha6'
    buildToAssets = false
    strictSplitResources = true
    bundles 'lib','logic2'
}

上面是small的DSL语言,其中bundles这个方法就是用来声明插件,上面就是声明了logic2这个module是一个lib(公共库插件类型)的插件。
然后在bundle.json中再声明如下

{
      "pkg": "com.example.logic2",
      "type": "lib"
    }

这样就可以正常使用logic2这个公共库插件了。最后我们编译一下,就能看到那个熟悉的表格

QQ20170719-154620.png

2.Small进阶知识

1.Small DSL

DSL 即 Domain Specific Language,领域专用语言。Small也有自己的一套标准,上小节已经使用过了。因为属性方法并不多,有些也不是必须要配置的,所以并不算难。不过这里有个坑,Small DSL的语法会根据gradle-small的版本变化而变化,比如官网介绍strictSplicResources
这个属性其实并没有,真正的属性名称叫做strictSplitResources,就类似这样的问题,那怎么办呢?开源项目嘛,去github主页上看源码...

Small/Android/DevSample/buildSrc/src/main/groovy/net/wequick/gradle/RootExtension.groovy

RootExtension.groovy这个文件定义了Small DSL的语法。

2.插件路由

关于插件路由,就是bundle.json中的配置信息。之前我们配置一个业务插件只配置了uri和package,这个情况下,我们根据uri只会打开对应业务插件中被定义了launch的activity,有时会业务需求要打开这个module中的另外一个activity,这种情况下,bundle.json需要这么配置

{
      "uri": "alarmbox",
      "pkg": "com.example.appalarmbox",
      "rules":{
        "other":"Other"
      }
    }

这会比一般情况多设置一个rules。在这个module的主包下有一个OtherActivity,我们会根据“alarmbox/other”这个uri去启动OtherActivity。关于参数问题,在一般android开发中Activity之间进行跳转通过Intent,Intent是可以带参数的,那么在Small中我们这么传参数呢?其实很简单,就跟网页的传参方式一样,只需要在uri后面带上就行。

Small.openUri(uri+"?id=1&title=sdk",MainActivity.this);

那么目标Activity怎么获取?

Uri uri = Small.getUri(this);
        Log.i("info",uri.toString());
        String id = uri.getQueryParameter("id");
        String title = uri.getQueryParameter("title");
        Log.i("info","id="+id+",title="+title);

3.自定义资源ID分段

Small在整合插件资源的过程,为避免资源ID冲突,需要为每个插件分配一个ID段。我们知道默认程序的ID段为 0x7f。由于系统使用了 0x00,0x01,0x02。因此插件允许的范围在 [0x03, 0x7e] 之间。
但是有些特殊情况,比如一些特殊机型的系统会占用某个内存,那么就会产生异常,这种情况下就需要对内存分配地址重新调整。

QQ20170719-164534.png

这是我们不做任何配置的编译结果。我们在logic2这个modlue的gradle.build中添加

ext{
    packageId = 0x88
}

然后再编译下发现logic2这个module分配的id首地址变成了0x88,如图

QQ20170719-165007.png

4.其他

关于Small进阶还有编译选项,宿主分身模块的方面问题,这个暂时在项目中没有用到,本着“不使用,无发言权”的原则,下次用到再总结。

3.总结

关于Small的基础研究将告一段落,下阶段将进行实际项目的改造工作,一定会遇到不少坑,到时会和大家进行分享。谢谢,再见!

Demo地址:https://github.com/loubinfeng2013/SmallProject

上一篇下一篇

猜你喜欢

热点阅读