Android NDK c++ helloworld 程序崩溃

标签 android c++ android-ndk

作为 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/

相关文章:

c++ - 在 GitHub 中,如何在 "RecoverCompact"中搜索 "CPubKey::RecoverCompact"

c++ - 编译自定义 tf 操作,其中输入为 5d 张量

android - 无法同步 Gradle 项目 - Android Studio 2.2

java - 使用正确的编码 jni 将 jcharArray 转换为 String

Android NDK调试——硬件断点

c# - 如何对Android Seekbars做限制,不让用户直接移动?

android - Kotlin 中的外部 MySQL 数据库

java - java android中的xml解析问题

java - 为什么我的简单 Toast 不想出现并且应用程序崩溃?

C++我如何为switch case做异常处理