develop cordova plugin - eju-front/mobile-solution GitHub Wiki

Cordova 插件开发

开发步骤

  1. 安装 plugman

    npm install -g plugman
  2. 下载任一一个插件,直接通过修改下载的插件的代码来编写自定义的插件

  3. 修改 config.xml 文件,具体配置按照下面不同平台的章节

  4. 编写插件代码,具体见下面不同平台的章节

  5. 安装刚编写好的插件到工程下

    plugman install --platform <platformName> --project <projectPath>/platforms/android --plugin <pluginPath>
  6. 安装完后确认对应的 native 代码是否集成到了项目中,javascript 代码是否集成到了 platforms/android/platform_www 目录下

  7. 安装完后就可以在项目中直接调用插件

Android 平台

配置 config.xml

js-module

管理 js 文件和创建的 js 对象

示例

<js-module src="www/echo.js" name="echo">
  <clobbers target="window.echo" />
</js-module>

platform

配置 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 文件复制到的对应的工程下的目录

framework

用于通过 Gradle 引用其它第三方库

<framework src="com.android.support:support-v4:+"/>

lib-file

用于引用本地的 Jar 文件

<lib-file src="src/android/libs/gcm.jar"/>

编写代码

  1. 编写类文件并继承 CordovaPlugin

  2. 重写 initialize() 方法,定义需要在插件初始化时执行的操作

  3. 重写 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;
    }
  4. 编写 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();

相关文档

⚠️ **GitHub.com Fallback** ⚠️