我正在尝试将C ++文件集成到我的android项目中。 我尝试使用Android Studio的ndk功能,但我遇到了几个问题。所以我通过在.gradle文件中进行以下更改来阻止Android Studio创建自己的Android.mk文件 -
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
我创建了一个gradle任务来编译我的库文件。
task ndkBuild(type: Exec) {
commandLine ndk_build_path, '-C', file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
其中" ndk_build_path"在gradle.properties文件中定义
ndk_build_path=/Users/shadabunique/Library/Android/sdk/ndk-bundle/ndk-build
我使用的平台是Mac。
我的C ++文件中的头文件是 -
#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <vector>
#include <ctime>
#include <sys/time.h>
#include <cmath>
#include <queue>
#include <mutex>
#include <future>
我还用内容创建了Application.mk文件 -
APP_ABI := all
APP_STL := gnustl_static
APP_STL :=stlport_static
我已将所有C ++文件,Android.mk和Application.mk文件放在src / main / java / jni文件夹中。
我收到以下错误 -
mutex: No such file or directory
future: No such file or directory
请帮忙!
答案 0 :(得分:2)
当我将c ++ 11代码移植到ndk上时,我遇到了类似的问题。
NDK(10e)一直抱怨gnustl_xxx
或stlport_xxx
丢失了内容,但我发现c++_static
内容很顺利。
因此,您可以尝试将此添加到Application.mk
APP_STL:=c++_static
和Android.mk
LOCAL_CPPFLAGS += -std=c++11
答案 1 :(得分:0)
我通过进行以下更改来解决问题 -
Android.mk -
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myLib
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libmyLib.so
LOCAL_LDLIBS += -llog
include $(PREBUILT_SHARED_LIBRARY)
Application.mk
APP_ABI := all
APP_STL :=c++_static
希望有人可以得到一些帮助。