所有ndk示例仅使用在标头中声明为extern并在cpp文件中定义的基本C函数.然后将头文件包含在包含jni回调的C文件中后,一切正常.
可以在android ndk中使用C++类吗?我的应用程序不会是本机活动,它仍然会有一个重要的Java部分,但它会调用本机C代码进行CPU密集型计算(已经用C++编写,包含类和其他C++东西).
现在这是我的hello-world,就像strcuture:
文件"first.h"
#ifndef FIRST_H
#define FIRST_H
class Test
{};
#endif /* FIRST_H */
Run Code Online (Sandbox Code Playgroud)
档案"second.cpp"
#include <jni.h>
#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
Run Code Online (Sandbox Code Playgroud)
最后是Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtwolib-second
LOCAL_SRC_FILES := second.cpp
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
非常基本,但不编译.在包含头文件时,转换.c文件中的second.cpp会引发错误,我想这是因为它不是C++文件.
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Test'
Run Code Online (Sandbox Code Playgroud)
使它.cpp引发以下错误:
make: *** No rule to …Run Code Online (Sandbox Code Playgroud)