我试图为Android设备创建一个phonegap插件,遗憾的是我的Java很糟糕。
我有一个简单的helloworld项目,我正努力尝试实现这一目标。 我已经创建了一个插件,可以正常加载(只是一个简单的返回字符串示例)
从此我开始尝试添加我的本机库代码。
public class Medida extends CordovaPlugin
{
static {
System.loadLibrary("finger");
}
public native static int SFM_Init(byte[] dev);
我遇到的错误信息是: 10-28 15:23:03.207:W / dalvikvm(11618):找不到原生Lorg / apache / cordova / plugin / Medida的实现; .SFM_Init([B] I
现在 - 我从一个完整的JAVA android项目中获取libfinger.so文件并尝试将其包装到一个phonegap插件中(为什么?因为我可以编写phonegap,但没有java)。
文件全部放在正确的位置 libfinger.so文件位于libs /文件夹
中所以我的问题是 - 我还需要加载什么或者让JAVA插件与libfinger.so一起使用 - 所以我可以调用所有的clases等。
感谢您的关注 - 花了很多天试图查找,但是对于我理解的插件调用loadlibrary没有太多信息。
约翰
Main java class
package org.apache.cordova.plugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class Medida extends CordovaPlugin{
static {
System.loadLibrary("finger");
}
public native static int SFM_Init(byte[] dev);
static final String LOG_TAG = "Medida.Java: ";
int fd = 0;
String retval = null;
int[] nQuality = {0};
int[] nBufferSize = {0};
private final String retSuccess = "OK";
public static final int REFRESH = 1;
public static final int ERROR = 0;
private Thread thread = null;
private int peripheral_fd = 1;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("dave")) {
String message = args.getString(0);
this.dave("Medida CALLING DAVE " + message, callbackContext);
return true;
}
else if (action.equals("scanfinger_getID")){
this.scanfinger_getID( args, callbackContext);
return true;
}
return false;
}
private void dave(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(" --- Medida FROM DAVE: " + message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
private void scanfinger_getID(JSONArray args, CallbackContext callbackContext) throws JSONException {
String message = args.getString(0);
JSONObject object = new JSONObject(message);
String id = object.getString("id");
String dev = "/dev/ttySAC3";
byte[] devName = dev.getBytes();
fd = SFM_Init(devName);
callbackContext.success("Got to scanfinger_getID: " + id);
}
}
答案 0 :(得分:2)
尝试将方法定义为类方法(取自here):
public class Medida extends CordovaPlugin {
static {
System.loadLibrary("finger");
}
public native int SFM_Init(byte[] dev);
}
修改强>
从错误看来,本机库中没有名为SFM_Init的方法,尝试列出导出的方法并查看确切的定义:How do I list the symbols in a .so file