Android-плагин phonegap с использованием собственной библиотеки

Я пытаюсь создать плагин phonegap для устройства Android, к сожалению, моя 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

Теперь я беру файл libfinger.so из полного проекта JAVA для Android и пытаюсь обернуть его в плагин 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);

}

}


person user3468134    schedule 28.10.2014    source источник


Ответы (1)


Попробуйте определить метод как метод класса (взято из здесь) :

public class Medida extends CordovaPlugin {

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

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

ИЗМЕНИТЬ

Из ошибки кажется, что в нативной библиотеке нет метода с именем SFM_Init, попробуйте перечислить экспортированные методы и посмотреть точное определение: Как составить список символов в файле .so

person Miquel    schedule 28.10.2014
comment
Спасибо за это - это указало мне правильное направление - в результате мне удалось хотя бы вызвать процессы через файл библиотеки. Я думал, что могу просто использовать файл библиотеки и вызвать процесс (моя java ужасна), но после некоторого прочтения я включил загрузку дополнительных файлов из другого собственного проекта, который использует этот файл библиотеки - я знаю, что есть надежда двигаться вперед . - person user3468134; 03.11.2014