2012-02-28 5 views
0

PS:実際には、これは動作していますが、もうこの問題を更新するという別の問題があります。C++のJavaコードをAndroidでクラッシュさせる

私は、次のネイティブコードがあります。

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]"); 

とJavaクラス

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

同じエラーがAndroidのNDK5 & NDK7Bで起こる、私はアンドロイド-NDK-R7Bを使用してネイティブの一部をコンパイル。 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; 
} 
} 
関連する問題