Was ist der richtige Weg, um native Methodensignaturen in Android NDK zu schreiben?

Ich eine funktionierende Umsetzung der NDK-Bibliothek und die entsprechende Java-Klasse. Aber ich bin nicht in der Lage, die überladene Methode, Klasse. Derzeit meine Klasse enthält:

package com.package;

public class MyClass
{
  public static native String getFileName();
  static
  {
    System.loadLibrary("mylib");
  }
}

Meine jniwrappers.cpp die Datei hat die folgende Deklaration:

JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName(_JNIEnv* env, jobject thiz);

Bis zu diesem Punkt ist alles in Ordnung. Aber in der nächsten änderung meiner Klasse:

package com.package;

public class MyClass
{
  public static native String getFileName();
  public static native String getFileName(int index);
  ...
}

Und hinzufügen jniwrappers.cpp eine andere Erklärung:

JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName__I(_JNIEnv* env, jobject thiz, jint index);

Kompiliert er fein, Android Anwendung gestartet wird, nicht UnsatisfiedLinkError aber wenn es ruft die zweite Methode mit dem argument, die erste C++ Funktion aufgerufen wird, die zweite jedoch nicht. Ich habe andere Methoden, mit Argumenten, die in dieser Klasse aber keiner von Ihnen sind überlastet, so dass Ihre jeweiligen JNI Signaturen enthalten keine Argumente.

So, was mache ich falsch?

InformationsquelleAutor der Frage Andrey Novikov | 2010-10-27

Schreibe einen Kommentar