gpt4 book ai didi

java - 使用 native 库的 phonegap android 插件

转载 作者:行者123 更新时间:2023-11-29 20:59:24 24 4
gpt4 key购买 nike

我正在尝试为 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 一起工作 - 这样我就可以调用所有的类等等。

感谢您的查看 - 花了几天时间试图找出答案,但我理解的关于为插件调用 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);

}

最佳答案

尝试将方法定义为类方法(取自 here ):

public class Medida extends CordovaPlugin {

static {
System.loadLibrary("finger");
}

public native int SFM_Init(byte[] dev);
}

编辑

从报错来看,native library中似乎没有名为SFM_Init的方法,尝试列出导出的方法并查看确切的定义:How do I list the symbols in a .so file

关于java - 使用 native 库的 phonegap android 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com