Android 插件框架机制之Small
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相关推荐
- android插件框架机制的选择,Android插件开发初探——基础篇
Android插件开发初探 对于Android的插件化其实已经讨论已久了,但是市面上还没有非常靠谱成熟的插件框架供我们使用.这里我们就尝试性的对比一下Java中,我们使用插件化该是一个怎么样的流程,且 ...
- 腾讯零反射全动态Android插件框架Shadow解析
简介 最近几年,腾讯对于开源事业也是越来越支持,今天要说的就是在腾讯被广泛使用的Shadow框架,一个经过线上亿级用户量检验的反射全动态Android插件框架. 首先,让我们来看一下官方对于Shado ...
- Android 插件框架实现思路及原理
插件框架实现思路及原理 一.技术可行性 a) apk的安装处理流程 i. apk会copy到/data/app: ii. 解压apk中的class.dex,并对其进行优化,获得odex(即JIT).最 ...
- 滴滴开源Android插件框架
登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 返回通知列表 下一条 上一条 分享资讯传PPT/文档提问题写博客传资源创建项目创建代码片 wz ...
- 基于Proxy思想的Android插件框架
本文所有代码托管在Github:android-plugin 意义 研究插件框架的意义在于以下几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级,减小网络流量 静默升级,用户无感知情况 ...
- Android插件框架VirtualAPK
VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性. 功能完备 支持几乎所有的Android特性: 四大组件方面 四大组件均不需要在宿主manifest中预注册,每个组件都有 ...
- android 常用框架整理
文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...
- Android插件实例——360 DroidPlugin详解
在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比如我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意很好.新浪一收购GOOGLE,是不是新浪就变成老大了?你从哪儿弄 ...
- Android流行框架(二)
第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...
最新文章
- MaxCompute5个窗口函数限制
- java活动安排_贪心法求解活动安排(java实现)
- Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取
- JDK中DNS缓存的分析
- PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作
- 小程序开发(10)-之热力图解决方案、手绘图
- syslog打印不带等级_linux下syslog使用说明
- python调用脚本_3种python调用其他脚本的方法
- HDU2527 Safe Or Unsafe【哈夫曼编码】
- ios微信下vue项目组件切换并自动播放音频的解决方案
- 2019电赛巡线机器人总结
- 计算机图像处理入门基础知识——色域,色度图,色彩空间和色彩管理
- 解决win10安装portal v13/v15要求反复重启问题
- SSM整合(Spring+SpringMVC+MyBatis)
- 不需要抓包分析、简单粗暴的模拟校园网登录方法——基于python playwright
- python创建列表以及列表的操作(插入-删除-索引-交换元素值-切片)
- vmware虚拟机安装windows server 2012 绕过秘钥安装——P2
- 单片机反相器_TTL反相器的基本电路
- Vue--解决官网网站404的问题
- 怎么做一个可执行的生产计划排程?