Android 外掛框架機制之Small

mymdeep發表於2017-02-28

Android 外掛框架機制系列文章:
Android 外掛框架機制之預熱篇
Android 外掛框架機制之DroidPlugin


引言

上一篇文章提到過Small,這次就簡單說一下Small,這只是一篇入門的文章,如果想深入瞭解,可以下載官方demo,裡面會有詳細的示例。

官方demo

我是用AS開啟的這個demo,如圖所示:

Android 外掛框架機制之Small

工程結構如圖所示:

Android 外掛框架機制之Small

第一次執行demo會提示如下問題:

Android 外掛框架機制之Small

這是我們開啟AS自帶的終端:

Android 外掛框架機制之Small

輸入gradle命令,進行編譯,這些需要注意的是的,如果使用的是windows使用./gradlew,如果使用的mac或linux,使用gradle即可:

 gradle buildLib -q複製程式碼
gradle buildBundle -q複製程式碼

最後輸入這個命令檢視外掛情況:

 gradle small複製程式碼

如果此時你的終端有如下顯示,則表明正確:

Android 外掛框架機制之Small

注意,如果你們有使用AS自帶的終端,請切到專案目錄下輸入這些命令
此時再執行,就會看到如下介面了:

Android 外掛框架機制之Small

入門教學

新建工程

在工程下的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,如圖所示:

Android 外掛框架機制之Small

了確認我們確實啟動了外掛,我們修改外掛的佈局檔案 app.main > res > layout > activity_main.xml,將 TextView 的內容改為 Hello deep!

編譯外掛

像我們上面講解demo中提到的一樣,在終端進行編譯:

 gradle buildBundle -q複製程式碼

關聯外掛

現在我們已經生成了外掛並內建到宿主包中,要啟動外掛,我們需要配置一個路由來指向它。

右鍵 app 模組,New > Folder > Assets Folder 新建 assets 目錄:

Android 外掛框架機制之Small

在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

相關文章