develop cordova plugin - eju-front/mobile-solution GitHub Wiki
-
安装 plugman
npm install -g plugman
-
下载任一一个插件,直接通过修改下载的插件的代码来编写自定义的插件
-
修改
config.xml
文件,具体配置按照下面不同平台的章节 -
编写插件代码,具体见下面不同平台的章节
-
安装刚编写好的插件到工程下
plugman install --platform <platformName> --project <projectPath>/platforms/android --plugin <pluginPath>
-
安装完后确认对应的 native 代码是否集成到了项目中,javascript 代码是否集成到了
platforms/android/platform_www
目录下 -
安装完后就可以在项目中直接调用插件
管理 js 文件和创建的 js 对象
示例
<js-module src="www/echo.js" name="echo">
<clobbers target="window.echo" />
</js-module>
配置 Android 平台的信息
示例
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="Echo" >
<param name="android-package" value="com.example.echo.Echo"/>
</feature>
</config-file>
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</config-file>
<source-file src="src/android/Echo.java" target-dir="src/com/example/echo" />
</platform>
-
platform
指明对应的平台 -
config-file
指定定义的配置文件路径-
res/xml/config.xml
指定插件相关配置-
feature
name 指定 native 层导出到 js层 的接口名 - android-package 指定 native 层的对象的完整 Java 类名
-
-
AndroidManifest.xml
指定 AndroidManifest 相关配置-
uses-permission
指定权限
-
-
-
source-file
src 指定对应的插件目录下的 Java 文件的路径,target-dir 指定 Java 文件复制到的对应的工程下的目录
用于通过 Gradle 引用其它第三方库
<framework src="com.android.support:support-v4:+"/>
用于引用本地的 Jar 文件
<lib-file src="src/android/libs/gcm.jar"/>
-
编写类文件并继承
CordovaPlugin
-
重写
initialize()
方法,定义需要在插件初始化时执行的操作 -
重写
execute()
方法,定义需要导出到 JavaScript 中的操作。该方法返回 boolean 值,true
表示方法被执行,false
表示方法没找到。execute() 方法示例
@Override public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { // 字符串为导出到 js 的方法名 if ("show".equals(action)) { // args.getString(0) 获得 js 传递到 native 层的参数 Toast.makeText(cordova.getActivity(), args.getString(0), Toast.LENGTH_SHORT).show(); JSONObject result = new JSONObject(); result.put("x", 1); // 执行回调并传递参数给 js 层 callbackContext.success(result); return true; } else if ("main".equals(action)) { // 默认代码执行在 cordova 内部的线程中 cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { callbackContext.success("ok"); } }); return true; } else if ("post".equals(action)) { // 在线程池中执行 cordova.getThreadPool().execute(new Runnable() { @Override public void run() { callbackContext.success(); } }); return true; } return false; }
-
编写 js 代码,通过
cordova.exec()
可以调用 native 层代码js 代码示例
var exec = require('cordova/exec'); var Echo = function() {}; Echo.prototype.show = function(str, callback) { // 调用 native 层代码,参数依次为成功的回调方法,失败的回调方法,要调用的 native 层的对象名,native 层的方法名,参数列表 exec(callback, function (err) { callback(err); }, "Echo", "show", [str]); }; module.exports = new Echo();