cordova自定義插件開發(fā)

一泄朴、插件內(nèi)容詳解

插件gitee地址:https://gitee.com/liangyehao/cordova-plugin-calllnative

插件目錄結(jié)構(gòu)

cordova-plugin-callnative
│  package.json
│  plugin.xml
│
├─src
│  └─android
│          CallNative.java
│
└─www
        callnative.js

功能實現(xiàn)相關(guān)

  • CallNative.java
  • callnative.js

注冊到cordova相關(guān)

  • plugin.xml
  • pakage.json

1茫死、CallNative.java

核心是繼承CordovaPlugin 且重寫execute方法

package com.liang.plugins;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

public class CallNative extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        // 自定義實現(xiàn)
        // callbackContext.success(); 與插件js中的exec方法success參數(shù)對應
        // callbackContext.error(); 與插件js中的exec方法error參數(shù)對應
        return true;
    }
}

2勾笆、callnative.js

var exec = require('cordova/exec');
/**
exports.coolMethod:導出名叫coolMethod的函數(shù)最冰,其他js在使用插件時調(diào)用[clobber].[functionName]
調(diào)用示例

// 先定義回調(diào)函數(shù)狭魂,
function success(res){
    console.log("success",res)
}
function error(res){
    console.log("error",res)
}
// 調(diào)用自定義插件[clobber].[functionName]
cordova.plugins.CallNative.coolMethod('參數(shù)',success,error)

*/


exports.coolMethod = function (arg0, success, error) {
    /* @param {Function} success    The success callback
     * @param {Function} fail       The fail callback
     * @param {String} service      The name of the service to use,插件java文件類名
     * @param {String} action       Action to be run in cordova 傳入到java方法的action值
     * @param {String[]} [args]     Zero or more arguments to pass to the method
       [arg]對應的方法為:execute(String action, JSONArray args, CallbackContext callbackContext)
     */
    exec(success, error, 'CallNative', 'action', [arg0]);
};

3蛛枚、plugin.xml

<?xml version='1.0' encoding='utf-8'?>
<!--id: 插件id,會寫入到cordova_plugins.js中 -->
<plugin xmlns:android="http://schemas.android.com/apk/res/android" id="cordova-plugin-callnative"
    version="1.0.0"
    xmlns="http://apache.org/cordova/ns/plugins/1.0">
    <name>CallNative</name>
    <!-- js-module相關(guān)內(nèi)容在安裝插件時會被寫入到cordova項目的cordova_plugins.js文件  -->
    <!-- src:自定義開發(fā)的插件js文件路徑 -->
    <js-module name="callnative" src="www/callnative.js">
        <!--target:js調(diào)用插件時的引用對象 -->
        <clobbers target="cordova.plugins.CallNative" />
    </js-module>
    <platform name="android">
        <!-- 安裝插件時脸哀,config-file 內(nèi)容會被寫入到安卓項目的config.xml內(nèi)(即將feature標簽內(nèi)容原樣寫入) -->
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="CallNative">
                <!-- value:cordova安裝插件成功后蹦浦,自定義插件java部分的全限定類名 -->
                <param name="android-package" value="com.liang.plugins.CallNative" />
            </feature>
        </config-file>
        <!-- src:自定義開發(fā)的插件java文件路徑
        注意:java文件包名應該跟target-dir相對應,例如此處java文件最終會被放在src/com/liang/plugins目錄下撞蜂,
        所以java類的包名應該定義為com.liang.plugins
         -->
        <!-- target-dir:java文件寫入到cordova項目時的目錄 -->
        <source-file src="src/android/CallNative.java"
            target-dir="src/com/liang/plugins" />
    </platform>
</plugin>

4盲镶、package.json

核心是版本號,自定義就好:"version": "1.0.0",
name和id與plugin.xml中的plugin標簽id屬性的值保持一致即可

{
  "name": "cordova-plugin-callnative",
  "version": "1.0.0",
  "description": "",
  "cordova": {
    "id": "cordova-plugin-callnative",
    "platforms": [
      "android"
    ]
  },
  "keywords": [
    "ecosystem:cordova",
    "cordova-android"
  ],
  "author": "lyh",
  "license": "ISC"
}

