JNIEXPORT and JNICALL in Android NDK

JNIEXPORT and JNICALL in Android NDK

本文关键字:Android NDK in JNICALL and JNIEXPORT      更新时间:2023-10-16

在使用c++编写的一些源代码时,我发现了这些宏:

JNIEXPORT return_type JNICALL function_name(…){然而,Android NDK示例并没有使用它们。我读了一些Oracle的文档,但我仍然很困惑。

在使用Android NDK时,我一定要使用它们吗?

询问的原因之一—eclipse CDT中的宏断行语法高亮显示:)

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

/*
 * @(#)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头文件中,这些宏是空的。所以我猜,只要你不希望你的本地代码在windows与oracle JVM中执行,你可以删除这些宏。

检查您希望从Android NDK中获得的平台的包含路径是否已添加到项目的C c++包含中。可以这样做:

    打开项目属性
  • 扩展C/c++通用
  • 点击路径和符号
  • 在include部分添加NDK所需平台的include文件夹的路径(例如${ANDROID_NDK_HOME}platformsandroid-9arch-armusrinclude)