我已下载OpenCV for Android 版本3.2 并将其java模块导入我的项目。我已将原生(c ++)代码复制到openCVLibrary320/app/src/main/jni
中的模块目录中。
如何创建Application.mk和Android.mk来编译这个sdk? (据我所知,ndk-build需要这两个文件)
答案 0 :(得分:0)
如果您想为OpenCV使用Java
API,那么您可以查看此post。
但是,如果您想在NDK端使用带有C/C++
代码的预构建OpenCV静态库,那么只需要Android.mk
和Application.mk
。在我的这些.mk
文件版本中,我从驱动器上的某个位置动态加载所需的预构建库。因此在构建时,.mk
文件将加载所需的静态库。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Location of SDK on my drive
OPENCVROOT := ${HOME}/opencv-sdk-android
OPENCV_CAMERA_MODULES := off
OPENCV_INSTALL_MODULES := on
OPENCV_LIB_TYPE := STATIC
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
# Load your local .cpp and .h files here.
LOCAL_SRC_FILES := hello-jni.c
LOCAL_LDLIBS := -lm -llog -ldl -lz
LOCAL_CPPFLAGS += -fexceptions -frtti -std=c++11
LOCAL_LDFLAGS += -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions -frtti -std=c++11 -D__STDC_CONSTANT_MACROS
APP_ABI := all
APP_PLATFORM=android-14
答案 1 :(得分:0)
很容易按照我的观点来做,
现在打开终端并打开这个
1) cd app/src/main
2) javah -d jni -classpath ../../build/intermediates/classes/debug write_your_Pakage_Name.className
My pakage name is com.example.cvlab.ndktest
class name -->nativeClass
现在在您的jni文件夹中创建android.mk文件并添加此代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#opencv
OPENCVROOT:= your opencv location
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
LOCAL_SRC_FILES := your cpp file name
LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyLibs
include $(BUILD_SHARED_LIBRARY)
现在创建Application.mk文件并编写此代码
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
现在转到你的build.gradel文件,然后defultConfiguation把这个
sourceSets.main {
jni.srcDirs = [] //disable automatic ndk-build call
}
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
commandLine "C:/Users/do/AppData/Local/Android/sdk/ndk-bundle /ndk-build.cmd",
'NDK_PROJECT_PATH=build/intermediates/ndk',
'NDK_LIBS_OUT=src/main/jniLibs',
'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
注意:如果你安装了你的android stdk和ndk而不是你必须在commond line中给这个文件夹位置,就像这样 C:/ Users / do / AppData / Local / Android / sdk / ndk-bundle
现在构建它将创建 jnilibs fodler 并且它将包含你的libs文件
现在转到你的mainjava文件并加载
static { 的System.loadLibrary( “MyLibs”); }
答案 2 :(得分:0)
虽然您已为Android.mk
请求了ndk-build
,但我建议CMake
CMakeLists.txt
建议将其用于原生项目。
在这种情况下,您可以查看Android Developers,它提供了两种解决方案,可将OpenCV 3.2.0 SDK集成到Android项目/应用程序中。该实现提供了适当且经过测试的集成,它利用OpenCV SDK中的-keepclassmembers class mx.ferreyra.callnumber.CFCallNumber {
boolean execute(java.lang.String, ...rest of signature);
void callPhone(org.json.JSONArray);
}
脚本来正确构建和链接库模块(包括第三方和SDK库),并且还包含要编码的头文件本机C / C ++类,它们是项目的一部分。