Cordovaプラグイン開発(1)-Alndroidプラグイン開発詳細
8931 ワード
この記事では、Android Cordovaプラグインの実践プロセスについて説明します.具体的な実装には、次の5つの側面があります.
1、オリジナルカスタムプラグインクラスを実現する;
2,Cordovaプラグインを配置する;
3、Cordovaプラグインを登録する.
4 Cordovaプラグインの呼び出し方法を定義する.
5,Cordovaプラグインを呼び出す;
この記事では、Android Toastプラグインの実装プロセスを例に挙げます.本題に入る.
一、準備
Androidプラットフォームを追加したCordovaプロジェクトを準備する必要があります.プラグインはこれに基づいています.ここではCordovaプロジェクトの作成方法やAndoidプラットフォームの追加方法は書かれていません.これらは最も基本的なことです.
二、具体的な実現
実践プロセスには、カスタムプラグインクラスの実装、Cordovaプラグインの構成、Cordovaプラグインの登録、Cordovaプラグインの呼び出し方法の定義、およびCordovaプラグインの呼び出しが含まれます.以下、それぞれ説明します.
1,カスタムプラグインクラスToastDemoを実現する.java
プロジェクト名/platforms/android/srcディレクトリの下にパッケージを新規作成し、そのパッケージの下にカスタムプラグインクラスを新規作成し、CordovaPlugin(カスタムプラグインはこのクラスを継承する必要がある)に継承し、executeメソッドを書き換え、executeメソッドで自分の望む機能ロジックを実現すればよい.このdemoを例にとると、私は工事名/platforms/android/srcディレクトリの下で建てたfxpです.cordova.pluginsパッケージを新規作成します.JAvaクラスですので、このdemoのプラグインクラスパスは、エンジニアリング名/platforms/android/src/fxp/cordova/plugins/toastDemoです.java.あまり説明しないで、直接コードを貼って、コードの中に注釈があります:
カスタムプラグインクラスでは、次の2点を追加します. args値取用方式 について
a)jsがオブジェクト配列である場合、すなわち[{"key":"value","key":"value"}]は、以下のように用いられる.
JSONArray jsonarr = new JSONArray(args.getString(0));
JSONObject json = jsonarr.getJSONObject(0);
String str = json.get("key");
b)jsが通常の配列である場合、すなわち["a",10,true,...]は、以下のように用いられる.
args.getString(0)
args.getInt(1)
args.getBoolean(2)スレッド について
a)以上のexecuteメソッドは、WebViewインタフェースのメインスレッドではなく、WebCoreスレッドで実行される.
b)ActivityでのUIスレッドを実行したい場合は、上記のexecuteメソッドは以下の表記を参照してください.
c)UIスレッドで実行したくないし、WebCoreスレッドをブロックしたくない場合は、上記のexecuteメソッドは以下の書き方を参照してください.
2,config.xmlでのCordovaプラグインの構成
プロジェクト名/platforms/android/res/xml/configを開く.xmlファイル、widgetノードの下に次のfeatureを追加します.
その中で、featureのname値は比較的重要で、勝手に取ることができるが、後続は統一しなければならない.paramのname値は任意に記入でき、value値はプラグイン実装クラスの経路、すなわち「パッケージ名」である.【類名】.
3 cordovaでplugins.jsにCordovaプラグインを登録する
プロジェクト名/platforms/android/assets/www/cordovaを開くplugins.jsファイル、module.exports配列にカスタムプラグイン情報を追加します.このdemoではmoduleです.exports配列には、次の要素が追加されます.
1つのpluginは、Android Studioにおけるprojectとmoduleの概念に類似する複数のmoduleを有することができ、ここでidはプラグインの現在のmoduleのidであり、命名規則は「プラグインid」である.【featureのname値】.プラグインidはkey値として「pluginId」を使用します.この例では、「pluginId」:「fxp-cordova-plugins」です.
4,Cordovaプラグイン呼び出し方式の定義
エンジニアリング名/platforms/android/assets/www/pluginsパスの下に自分のフォルダを作成し、自分のフォルダの下にwwwディレクトリを作成し、このwwwディレクトリの下にプラグインの使用方法を定義するjsファイルを作成します(プラグインの使用方法を定義するjsファイルをすべてこのwwwフォルダの下に置くことができます).これを例にとると、私が作成したTestDemoです.jsファイルのパスは、工事名/platforms/android/assets/www/plugins/fxp-cordova-plugins/www/TestDemo.js.プラグインには、通常、コールバックメソッドとコールバックなしメソッドの2つの使用形態があります.TestDemo.jsファイルの内容は以下の通りです.
5,Cordovaプラグインを呼び出す
以上の4ステップが完了すると、すべてが準備され、直接呼び出すことができます.呼び出し方法:
これで、games over!
三、後ろに書く
1,本文は簡単なtoastプラグインを実現し、プラグインの実践過程を述べることを意図している.
2、したがってdemoの実践はすべて工事名/platforms/androidディレクトリの下にあるので、デバッグ時にcordova buildまたはcordova runコマンドを実行しないでください(このコマンドを実行すると、工事名/platforms/android/assets/wwwが置き換えられ、前に追加したコードが失われます).
3、後で暇があれば、カスタムプラグインのインストール方法を説明するブログを書きます.
4、足りないところは、批判と指摘を歓迎します.
//**********************2018.6.28補足start*************************************/
1、一年半ぶりにこのブログを振り返ると、正確に説明されていないものがあることに気づき、修正されました.お許しください.
2,以上のカスタムプラグイン実装方式はCordova公式ドキュメント標準プロセスに従う.しかしcordovaソースコードをよく見ると、実際にはより簡単な実現方法があることがわかります.
以上の手順の3、4は省略できますが、cordovaでは使用しません.plugins.jsに登録してもTestDemoと書く必要はありません.jsは呼び出し方法を提供し、直接次のように呼び出すことができます.
/**********************2018.6.28 end*********************************************/
1、オリジナルカスタムプラグインクラスを実現する;
2,Cordovaプラグインを配置する;
3、Cordovaプラグインを登録する.
4 Cordovaプラグインの呼び出し方法を定義する.
5,Cordovaプラグインを呼び出す;
この記事では、Android Toastプラグインの実装プロセスを例に挙げます.本題に入る.
一、準備
Androidプラットフォームを追加したCordovaプロジェクトを準備する必要があります.プラグインはこれに基づいています.ここではCordovaプロジェクトの作成方法やAndoidプラットフォームの追加方法は書かれていません.これらは最も基本的なことです.
二、具体的な実現
実践プロセスには、カスタムプラグインクラスの実装、Cordovaプラグインの構成、Cordovaプラグインの登録、Cordovaプラグインの呼び出し方法の定義、およびCordovaプラグインの呼び出しが含まれます.以下、それぞれ説明します.
1,カスタムプラグインクラスToastDemoを実現する.java
プロジェクト名/platforms/android/srcディレクトリの下にパッケージを新規作成し、そのパッケージの下にカスタムプラグインクラスを新規作成し、CordovaPlugin(カスタムプラグインはこのクラスを継承する必要がある)に継承し、executeメソッドを書き換え、executeメソッドで自分の望む機能ロジックを実現すればよい.このdemoを例にとると、私は工事名/platforms/android/srcディレクトリの下で建てたfxpです.cordova.pluginsパッケージを新規作成します.JAvaクラスですので、このdemoのプラグインクラスパスは、エンジニアリング名/platforms/android/src/fxp/cordova/plugins/toastDemoです.java.あまり説明しないで、直接コードを貼って、コードの中に注釈があります:
package fxp.cordova.plugins;
import android.widget.Toast;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONException;
import java.util.Random;
/**
* Created by fxp on 2017/4/14.
*/
public class ToastDemo extends CordovaPlugin {
/**
* @param action The action to execute.
* @param args The exec() arguments, wrapped with some Cordova helpers.
* @param callbackContext The callback context used when calling back into JavaScript.
* @return
* @throws JSONException
*/
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
if ("toast".equals(action)) {
String str = args.getString(0);
Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_LONG).show();
return true;
} else if ("toastWithCallback".equals(action)) {
String str = args.getString(0);
Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_LONG).show();
// / , Random , true function, false function,
Random random = new Random();
if (random.nextBoolean()) {
callbackContext.success("execute_callack_success");
} else {
callbackContext.error("execute_callack_error");
}
return true;
}
return super.execute(action, args, callbackContext);
}
}
カスタムプラグインクラスでは、次の2点を追加します.
a)jsがオブジェクト配列である場合、すなわち[{"key":"value","key":"value"}]は、以下のように用いられる.
JSONArray jsonarr = new JSONArray(args.getString(0));
JSONObject json = jsonarr.getJSONObject(0);
String str = json.get("key");
b)jsが通常の配列である場合、すなわち["a",10,true,...]は、以下のように用いられる.
args.getString(0)
args.getInt(1)
args.getBoolean(2)
a)以上のexecuteメソッドは、WebViewインタフェースのメインスレッドではなく、WebCoreスレッドで実行される.
b)ActivityでのUIスレッドを実行したい場合は、上記のexecuteメソッドは以下の表記を参照してください.
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
if ("toast".equals(action)) {
final String str = args.getString(0);
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
//TODO
callbackContext.success(); // Thread-safe. }
});
return true;
}
return super.execute(action, args, callbackContext);
}
c)UIスレッドで実行したくないし、WebCoreスレッドをブロックしたくない場合は、上記のexecuteメソッドは以下の書き方を参照してください.
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
if ("toast".equals(action)) {
final String str = args.getString(0);
cordova.getThreadPool().execute(new Runnable() {
public void run() {
//TODO
callbackContext.success(); // Thread-safe.
}
});
return true;
}
return false;
}
2,config.xmlでのCordovaプラグインの構成
プロジェクト名/platforms/android/res/xml/configを開く.xmlファイル、widgetノードの下に次のfeatureを追加します.
その中で、featureのname値は比較的重要で、勝手に取ることができるが、後続は統一しなければならない.paramのname値は任意に記入でき、value値はプラグイン実装クラスの経路、すなわち「パッケージ名」である.【類名】.
3 cordovaでplugins.jsにCordovaプラグインを登録する
プロジェクト名/platforms/android/assets/www/cordovaを開くplugins.jsファイル、module.exports配列にカスタムプラグイン情報を追加します.このdemoではmoduleです.exports配列には、次の要素が追加されます.
{
"file": "plugins/fxp-cordova-plugins/www/ToastDemo.js",//js
"id": "fxp-cordova-plugins.ToastDemo",// moduleid。 cordova.define
"clobbers": [
"fxp"//js
]
}
1つのpluginは、Android Studioにおけるprojectとmoduleの概念に類似する複数のmoduleを有することができ、ここでidはプラグインの現在のmoduleのidであり、命名規則は「プラグインid」である.【featureのname値】.プラグインidはkey値として「pluginId」を使用します.この例では、「pluginId」:「fxp-cordova-plugins」です.
4,Cordovaプラグイン呼び出し方式の定義
エンジニアリング名/platforms/android/assets/www/pluginsパスの下に自分のフォルダを作成し、自分のフォルダの下にwwwディレクトリを作成し、このwwwディレクトリの下にプラグインの使用方法を定義するjsファイルを作成します(プラグインの使用方法を定義するjsファイルをすべてこのwwwフォルダの下に置くことができます).これを例にとると、私が作成したTestDemoです.jsファイルのパスは、工事名/platforms/android/assets/www/plugins/fxp-cordova-plugins/www/TestDemo.js.プラグインには、通常、コールバックメソッドとコールバックなしメソッドの2つの使用形態があります.TestDemo.jsファイルの内容は以下の通りです.
/**
* cordova.define cordova_plugins.js id
* exec :
* 1: function
* 2: function
* 3:feature name, config.xml
* 4: java action
* 5: ,json
* ,
*/
cordova.define("fxp-cordova-plugins.ToastDemo",
function(require, exports, module) {
/*
*
*/
var exec = require("cordova/exec");
module.exports = {
toast: function(content){
exec(null,null,"ToastDemo","toast",[content]);
},
toastWithCallback: function (content, successCallback, errorCallback) {
cordova.exec(successCallback, errorCallback, "ToastDemo", "toastWithCallback", [content]);
}
}
/*
*
*/
/* var exec = require('cordova/exec');
var FXP = function(){};
FXP.prototype.toast=function(content) {
exec(null, null, "ToastDemo", "toast", [content]);
};
FXP.prototype.toastWithCallback=function(content,success, error) {
exec(success, error, "ToastDemo", "toastWithCallback", [content]);
};
var fxp = new FXP();
module.exports = fxp;*/
/*
*
*/
/* var exec = require('cordova/exec');
exports.toast = function(content) {
exec(null, null, "ToastDemo", "toast", [content]);
};
exports.toastWithCallback=function(content, successCallback, errorCallback){
exec(successCallback,errorCallback,"ToastDemo","toastWithCallback",[content]);
};*/
});
5,Cordovaプラグインを呼び出す
以上の4ステップが完了すると、すべてが準備され、直接呼び出すことができます.呼び出し方法:
[clobbers].[action]
このdemoを例に挙げると、 fxp.toast("toast");
fxp.toastWithCallback("toastWithCallback",function(success){
alert(success);
},function(error){
alert(error);
});
これで、games over!
三、後ろに書く
1,本文は簡単なtoastプラグインを実現し、プラグインの実践過程を述べることを意図している.
2、したがってdemoの実践はすべて工事名/platforms/androidディレクトリの下にあるので、デバッグ時にcordova buildまたはcordova runコマンドを実行しないでください(このコマンドを実行すると、工事名/platforms/android/assets/wwwが置き換えられ、前に追加したコードが失われます).
3、後で暇があれば、カスタムプラグインのインストール方法を説明するブログを書きます.
4、足りないところは、批判と指摘を歓迎します.
//**********************2018.6.28補足start*************************************/
1、一年半ぶりにこのブログを振り返ると、正確に説明されていないものがあることに気づき、修正されました.お許しください.
2,以上のカスタムプラグイン実装方式はCordova公式ドキュメント標準プロセスに従う.しかしcordovaソースコードをよく見ると、実際にはより簡単な実現方法があることがわかります.
以上の手順の3、4は省略できますが、cordovaでは使用しません.plugins.jsに登録してもTestDemoと書く必要はありません.jsは呼び出し方法を提供し、直接次のように呼び出すことができます.
Cordova.exec(successCallback,errorCallback,"ToastDemo","toast",[content]);
/**********************2018.6.28 end*********************************************/