2015-07-19 31 views
2

作爲一款Android NDK首發,我嘗試運行helloJni的例子,我在NDK網站在這裏找到: https://developer.android.com/ndk/samples/sample_hellojni.html的Android NDK的C++的HelloWorld程序崩潰

我設法編譯和程序與所提供的C代碼運行項目。但是,我想將代碼轉換爲C++等效。幾個小時都沒有成功。

我做了什麼:

重命名JNI/HELLO-jni.c - > JNI/HELLO-jni.cpp

在JNI變化/ android.mk

LOCAL_SRC_FILES := hello-jni.c 

LOCAL_SRC_FILES := hello-jni.cpp 

用jni/hello-jni.cpp中的以下C++代碼替換c代碼

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

JNIEXPORT jstring JNICALL 
    Java_com_example_hellojni_HelloJni_stringFromJNI 
    (JNIEnv *env, jobject obj) 
    { 
     return env->NewStringUTF("Hello from C++ over JNI!"); 
    } 

大廈是成功的輸出

/home/wenchao/Projects/shared/android-ndk-r10e/ndk-build all 
Android NDK: WARNING: APP_PLATFORM android-21 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml  
[arm64-v8a] Install  : libhello-jni.so => libs/arm64- v8a/libhello-jni.so 
[x86_64] Install  : libhello-jni.so => libs/x86_64/libhello-jni.so 
[mips64] Install  : libhello-jni.so => libs/mips64/libhello-jni.so 
[armeabi-v7a] Install  : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so 
[armeabi] Install  : libhello-jni.so => libs/armeabi/libhello-jni.so 
[x86] Install  : libhello-jni.so => libs/x86/libhello-jni.so 
[mips] Install  : libhello-jni.so => libs/mips/libhello-jni.so 

18:09:12 Build Finished (took 412ms) 

但我的設備上,我得到了

Unfortunately, HelloJni is stopped. 

而且很奇怪,在logcat中無輸出。 Logcat完全空白。 (這可能是一個單獨的問題,我需要修復,雖然)

我不知道如何在所有:(

+0

C不是C++不是C – Olaf

+0

我知道,但我們可以建立C++代碼NDK右 – GingerJim

+0

誰是「我們」的提示:!?。檢查我的編輯和重新思考 – Olaf

回答

3

明白了調試。

我們需要爲extern「C」包裝角落找尋C++代碼

#include <string.h> 
#include <jni.h> 
extern "C" { 


JNIEXPORT jstring JNICALL 
    Java_com_example_hellojni_HelloJni_stringFromJNI 
    (JNIEnv *env, jobject obj) 
    { 
    return env->NewStringUTF("Hello from C++ over JNI!"); 
    } 
}