使用Android ndk/jni与C++编程

16 浏览
0 Comments

使用Android ndk/jni与C++编程

所有的ndk示例只使用在头文件中声明为extern的基本C函数,并在cpp文件中定义。然后,在包含头文件的C文件中包含jni回调时,一切都可以正常工作。

在android ndk中是否可以使用C++类?我的应用程序不会是一个本地活动,它仍然有一个重要的java部分,但它将调用用于CPU密集计算的本机C代码(已经用C++编写,包括类和其他C++内容)。

现在,这是我的类似hello-world的结构:

文件“first.h”

#ifndef FIRST_H

#define FIRST_H

class Test

{};

#endif /* FIRST_H */

文件“second.cpp”

#include

#include "first.h"

#ifdef __cplusplus

extern "C" {

#endif

jint Java_com_example_twolibs_TwoLibs_add( JNIEnv* env,

jobject this,

jint x,

jint y )

{

Test t;

return 0;

}

#ifdef __cplusplus

}

#endif

最后是Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libtwolib-second

LOCAL_SRC_FILES := second.cpp

include $(BUILD_SHARED_LIBRARY)

相当基本,但无法编译。将second.cpp转换为.c文件在包含头文件时引发错误,我猜这是因为它不是一个C++文件。

错误:在“Test”之前预期“=”,“,”,“;”,“asm”或“__attribute__”

将其改为.cpp会引发以下错误:

无法生成规则以制作目标“/cygdrive/c/android-ndk-r5c/samples/twolibs/jni/second.c”,所需目标为“/cygdrive/c/android-ndk-r5c/samples/two-libs/obj/local/armeabi/objs/twolib-second/second.o”。停止。

有什么办法可以让这个东西编译吗?

谢谢

0