繁体   English   中英

使用本机库的phonegap android插件

[英]phonegap android plugin using a native library

我正在尝试为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);

}

}

尝试将方法定义为类方法(从此处获取 ):

public class Medida extends CordovaPlugin {

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

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

编辑

从该错误看来,本机库中似乎没有名为SFM_Init的方法,请尝试列出导出的方法并查看确切的定义: 如何在.so文件中列出符号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM