jni'ye yeni geldim ve basit bir yerel yöntem uygulamak için bir öğreticiye gidiyorum, ancak bir bağlantısız bir iletişim kuralı alıyorum. Bildiğim kadarıyla, öğreticideki adımları tam olarak takip ettim. Lütfen bana yardım et. LOCAL_PATHAndroid'de jni'yi kullanma: UNsatisfiedLinkError
: = $
$ arasında (benim-dir diyoruz) gibi İşte benim Android.mk dosya nasıl göründüğü ve
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"); } }
: Burada
java sarıcı kodudur (CLEAR_VARS)LOCAL_MODULE: = kare LOCAL_SRC_FILES: = squared.c
$ (BUILD_SHARED_LIBRARY)
İşte
gibi benim .c dosyası nasıl göründüğü ve şunlardır: benim .h dosyasını göründüğünü burada
#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);
}
Ve benzeri:
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
Çok teşekkür ederim. Aptal hissediyorum. Sadece c dosyasını eğiticiden kopyaladım ve yapıştırdım, ama ondan farklı bir paket adı kullandım. Bu nedenle uyumsuzluk. İkinci yolu hiç duymadım. Daha fazla okuyabileceğim bir yere bir bağlantı gönderebilir miyim? Tekrar teşekkürler. – user1487736
Elbette, tercih ettiğim yöntem JNI_OnLoad kullanmaktır: http://developer.android.com/guide/practices/jni.html#native_libraries ve tüm işlevlerimi ve imzalarımı bir dizi tutmak. Lemme bir örnek kod yaz ve cevabımı düzenlerim. – AlcoJaguar