Android NDK中的JNIEXPORT和JNICALL

在使用C ++编写的源代码时,我发现了这些macros:

JNIEXPORT return_type JNICALL function_name(…){但是,Android NDK示例不使用它们。 我从Oracle读了一些文档,但是我仍然感到困惑。

在使用Android NDK时,我是否必须使用它们?

请求的原因之一 – 在eclipse CDT中的macros突破语法高亮:)

Solutions Collecting From Web of "Android NDK中的JNIEXPORT和JNICALL"

基本上是一个Windows问题,如果你看一下oracle Java jdk自带的文件jni_md_win32.h,这是macros定义:

/* * @(#)jni_md.h 1.14 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ #ifndef _JAVASOFT_JNI_MD_H_ #define _JAVASOFT_JNI_MD_H_ #define JNIEXPORT __declspec(dllexport) #define JNIIMPORT __declspec(dllimport) #define JNICALL __stdcall typedef long jint; typedef __int64 jlong; typedef signed char jbyte; #endif /* !_JAVASOFT_JNI_MD_H_ */ 

在头文件jni_md_linux.h中,这些macros是空的。 所以我想只要你不希望你的本地代码在oracle JVM的窗口中执行,你可以删除这些macros。

请检查您的Android NDK平台的包含path是否已添加到您的项目的C \ C ++包含中。 这可以如下完成:

  • 打开项目属性
  • 展开C / C ++一般
  • 点击path和符号
  • 在“包含”部分中,将path添加到NDK所需平台的include文件夹(例如$ {ANDROID_NDK_HOME} \ platforms \ android-9 \ arch-arm \ usr \ include)