Jestem nowy dla jni i przechodziłem przez samouczek, aby wdrożyć prostą natywną metodę, ale otrzymuję niezadowalający link. O ile mi wiadomo, dokładnie postępowałem zgodnie z instrukcjami zawartymi w samouczku. Proszę pomóż mi.Używanie jni w Androidzie: UNsatisfiedLinkError
Oto kod java wrapper:
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");
}
}
Oto, co wygląda jak moja Android.mk pliku:
LOCAL_PATH: = $ (zadzwonić do mojego-dir)
włączają $ (CLEAR_VARS)
LOCAL_MODULE: = do kwadratu LOCAL_SRC_FILES: = kwadrat.c
obejmują $ (BUILD_SHARED_LIBRARY)
Oto co mój plik .c wygląda następująco:
#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);
}
A oto wygląda mój plik .h jak:
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
Dziękuję bardzo. Czuję się głupio. Właśnie skopiowałem i wkleiłem plik c z samouczka, ale użyłem innej nazwy pakietu niż on. Stąd niedopasowanie. Nie słyszałem o tej drugiej drodze. Czy mógłbyś zamieścić link gdzieś, gdzie mogę przeczytać więcej na ten temat? Dzięki jeszcze raz. – user1487736
Oczywiście preferuję metodę JNI_OnLoad: http://developer.android.com/guide/practices/jni.html#native_libraries i utrzymuję tablicę wszystkich funkcji i podpisów. Lemme napisz jakiś przykładowy kod, a ja poprawię odpowiedź. – AlcoJaguar