Android 插件框架机制系列文章:
Android 插件框架机制之预热篇
Android 插件框架机制之DroidPlugin


引言

上一篇文章提到过Small,这次就简单说一下Small,这只是一篇入门的文章,如果想深入了解,可以下载官方demo,里面会有详细的示例。

官方demo

我是用AS打开的这个demo,如图所示:

工程结构如图所示:

第一次运行demo会提示如下问题:

这是我们打开AS自带的终端:

输入gradle命令,进行编译,这些需要注意的是的,如果使用的是windows使用./gradlew,如果使用的mac或linux,使用gradle即可:

 gradle buildLib -q复制代码
gradle buildBundle -q复制代码

最后输入这个命令查看插件情况:

 gradle small复制代码

如果此时你的终端有如下显示,则表明正确:

注意,如果你们有使用AS自带的终端,请切到项目目录下输入这些命令
此时再运行,就会看到如下界面了:

入门教学

新建工程

在工程下的build.gradle(注意是project的不是module的),进行修改如下

buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.1.2'classpath 'net.wequick.tools.build:gradle-small:1.1.0-alpha2'//添加依赖}
}allprojects {repositories {jcenter()}
}task clean(type: Delete) {delete rootProject.buildDir
}
//引用 gradle-small 插件
apply plugin: 'net.wequick.small'
small {buildToAssets = falseaarVersion = '1.1.0-alpha2'android {compileSdkVersion = 23buildToolsVersion = "23.0.3"supportVersion = "23.4.0"}
}复制代码

可以像上面讲解demo中提到过的一样,在终端输入:

 gradle small复制代码

看看是否编译正常。

配置宿主

我们新建的这个工程中有一个app module,假设这就是我们的宿主应用,即主应用,我们在该module中新建Application:

public class DeepApp extends Application{public DeepApp(){Small.preSetUp(this);//初始化Small}@Overridepublic void onCreate() {super.onCreate();}
}复制代码

再在 AndroidManifest.xml 中指定这个 Application。

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:name=".DeepApp"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>复制代码

模块插件

我们新建立一个module,选择Phone & Tablet Module,设置 Application/Library name 为 App.main,此时 Module name 自动为 app.main,如图所示:

了确认我们确实启动了插件,我们修改插件的布局文件 app.main > res > layout > activity_main.xml,将 TextView 的内容改为 Hello deep!

编译插件

像我们上面讲解demo中提到的一样,在终端进行编译:

 gradle buildBundle -q复制代码

关联插件

现在我们已经生成了插件并内置到宿主包中,要启动插件,我们需要配置一个路由来指向它。

右键 app 模块,New > Folder > Assets Folder 新建 assets 目录:

在bundle.json文件中添加如下代码:

{"version": "1.0.0","bundles": [{"uri": "main","pkg": "deep.appmain"},]
}复制代码
  • version,是 bundle.json 文件格式版本,目前始终为 1.0.0
  • bundles,插件数组
  • uri,插件唯一ID
  • pkg,插件包名

    运行

    然后回到app module中,找到MainActivity,重写onStart():

        Small.setUp(this, new Small.OnCompleteListener() {@Overridepublic void onComplete() {Small.openUri("main", MainActivity.this);}});复制代码

    main就是刚才bundle.json中uri的参数。说明我们要启动main这个module的MainActivity。
    由于我之前做过别的设置,所以发现点击运行报错了,这时我们需要清除之前的编译:

    gradle cleanLib -q复制代码

    然后重新编译,即可运行。

总结

所有关于Small的讲解,在官方文档上说的非常详细,我之前也没有用过,但是前几天总结插件框架的时候发现的这个,就去看了看,不算很难上手,而且Android IOS都会支持。需要的朋友,建议利用官方文档入门,然后在分析一下他的demo即可,涵盖的功能很全面。
这里再放一下地址:
官方文档
官方demo

Android 插件框架机制之Small相关推荐

  1. android插件框架机制的选择,Android插件开发初探——基础篇

    Android插件开发初探 对于Android的插件化其实已经讨论已久了,但是市面上还没有非常靠谱成熟的插件框架供我们使用.这里我们就尝试性的对比一下Java中,我们使用插件化该是一个怎么样的流程,且 ...

  2. 腾讯零反射全动态Android插件框架Shadow解析

    简介 最近几年,腾讯对于开源事业也是越来越支持,今天要说的就是在腾讯被广泛使用的Shadow框架,一个经过线上亿级用户量检验的反射全动态Android插件框架. 首先,让我们来看一下官方对于Shado ...

  3. Android 插件框架实现思路及原理

    插件框架实现思路及原理 一.技术可行性 a) apk的安装处理流程 i. apk会copy到/data/app: ii. 解压apk中的class.dex,并对其进行优化,获得odex(即JIT).最 ...

  4. 滴滴开源Android插件框架

     登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 返回通知列表 下一条 上一条 分享资讯传PPT/文档提问题写博客传资源创建项目创建代码片 wz ...

  5. 基于Proxy思想的Android插件框架

    本文所有代码托管在Github:android-plugin 意义 研究插件框架的意义在于以下几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级,减小网络流量 静默升级,用户无感知情况 ...

  6. Android插件框架VirtualAPK

    VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性. 功能完备 支持几乎所有的Android特性: 四大组件方面 四大组件均不需要在宿主manifest中预注册,每个组件都有 ...

  7. android 常用框架整理

    文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...

  8. Android插件实例——360 DroidPlugin详解

    在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比如我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意很好.新浪一收购GOOGLE,是不是新浪就变成老大了?你从哪儿弄 ...

  9. Android流行框架(二)

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

最新文章

  1. MaxCompute5个窗口函数限制
  2. java活动安排_贪心法求解活动安排(java实现)
  3. Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取
  4. JDK中DNS缓存的分析
  5. PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作
  6. 小程序开发(10)-之热力图解决方案、手绘图
  7. syslog打印不带等级_linux下syslog使用说明
  8. python调用脚本_3种python调用其他脚本的方法
  9. HDU2527 Safe Or Unsafe【哈夫曼编码】
  10. ios微信下vue项目组件切换并自动播放音频的解决方案
  11. 2019电赛巡线机器人总结
  12. 计算机图像处理入门基础知识——色域,色度图,色彩空间和色彩管理
  13. 解决win10安装portal v13/v15要求反复重启问题
  14. SSM整合(Spring+SpringMVC+MyBatis)
  15. 不需要抓包分析、简单粗暴的模拟校园网登录方法——基于python playwright
  16. python创建列表以及列表的操作(插入-删除-索引-交换元素值-切片)
  17. vmware虚拟机安装windows server 2012 绕过秘钥安装——P2
  18. 单片机反相器_TTL反相器的基本电路
  19. Vue--解决官网网站404的问题
  20. 怎么做一个可执行的生产计划排程?

热门文章

  1. WPF 3D基础学习 - 画布、相机、Model3D(1)
  2. C++ 引用 Demo - Win32 版
  3. Win32 API 打开另一个进程
  4. DES算法详解和代码 - IP置换
  5. 图解Windows下使用SSH Secure Shell Client远程连接Linux
  6. 工欲善其事必先利其器——web调试工具firebug
  7. 数据库三范式的理解(引用其他网友)
  8. 希尔排序(shellsort)算法实现
  9. play mysql_play framework 2.0 使用 mysql
  10. 神经分类行为中的引力与斥力