2016-02-12 58 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()方法在什麼地方被調用(如果它是在所有?),所以我會避開它。

祝你好運!