Sono un neofita di jni e stavo esaminando un tutorial per implementare un semplice metodo nativo, ma sto ottenendo un insoddisfiedlinkerror. Per quanto ne so, ho seguito esattamente i passaggi del tutorial. Mi aiuti per favore.Utilizzo di jni in Android: UNsoddisfiedLinkError
Ecco il codice Java con avvolgitore:
package com.cookbook.jni;
public class SquaredWrapper {
// Declare native method (and make it public to expose it directly)
public static native int squared(int base);
// Provide additional functionality, that "extends" the native method
public static int to4(int base)
{
int sq = squared(base);
return squared(sq);
}
// Load library
static {
System.loadLibrary("squared");
}
}
Ecco quello che il mio file Android.mk assomiglia:
local_path: = $ (chiamare il mio-dir)
includono $ (CLEAR_VARS)
LOCAL_MODULE: = quadrato LOCAL_SRC_FILES: = squared.c
includono $ (BUILD_SHARED_LIBRARY)
Ecco ciò che il mio file .c assomiglia:
#include "squared.h"
#include <jni.h>
JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
(JNIEnv * je, jclass jc, jint base)
{
return (base*base);
}
Ed ecco ciò che il mio file h assomiglia:
enter code here/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cookbook_jni_SquaredWrapper */
#ifndef _Included_com_cookbook_jni_SquaredWrapper
#define _Included_com_cookbook_jni_SquaredWrapper
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_cookbook_jni_SquaredWrapper
* Method: squared
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_cookbook_jni_SquaredWrapper_squared
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
Grazie mille. Mi sento stupido. Ho appena copiato e incollato il file c dal tutorial, ma ho usato un nome di pacchetto diverso da quello che ha fatto. Da qui la mancata corrispondenza. Non ho sentito di quella seconda strada. Potrebbe postare un link dove posso leggere di più? Grazie ancora. – user1487736
Certo, il metodo che preferisco è usare JNI_OnLoad: http://developer.android.com/guide/practices/jni.html#native_libraries e mantenere un array di tutte le mie funzioni e firme. Fammi scrivere un codice di esempio e modificherai la mia risposta. – AlcoJaguar