Android 插件框架机制之Small
Android 插件框架机制系列文章:
Android 插件框架机制之预热篇
引言
上一篇文章提到过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 = false
aarVersion = '1.1.0-alpha2'
android {
compileSdkVersion = 23
buildToolsVersion = "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
}
@Override
public void onCreate() {
super.onCreate();
}
}
再在 AndroidManifest.xml 中指定这个 Application。
<application
android: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() {
@Override
public void onComplete() {
Small.openUri("main", MainActivity.this);
}
});
main就是刚才bundle.json中uri的参数。说明我们要启动main这个module的MainActivity。
由于我之前做过别的设置,所以发现点击运行报错了,这时我们需要清除之前的编译:
gradle cleanLib -q
然后重新编译,即可运行。
总结
所有关于Small的讲解,在官方文档上说的非常详细,我之前也没有用过,但是前几天总结插件框架的时候发现的这个,就去看了看,不算很难上手,而且Android IOS都会支持。需要的朋友,建议利用官方文档入门,然后在分析一下他的demo即可,涵盖的功能很全面。
这里再放一下地址:
官方文档
官方demo