Jaký je správný způsob, jak psát nativní podpisy metodou v Android NDK?

hlasů
19

Mám pracovní realizaci NDK knihovny a odpovídající Java třídy. Ale já nejsem schopen přidat přetíženého metodu této třídy. V současné době moje třída zahrnuje:

package com.package;

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

Můj jniwrappers.cpp soubor má následující prohlášení:

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

Až do tohoto okamžiku je vše v pořádku. Ale vedle I pozměnit svůj třída:

package com.package;

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

A přidejte do jniwrappers.cpp jiného prohlášení:

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

Sestavuje jemné, Android spustí aplikace, nedostane UnsatisfiedLinkError ale když volá druhou metodu s argumentem prvním C ++ funkce je volána, ale ne druhý. Mám i jiné metody s argumenty v této třídě, ale žádný z nich jsou přetížené, takže se jejich podpisy JNI neobsahují argumenty.

Takže, co dělám špatně?

Položena 27/10/2010 v 09:37
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
25

Měli byste použít javahnástroj pro generování těchto podpisů.

Pokud jej chcete použít, vytvořit soubor třídy, kde máte svou nativefunkci. Dostanete classsoubor.

Run javah -jni com.organisation.class_with_native_func, bude to generovat soubor záhlaví pro vás.

Je mnohem čistší než úpravou sami.

Odpovězeno 02/11/2010 v 07:16
zdroj uživatelem

hlasů
20

Budete muset přidat __na konec původní funkce getFileName teď, když je přetížený. Tví 2 C funkční prototypy by měl nyní vypadat takto:

JNIEXPORT jstring JNICALL Java_com_package_MyClass_getFileName__
  (JNIEnv *, jclass);

JNIEXPORT jstring JNICALL Java_com_package_MyClass_getFileName__I
  (JNIEnv *, jclass, jint);
Odpovězeno 27/10/2010 v 16:10
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more