2016-02-12 132 views
1

我正在开发一个使用VS2015的JS/Cordova应用程序。 我使用Android Studio开发了一个本地代码库(libmyjni.so)。 我想为Android创建一个Cordova插件,它将使用我的.so库。如何使用VS2015添加cordova插件.so文件?

我假设我需要添加此.so文件到我的插件代码(或这是包装一些其他的方式?)

我的问题是,在那里我会将此机库(的.so)下插件文件夹,所以插件代码(.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

+0

你解决了这个问题吗?我面临同样的问题。的System.loadLibrary( “myjni”);不行。请帮帮我 – dalvir

回答

0

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

.so文件应该放在/libs/armeabi目录中。科尔多瓦应该从这里将它包裹到.apk中。

至于应该加载库的地方,我使用了静态函数来确保它只能加载一次。我不确定pluginInitialize()方法在什么地方被调用(如果它是在所有?),所以我会避开它。

祝你好运!