如何建立Cordova外掛
官方資料
注意:本文資料相對官網要更加新一些,官網是針對6.x版本寫的。
如果英文夠好,可以直接看官網:Create a plugin
也可以檢視繁體中文:外掛程式開發指南
製作步驟
這裡主要講述如何建立一個獨立的cordova外掛,之後再引入到專案中去。
1.下載製作工具
通過npm安裝。
npm install -g plugman
2.通過plugman建立外掛
假設外掛名稱為test_plugin,執行如下程式碼則可以建立外掛。
plugman create --name test_plugin --plugin_id test_plugin --plugin_version 1.0.0
其中:
--name test_plugin --> 外掛名
--plugin_id test_plugin --> 外掛ID
--plugin_version 1.0.0 -->外掛版本
這樣你會得到一個外掛的基本結構,包括一個src
資料夾,一個www
資料夾(內含test_plugin.js
),一個plugin.xml
檔案
你也可以手動建立這幾個資料夾和檔案。
然後通過下載已有的外掛專案作為參考來進行後續開發。例如cordova-plugin-device。
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
3.調整plugin.xml檔案
plugin.xml
檔案是整個外掛的主要配置檔案,宣告瞭外掛的相關資訊。
剛剛建立出來的xml檔案如下:
<?xml version='1.0' encoding='utf-8'?>
<plugin id="test_plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<name>test_plugin</name>
<js-module name="test_plugin" src="www/test_plugin.js">
<clobbers target="cordova.plugins.test_plugin" />
</js-module>
</plugin>
其中包含了外掛名稱,外掛的js檔案所在位置www/test_plugin.js
,外掛的目標物件cordova.plugins.test_plugin
,
目標物件,也就是在js中如何能拿到/呼叫這個外掛。
接下來,在外掛裡新增所需平臺,以android為例。新增在</js-module>
之後。
<!-- android -->
<platform name="android">
<config-file target="config.xml" parent="/*">
<feature name="test_plugin">
<param name="android-package" value="com.cordova.plugin.test_plugin" onload="true" />
</feature>
</config-file>
<source-file src="src/android/test_plugin.java" target-dir="src/com/cordova/plugin/test_plugin" />
</platform>
這裡將指示java檔案在本專案中的位置,外掛安裝時檔案將拷貝到的目標位置,java包名。
4.修改js檔案
此時修改js檔案,改成具有多個函式可以呼叫的形式
let test_plugin= {
test_func_A(arg0, success, error){
exec(success, error, 'test_plugin', 'test_func_A', [arg0]);
},
test_func_B(arg0, success, error){
exec(success, error, 'test_plugin', 'test_func_A', [arg0]);
},
}
module.exports = test_plugin;
此檔案,最終將成為外掛的目標物件cordova.plugins.test_plugin
,可以呼叫其中定義的函式test_func_A
或者test_func_B
。
5.建立java檔案
例子中,可以看到,
如何呼叫不同的java函式,並且推薦使用try...catch
語句,真實開發中,android的呼叫很容易引起崩潰,所以務必加上try...catch
。
如何傳遞引數,使用語句args.getInt(0);
除了int,還可以傳遞其他JSON支援的型別。
返回值的型別可以檢視callbackContext.success
的定義,支援int型,string型別作為返回值,同時支援JSONArray和JSONObject,但實際上仍然是轉為string返回。
這時候,你就可以將這些函式當做橋樑,去網上找android開發的原生程式碼/庫,然後進行呼叫。
同時,要注意,這個類繼承自CordovaPlugin,並不是Activity,所以Context也無法通過自身直接獲取,所以需要使用函式this.cordova.getContext();
網上很多android開發的例子都是直接使用activity的context,這裡一定要注意context來源,否則容易出錯。
package com.cordova.plugin.test_plugin;
import android.app.Activity;
import android.content.Context;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class test_plugin extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
Activity activity = this.cordova.getActivity();//獲取專案activity的方法
Context context = this.cordova.getContext();//獲取專案context的方法
if (action.equals("test_func_A")) {
int index = args.getInt(0);//如何獲取傳入的引數
int vcode = test_func_A(context, index);
callbackContext.success(vcode);
return true;
}else if (action.equals("test_func_B")) {
string vstr = test_func_B(context);
callbackContext.success(vstr);
return true;
}
return false;
}
private static int test_func_A(Context ctx, int index) {
try{
return index + 1;
}catch(Exception e){
e.printStackTrace();
return -1;
}
}
private static String test_func_B(Context context) {
try{
return "hello world!";
}catch(Exception e){
e.printStackTrace();
return -1;
}
}
}
6.實際使用
在程式碼中,確認能夠獲取到cordova時,呼叫如下語句即可實際呼叫java對應函式。
cordova.plugins.test_plugin.test_func_A(0, function(back_int){
console.log("test_func_A back_int=", back_int);
});
推薦參考文件
相關文章
- cordova列印外掛備註
- Cordova學習--iOS自定義外掛iOS
- 給Ionic寫一個cordova(PhoneGap)外掛
- 快速自定義Cordova外掛(-配置檔案)
- Flutter 如何建立私有公共外掛Flutter
- 如何在Android平臺上建立自定義的Cordova外掛並使用SAP UI5消費AndroidUI
- 如何從零編寫一個vite外掛 建立 vite 外掛通用模板Vite
- ionic中使用熱更新外掛cordova-hot-code-push
- MyBatis 的外掛物件如何建立出來的MyBatis物件
- 使用podspec建立iOS外掛iOS
- 記一次ionic使用file外掛cordova plugin file的坑Plugin
- 科大訊飛cordova語音外掛填坑及api介紹API
- Flutter 外掛的建立及使用Flutter
- 外掛如何呼叫本外掛的View?View
- Cordova開發app——使用外掛錄音並上傳伺服器APP伺服器
- Cordova+vue 混合app開發(一)建立Cordova專案VueAPP
- 如何在十分鐘內建立一個Chrome 外掛Chrome
- Headshot外掛如何使用?Headshot外掛使用教程
- 建立VS Code 擴充套件外掛套件
- Cordova外掛中JavaScript程式碼與Java的互動細節介紹JavaScript
- [Flutter翻譯]如何用Flutter 2.2.3建立Chrome擴充套件外掛FlutterChrome套件
- Cordova應用的JavaScript程式碼和自定義外掛程式碼的除錯JavaScript除錯
- Elasticsearch6.2.4-利用head外掛建立索引Elasticsearch索引
- 【譯】使用Vue建立一個Excel外掛VueExcel
- Nuxt Kit 中的外掛:建立與使用UX
- 使用Markdown建立PPT的VS Code外掛
- cordova-plugin-themeablebrowser 0.2.17 “ThemeableBrowser”ionic跳轉外鏈外掛在ios中heardBar會遮住內容的bugPluginiOS
- 如何安裝 Vim 外掛
- 如何製作 Sketch 外掛
- Cordova學習----iOS建立第一個appiOSAPP
- 如何給Wordpress安裝外掛
- markdown-it 外掛如何寫(一)
- 如何編寫 ProtoBuf 外掛 (一) ?
- 如何編寫 ProtoBuf 外掛 (二) ?
- 如何編寫 ProtoBuf 外掛 (三) ?
- markdown-it 外掛如何寫(二)
- markdown-it 外掛如何寫(三)
- [提問交流]新建立的外掛有配置引數,在前臺開啟外掛時報錯