2012-02-28 2 views
0

추신 : 실제로 작동하고 있습니다. 곧이 질문을 업데이트하겠다는 또 다른 문제가 있습니다.Android에서 C++에서 Java 코드를 호출하면

나는 다음과 같은 네이티브 코드가 있습니다

JNIEXPORT void JNICALL Java_com_rmsdk_wrapper_RMServices_init(JNIEnv *env, jobject thiso, 
     jstring prodName, jstring version) { 

    jclass thisClass = env->GetObjectClass(thiso); 

    __android_log_print(ANDROID_LOG_DEBUG, "APP", "[findMethodId]");   
    jmethodID getDeviceName = env->GetMethodID(thisClass, "getDeviceName", "()Ljava/lang/String;"); 

    __android_log_print(ANDROID_LOG_DEBUG, "APP", "[invoke]");  
    jstring dvcName = (jstring) env->CallObjectMethod(thiso, getDeviceName); 

    __android_log_print(ANDROID_LOG_DEBUG, "APP", "[strings retrivied]"); 

그리고 자바 클래스

public String getDeviceName() { 
    String deviceName = Build.MODEL; 
    LogU.v("APPServices", "getDeviceName("+deviceName+")"); 
    return deviceName; 
} 

에서 각각의 방법을하지만, 다음을 실행할 때 발생합니다

D/RMSDK:DRM(3717): [findMethodId] 
D/RMSDK:DRM(3717): [invoke] 
I/DEBUG(27674): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG(27674): Build fingerprint: 'MOTO/PORTLA/wifi_hubble:3.2/H.6.6-27/1317781165:user/ota-rel-keys,release-keys' 
I/DEBUG(27674): pid: 3717, tid: 3717 >>> br.com.abril.iba <<< 
I/DEBUG(27674): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 
I/DEBUG(27674): r0 00000000 r1 40c33038 r2 5651b1ec r3 be86444c 
I/DEBUG(27674): r4 0000008c r5 8282a018 r6 82805e28 r7 826f0a68 

방법은 발견되었지만 호출 할 때 충돌합니다 (어떤 방법이든). 어떻게 해결할 수 있습니까? 왜 작동하지 않는 지 모르겠습니다.

PS : 같은 오류가 귀하의 코드 내 HTC의 디자 이어 Z에 잘 실행

+1

thiso가 NULL이 아닌 것은 확실합니까? 그리고 thisClass가 NULL이 아닌가? 그리고 getDeviceName이 NULL이 아닌가? –

+0

그래, = / –

답변

0

가, 내가 안드로이드 NDK-r7b를 사용하여 원시 부분을 컴파일 안드로이드 NDK5 & NDK7B으로 발생합니다. init(String s1, String s2);을 실행하는 동일한 클래스에 getDeviceName() 메소드가 있습니까? 다음 Java 코드를 사용했습니다.

public class HelloJni extends Activity { 

public native void init(String s1, String s2); 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    init("",""); 
} 

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

public String getDeviceName() { 
    String deviceName = Build.MODEL; 
    Log.v("APPServices", "getDeviceName("+deviceName+")"); 
    return deviceName; 
} 
} 
관련 문제