我正在使用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
答案 0 :(得分:0)
我刚刚做了类似的事情,我创建了一个Cordova插件来访问.so库,所以我想我会分享!假设你的javascript可以使用cordova.exec()函数正确调用.java文件:
.so文件应放在 / libs / armeabi 目录中。 Cordova应该把它从那里包装到.apk中。
至于应该加载库的位置,我使用静态函数来确保它只能加载一次。我不确定调用pluginInitialize()方法的位置(如果它完全是?),所以我会回避它。
祝你好运!