如何使用VS2015添加cordova插件.so文件?

时间:2016-02-12 01:33:39

标签: cordova java-native-interface cordova-plugins visual-studio-cordova

我正在使用VS2015开发JS / Cordova应用程序。 我使用Android studio开发了一个本机代码库(libmyjni.so)。 我正在尝试为Android创建一个将使用我的.so库的Cordova插件。

我假设我需要将这个.so文件添加到我的插件代码中(或者这是以其他方式打包的吗?)

我的问题是,我将把这个本机库(.so)放在plugins文件夹下,所以插件代码(.java)文件可以调用其中的方法吗?除此之外还需要其他任何设置吗?

目前,文件夹/文件结构类似于

 plugins
 --example.plugin.calculator
 ----src
 ------android
 --------Calculator.java  //this is using the method in the .so library
 ----www
 ------calculator.js
 ----plugin.xml

另外,我如何在我的插件类中加载.so库 -  在pluginInitialize方法中还是作为静态方法?

目前我的插件类看起来像这样:

    package example.plugin.calculator;

    import org.apache.cordova.CallbackContext;
    import org.apache.cordova.CordovaPlugin;
    import org.apache.cordova.CordovaWebView;
    import org.apache.cordova.PluginResult;
    import org.json.JSONObject;
    import org.json.JSONArray;
    import org.json.JSONException;

    public class Calculator extends CordovaPlugin {

    protected void pluginInitialize() {
          System.loadLibrary("myjni"); //contains the "average" method
    }

    public static final String ACTION_AVERAGE = "average"; 

    @Override
    public boolean execute(String action, JSONArray args, 
                       CallbackContext callbackContext) 
       throws JSONException {

      if (ACTION_AVERAGE.equals(action)) { 
        JSONObject arg_object = args.getJSONObject(0);
        String n1 = arg_object.getString("n1");
        String n2 = arg_object.getString("n2");
        double answer = average(n1, n2);
        String result = String.valueOf(answer);
        callbackContext.success(result);
        return true;    
      }

      callbackContext.error("Invalid action");
      return false;

     }

     public native double average(int n1, int n2);

     static {
         System.loadLibrary("myjni");  //contains the "average" method
     }
   }

任何帮助非常感谢, _Thanks

1 个答案:

答案 0 :(得分:0)

我刚刚做了类似的事情,我创建了一个Cordova插件来访问.so库,所以我想我会分享!假设你的javascript可以使用cordova.exec()函数正确调用.java文件:

.so文件应放在 / libs / armeabi 目录中。 Cordova应该把它从那里包装到.apk中。

至于应该加载库的位置,我使用静态函数来确保它只能加载一次。我不确定调用pluginInitialize()方法的位置(如果它完全是?),所以我会回避它。

祝你好运!