2014-12-24 4 views
2

자바 코드를 찾을 수 없습니다 :안드로이드 NDK는 기본 기능을

package com.example.maxim.myapplication; 

//... 

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView tv = new TextView(this); 
     tv.setText(stringFromJNI()); 
     setContentView(tv); 
    } 

    public native String stringFromJNI(); 

    static { 
     System.loadLibrary("hello-jni"); 
     } 


} 

C 코드 :

#include <string.h> 
#include <jni.h> 


    jstring Java_com_example_maxim_myapplication_MainActivity_stringFromJNI(JNIEnv* env, 
                 jobject thiz) 
    { 


     return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI ."); 
    } 

로그 캣 출력 :

Process: com.example.maxim.myapplication, PID: 2306 
    java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.example.maxim.myapplication.MainActivity.stringFromJNI() (tried Java_com_example_maxim_myapplication_MainActivity_stringFromJNI and Java_com_example_maxim_myapplication_MainActivity_stringFromJNI__) 
      at com.example.maxim.myapplication.MainActivity.stringFromJNI(Native Method) 
.... 

패키지 이름은 이름과 동일 함수의 이름이지만 오류가 있습니다. 패키지 이름은 함수의 이름과 같지만 오류는

입니다 또한 확인 할 -

답변

1

당신이

JNIEXPORT jstring Java_com_example_maxim_myapplication_MainActivity_stringFromJNI (JNIEnv *env, jobject obj) 

중요한 점처럼 공유 객체 내에 네이티브 메소드를 선언해야 링커/컴파일러

편집하여 네이티브 메소드 수출/노출 instrucs JNIEXPORT입니다 실제로 "올바른"so (libhello-jni.so)이로드되고 있는지 확인하십시오 (실제로이 so에 메서드 구현이 포함되어 있습니다. so이 라이브러리 경로의 어딘가에 있음)

이 매우로드

jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) 
{ 

    LOGI("In JNI_OnLoad()"); 
    return JNI_VERSION_1_6; // or the version corresponded to your NDK version 
} 
+0

에 당신의 so 디버그 logcat 추가 동일한 오류 이러한 경우 @Hemul는, 실제로 그렇게 메소드 구현이로드되고이 포함 된 객체 있는지 확인 – Hemul

+0

(15 문자) 대답에 대한 내 편집보기 –

관련 문제