【问题标题】:Android NDK c++ helloworld program crashAndroid NDK c++ helloworld 程序崩溃
【发布时间】:2015-07-19 17:13:43
【问题描述】:

作为 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 是完全空白的。 (不过,这可能是我需要解决的一个单独问题)

我完全不知道如何调试:(

【问题讨论】:

  • C 不是 C++ 不是 C!
  • 我知道,但是我们可以用 NDK 构建 c++ 代码,对吧?
  • “我们”是谁?提示:检查我的编辑并重新考虑。
  • 你的“编辑”是什么意思?

标签: android c++ android-ndk


【解决方案1】:

知道了。

我们需要在 c++ 代码周围加上 extern "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!");
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多