2014-10-28 50 views
1

我想为Android设备创建一个phonegap插件,可悲的是我的Java很糟糕。phonegap android插件使用本机库

我有一个简单的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 /阿帕奇/科尔多瓦/插件/ Medida; .SFM_Init( [B] I

现在 - 我正在从完整的JAVA安卓项目中获取libfinger.so文件,并试图将其包装到一个phonegap插件中(为什么?因为我可以编写phonegap,但没有java)。

的文件都被放置在正确的位置 的libfinger.so文件是库/文件夹

所以我的问题是 - 我需要附加或做的就是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); 

} 

}

回答

2

尝试定义的方法作为一个类的方法(从here截取):

public class Medida extends CordovaPlugin { 

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

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

EDIT

从误差它似乎没有方法d在本地库中调用了SFM_Init,尝试列出导出的方法并查看确切的定义:How do I list the symbols in a .so file

+0

Thankyou为此 - 它指出我的方向正确 - 因此我设法至少调用了库中的进程文件。 我以为我可以只使用库文件和调用过程(我的Java是可怕的),但经过一些沉重的阅读,我已经包括从另一个本地项目使用这个库文件加载更多的文件 - 我知道有一些希望向前进。 – user3468134 2014-11-03 15:05:04

+0

不客气!很高兴帮助你:) – Miquel 2014-11-04 19:43:39