저는 jni를 처음 접했고, 간단한 네이티브 메소드를 구현하기위한 튜토리얼을 다룰 예정 이었지만, 만족하지 못하는 링크 오류가 발생했습니다. 지금까지 내가 아는 한, 튜토리얼의 단계를 정확히 따라 갔다. 도와주세요. LOCAL_PATH안드로이드에서 jni 사용하기 : UNsatisfiedLinkError
: = $
은 $을 포함한다 (내-DIR 전화)처럼 여기 내 Android.mk 파일이 어떻게 표시되는지를 보여줍니다
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"); } }
: 여기
는 자바 래퍼 코드 (CLEAR_VARS)LOCAL_MODULE : = 제곱 LOCAL_SRC_FILES : = squared.c
는 $ (BUILD_SHARED_LIBRARY)
다음
이처럼 내 .c 파일이 보이는 무엇을 포함한다 : 내 .H 파일이 모습입니다 여기
#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);
}
과 같은 :
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
정말 고마워요. 내 자신이 멍청하게 느껴진다. 방금 튜토리얼에서 c 파일을 복사하여 붙여 넣었지만, 나는 그가했던 것보다 다른 패키지 이름을 사용했습니다. 따라서 불일치. 나는 두 번째 방법에 대해 들어 보지 못했다. 더 자세한 정보를 읽을 수있는 링크를 게시 할 수 있습니까? 다시 한번 감사드립니다. – user1487736
물론 내가 선호하는 방법은 JNI_OnLoad : http://developer.android.com/guide/practices/jni.html#native_libraries를 사용하고 모든 기능과 서명 배열을 유지하는 것입니다. Lemme은 몇 가지 예제 코드를 작성하고 답변을 수정하겠습니다. – AlcoJaguar