作为 Android NDK 初学者,我尝试运行在 ndk 网站中找到的 helloJni 示例: https://developer.android.com/ndk/samples/sample_hellojni.html
我成功地使用项目中提供的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 完全是空白的。 (不过,这可能是我需要解决的一个单独问题)
我根本不知道如何调试:(
最佳答案
明白了。
我们需要 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!");
}
}
关于Android NDK c++ helloworld 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503772/