2014-10-28 68 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