Android 插件框架機(jī)制系列文章:
Android 插件框架機(jī)制之預(yù)熱篇
引言
上一篇文章提到過(guò)Small,這次就簡(jiǎn)單說(shuō)一下Small,這只是一篇入門(mén)的文章,如果想深入了解,可以下載官方demo,里面會(huì)有詳細(xì)的示例。
官方demo
我是用AS打開(kāi)的這個(gè)demo,如圖所示:

工程結(jié)構(gòu)如圖所示:

第一次運(yùn)行demo會(huì)提示如下問(wèn)題:

這是我們打開(kāi)AS自帶的終端:

輸入gradle命令,進(jìn)行編譯,這些需要注意的是的,如果使用的是windows使用./gradlew,如果使用的mac或linux,使用gradle即可:
gradle buildLib -q
gradle buildBundle -q
最后輸入這個(gè)命令查看插件情況:
gradle small
如果此時(shí)你的終端有如下顯示,則表明正確:

注意,如果你們有使用AS自帶的終端,請(qǐng)切到項(xiàng)目目錄下輸入這些命令
此時(shí)再運(yùn)行,就會(huì)看到如下界面了:

入門(mén)教學(xué)
新建工程
在工程下的build.gradle(注意是project的不是module的),進(jìn)行修改如下
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中提到過(guò)的一樣,在終端輸入:
gradle small
看看是否編譯正常。
配置宿主
我們新建的這個(gè)工程中有一個(gè)app module,假設(shè)這就是我們的宿主應(yīng)用,即主應(yīng)用,我們?cè)谠搈odule中新建Application:
public class DeepApp extends Application{
public DeepApp(){
Small.preSetUp(this);//初始化Small
}
@Override
public void onCreate() {
super.onCreate();
}
}
再在 AndroidManifest.xml 中指定這個(gè) 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>
模塊插件
我們新建立一個(gè)module,選擇Phone & Tablet Module,設(shè)置 Application/Library name 為 App.main,此時(shí) Module name 自動(dòng)為 app.main,如圖所示:

了確認(rèn)我們確實(shí)啟動(dòng)了插件,我們修改插件的布局文件 app.main > res > layout > activity_main.xml,將 TextView 的內(nèi)容改為 Hello deep!
編譯插件
像我們上面講解demo中提到的一樣,在終端進(jìn)行編譯:
gradle buildBundle -q
關(guān)聯(lián)插件
現(xiàn)在我們已經(jīng)生成了插件并內(nèi)置到宿主包中,要啟動(dòng)插件,我們需要配置一個(gè)路由來(lái)指向它。
右鍵 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,插件數(shù)組
- uri,插件唯一ID
- pkg,插件包名
運(yùn)行
然后回到app module中,找到MainActivity,重寫(xiě)onStart():
Small.setUp(this, new Small.OnCompleteListener() {
@Override
public void onComplete() {
Small.openUri("main", MainActivity.this);
}
});
main就是剛才bundle.json中uri的參數(shù)。說(shuō)明我們要啟動(dòng)main這個(gè)module的MainActivity。
由于我之前做過(guò)別的設(shè)置,所以發(fā)現(xiàn)點(diǎn)擊運(yùn)行報(bào)錯(cuò)了,這時(shí)我們需要清除之前的編譯:
gradle cleanLib -q
然后重新編譯,即可運(yùn)行。
總結(jié)
所有關(guān)于Small的講解,在官方文檔上說(shuō)的非常詳細(xì),我之前也沒(méi)有用過(guò),但是前幾天總結(jié)插件框架的時(shí)候發(fā)現(xiàn)的這個(gè),就去看了看,不算很難上手,而且Android IOS都會(huì)支持。需要的朋友,建議利用官方文檔入門(mén),然后在分析一下他的demo即可,涵蓋的功能很全面。
這里再放一下地址:
官方文檔
官方demo