Android开源框架Android知识android技术专栏

Small插件化框架的初步使用

2017-03-24  本文已影响172人  Elder

一、来龙去脉

由于公司安排了一个调研腾讯新闻App中读书模块功能是如何实现的,对于我这种小菜鸟来说第一时间求助了涛哥(哈哈涛哥是谁...无法解答一个答案啊),他分析了一下可能是ReactNative框架实现的,于是查阅了大量资料准备系统学习ReactNative框架,学习这种未知技术还是非常有趣和痛苦的(大家都懂的)。这里大家可以看下ReactNative的中文网站简单写一个HelloWorld还是蛮简单的啊,这里对中国的大陆的各种墙深恶痛绝下-_-!但是突然突发奇想要不先反编译一下腾讯新闻App看看,会不会找到一些灵感呢。结果突然间有了意外收获啊!!!
在apk的assets/plugin文件夹下竟然看到了这个,震惊了一下下,所以猜想它应该是动态加载了腾讯阅读的功能模块。


所以就查了一下,发现自己弱爆了,这就是所谓的插件化开发的技术啊。推荐一篇博文名字起的还是非常霸气的“Android插件化:从入门到放弃”,文章最后也指出Android开发的动态化加载还是非常看好ReactNative的,所以以后一定好好系统学习ReactNative。
好了说了一大堆总算引出我们今天的主角Small插件化框架了,这里是它的GitHub地址,网上关于它的介绍大家可以自行Google,我这里只是简单的介绍一下它的基本使用方法,好让我们开始吧。

二、准备工作

基于官方文档你会学习到它的一些基本操作,这里我简单说一下设置Gradle时应该注意的地方。


这是Project.gradle的整体配置情况,这里说明一下buildToAssets默认是false,在编译插件的时候默认会将插件编译成.so文件保存到项目中,如果设置为true时就会将插件编译成apk文件保存在assets文件夹中。
编译完成后,需要在Terminal命令行中运行gradlew small,最后出现如下所示就代表配置已经没问题了
(这里吐槽一下公司的网,编译一个多小时有木有!!!)

三、基本使用

Step 1:配置宿主

宿主也就是我们的载入其它插件的载体,宿主不应该建立写入业务逻辑只应是单单成为插件的载体(参见使用Small框架的建议

public class SmallApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        Small.preSetUp(this);
        Small.setLoadFromAssets(BuildConfig.LOAD_FROM_ASSETS);
    }
}

这里由于我要将插件编译成apk保存在assets文件夹中,所以应提前建立assets文件夹。

Step 2: 创建插件模块

右键 app 模块 > New > Module:

这里简单说明一下如果是应用插件都以app.开头,如果是公共库插件都已lib.开头。

Step 3: 编译插件


同样如果出现编译成功即可。

Step 4: 启动配置插件

在assets文件夹下新建bundle.json文件并配置如下:

{
 "version": "1.0.0",
 "bundles": [
   {
     "uri": "main",
     "pkg": "com.example.appmain"
   }
 ]
}

回到宿主的 app > java > com.example.mysmall > MainActivity,在 onStart 方法中我们通过上述配置的 uri 来启动 app.main 插件:

@Override
protected void onStart() {
    super.onStart();
    Small.setUp(this, new Small.OnCompleteListener() {
        @Override
        public void onComplete() {
            Small.openUri("main", MainActivity.this);
        }
    });
}

Step 5: 运行宿主

如果你能出现如图所示的情况,恭喜你已经实现了框架的基本使用。我相信大家跟着文档都可以轻松实现,但这里我想跟大家重点分享的是如何合入已编译好的功能插件化。

四、合入自有功能模块

Step 1: 导入模块

这里需要注意命名的时候也是以app.*开头代笔是应用插件。


Step 2: 将导入模块的权限拷入到宿主的清单文件中

Step 3: 配置bundle.json文件

将最新加入的模块编入文件中


Step 4: 编译插件

命令还是上面那些,这里需要注意一下,每次重新编译的时候建议大家先执行gradlew cleanLib -q清除之前的编译,总觉得这样保险一些。

gradlew cleanLib -q
gradlew buildLib -q
gradlew buildBundle -q
gradlew small

Step 5: 最后运行插件

运行的效果如下:
![](https://github.com/xunuosi/img/blob/master/blog/jianshu/Small/1.gif?raw=true =80*60)

写在最后

这个即是我使用Small框架合入自身功能模块的操作流程,如果有不对的地方希望各位同学及时指正啊。后续更新该框架的使用,在公司项目中真正使用的时候会遇到哪些坑呢,想想就酸爽啊-_-!
最后的最后奉上这个Demo的GitHub地址有兴趣的同学可以看下啊。

上一篇下一篇

猜你喜欢

热点阅读