PhoneGap Plugin(2):加入library與進階設定

上一個單元裡,我們談到如何建立一個基本的 Plugin。不過當你的需求越複雜,就會發現還有更多東西是我們需要知道的。比如說,當我們要使用系統不會自動載入的 library 時,該從那裡進行設定?當我希望我的 plugin 在程式初始化時就自動執行,該如何設定?這些經常會使用到的進階設定將在本單元做說明。

在 Android 加入 library

在原生程式中,控制 library 載入的是 build.gradle 設定檔。所以如果我們的 Plugin 需要使用 library,一樣要撰寫 build.gradle。撰寫的方式和原生程式一樣,所以詳細的撰寫方式可以參照 Android 文件。下面我提供二種範例,第 2 行是使用官方的 library 庫;第 3 行是載入第三方的 library,而 5-9 行則是指明 library 的儲存位置。

dependencies {
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile(name: 'myLibrary', ext: 'aar')
}
repositories {
    flatDir {
        dirs 'libs'
    }
}

接著我們要回到 plugin.xml,告訴系統記得把 build.gradle 以及 library 的相關檔案加入到專案中。在 src 裡指定好來源位置即可。

...
    <platform name="android">
        ...
        <framework src="src/android/build.gradle" custom="true" type="gradleReference" />
        <source-file src="src/android/sdk/myLibrary.aar" target-dir="libs"/>
    </platform>
    ...

在 iOS 加入 framework

iOS 要加入 library 就更容易了,不需要撰寫額外的檔案,直接設定 plugin.xml 即可。第 37 行是載入第三方的 library,指定好來源位置後只要加入 framework=“true” 的屬性即可。使用官方的 library 則是像 38 行宣告即可。

...
    <platform name="iOS">
        ...
        <source-file src="src/ios/libGoogleAnalyticsServices.a" framework="true" />
        <framework src="SystemConfiguration.framework" />
    </platform>
    ...

初始化自動執行 Plugin

如果你希望在 app 載入時,自動執行 plugin,可以在 plugin.xml 的 feature 標籤下加入第 21 行的 onload 設定。Android 和 iOS 的設定方式均相同。

...
    <platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="pluginName">
                






            </feature>
        </config-file>
    </platform>
    ...

加入設定後,會使 Android 支援下面二個方法。

public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        //do your work
    }
    protected void pluginInitialize() {
        //do your work
    }

在 iOS 則使用 pluginInitialize 的方法。

/********* CDVpluginName.m Cordova Plugin Implementation *******/
...
- (void)pluginInitialize
{
        /* do your work */
}

設定 Plugin 支援的版本

如果你希望避免 Plugin 在不支援的 Cordova 版本下運行,可以在 plugin.xml 加入下面的語法。

...
    <engines>
        <engine name="cordova" version=">=5.0.0" />
    </engines>
    ...

將 Android 編譯成 x86 版本

雖然很少見,但有些 Android 的手機是採用 Intel 的 CPU,此時你就會發現你所撰寫的 APP 無法安裝到這樣的手機上。其實只要編譯出 x86 版本的 apk 即可。在 build.gradle 設定檔加入下面的設定,就可以編譯出不同的版本來。

ext.cdvBuildMultipleApks = true