二蝌诡、示例步驟

1溉贿、根據(jù)一、的介紹創(chuàng)建插件項目cordova-plugin-callnative

2浦旱、創(chuàng)建測試cordova項目

  • 創(chuàng)建項目
cordova create plugin-test com.liang.plugintest pluginTest
  • 添加android平臺
cordova platforms add android
  • 進入cordova項目目錄
cd plugin-test
  • 安裝創(chuàng)建好的自定義插件
    注意:我此處插件項目目錄與cordova測試項目目錄同級宇色,所以使用../相對路徑
cordova plugin add ../cordova-plugin-callnative/

3、安裝成功后測試cordova項目變化

注意:如果項目已經(jīng)在android studio打開颁湖,文件加載可能存在延遲宣蠕,手動刷新一下項目reload from disk

-{項目目錄} \platforms\android\platform_www

platform_www
│  cordova.js
│  cordova_plugins.js # 里面新增注冊了自定義插件信息
│
└─plugins 
    └─cordova-plugin-callnative # 新增,自定義插件
        └─www
                callnative.js
  • {項目目錄}\platforms\android\app\src\main\assets\www
www
│  cordova.js
│  cordova_plugins.js # 里面新增注冊了自定義插件信息
│  index.html
│
├─css
│      index.css
│
├─img
│      logo.png
│
├─js
│      index.js
│
└─plugins
    └─cordova-plugin-callnative # 新增甥捺,自定義插件
        └─www
                callnative.js
  • {項目目錄}\platforms\android\app\src\main\java
java
└─com
    └─liang
        ├─plugins # 新增植影,自定義插件java文件
        │      CallNative.java
        │
        └─plugintest
                MainActivity.java
  • {項目目錄}\platforms\android\android.json
    config_munge
    modules
    plugin_metadata
    新增插件相關(guān)內(nèi)容

  • {項目目錄}\platforms\android\app\src\main\res\xml\config.xml
    新增

    <feature name="CallNative">
        <param name="android-package" value="com.liang.plugins.CallNative" />
    </feature>

與plugin.xml中定義的內(nèi)容對應

4窜醉、調(diào)用測試

    function success(res){
        console.log("調(diào)用成功",res)
    }
    function error(e){
        console.log("調(diào)用失敗",e)
    }
  
    // 調(diào)用test函數(shù)測試
    function test(){
      cordova.plugins.CallNative.coolMethod('action',success,success);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帖渠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肛度,更是在濱河造成了極大的恐慌羡微,老刑警劉巖谷饿,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妈倔,居然都是意外死亡博投,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門盯蝴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅哗,“玉大人,你說我怎么就攤上這事捧挺÷敲啵” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵闽烙,是天一觀的道長翅睛。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么捕发? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任疏旨,我火速辦了婚禮,結(jié)果婚禮上扎酷,老公的妹妹穿的比我還像新娘檐涝。我一直安慰自己,他們只是感情好法挨,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布谁榜。 她就那樣靜靜地躺著,像睡著了一般坷剧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喊暖,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天惫企,我揣著相機與錄音,去河邊找鬼陵叽。 笑死狞尔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的巩掺。 我是一名探鬼主播偏序,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胖替!你這毒婦竟也來了研儒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤独令,失蹤者是張志新(化名)和其女友劉穎端朵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燃箭,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡冲呢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了招狸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敬拓。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裙戏,靈堂內(nèi)的尸體忽然破棺而出乘凸,到底是詐尸還是另有隱情,我是刑警寧澤累榜,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布翰意,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冀偶。R本人自食惡果不足惜醒第,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望进鸠。 院中可真熱鬧稠曼,春花似錦、人聲如沸客年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽量瓜。三九已至司恳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绍傲,已是汗流浹背扔傅。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烫饼,地道東北人猎塞。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像杠纵,于是被迫代替她去往敵國和親荠耽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容