java – OpenCV Android – 无法解析相应的JNI函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – OpenCV Android – 无法解析相应的JNI函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3349字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试使用Opencv设置Android Studio,遵循此处概述的教程:https://www.youtube.com/watch?v=OTw_GIQNbD8
我可以得到给出教程的人获得的结果,但在尝试实际使用Opencv的一些功能时遇到了一些麻烦.
我能够加载Opencv库,但在尝试使用一些本机函数,如“Imgcodecs.imread”时,我收到错误:“.lang.UnsatisfiedLinkError:找不到长期org.opencv.imgcodecs.Imgcodecs.imread_1的实现( java.lang.String中)”
我相信我已将问题追溯到以下问题:
[![在此输入图片说明] [1]] [1]
似乎Android Studio无法检测到我猜的应该从我现在在app / src / main中的jniLibs文件夹中获取的本机C代码?
我已经尝试将Android Studio更新到最新的稳定版本,我已经修复了我的android SDK和NDK的文件路径,因为白色空间显然会影响本机代码的运行.这个问题仍然存在.
我一直在努力解决这个问题,过去4个小时,任何帮助都将不胜感激!
解决方法:
在努力工作一周之后解决Android Studio的ndk问题之后,我想我是合适的人给你一个关于这个问题的实际答案.这意味着您已经解决了问题,但我可以提供有关如何在需要时设置自己的本机文件的更多信息.
您必须要知道的第一件事是,目前Android Studio仍然存在一些内部缺陷,Java源文件中的本机函数声明可能仍会触发“无法解析…”消息.实际上是可以的,只要你的所有源代码都是正确的并且你已经正确地完成了编译,没有什么是错的.
如果您的项目中没有自己的本机文件(C,C),只需将.a或.so本机库放在src / main / jniLibs文件夹中,您就不必修改gradle文件中的任何内容.系统会自动为您完成所有操作.
如果您有自己的本机文件并将它们放在src / main / jni文件夹中,那么您必须创建自己的makefile并将它们放在jni文件夹中.您还必须修改应用程序模块中的gradle文件.
这是我为opencv的面部检测样本做的,我从这个精彩的帖子(Here)中得到了原始代码,它实际上是从另一个方法中修改的,用于更简单的执行:
我的项目结构:
Project Structure
我的makefile(确保你有库的原始sdk以供makefile中的参考):
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include /home/ng/Desktop/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
LOCAL_MODULE := detection_based_tracker
include $(BUILD_SHARED_LIBRARY)
Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a armeabi
APP_PLATFORM := android-19
我在app模块中的gradle.build文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "org.opencv.samples.facedetect"
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
sourceSets.main.jni.srcDirs = []
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
// ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
commandLine "$ndkDir/ndk-build",
'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
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile project(':openCVLibrary300')
}
您实际上不必更改其他gradle文件来编译项目的本机部分.
您还可以通过命令行编译本机源代码,并将.so文件放回jniLibs文件夹.这也有效.
我希望这可以帮助解决你的问题.
内容总结
以上是互联网集市为您收集整理的java – OpenCV Android – 无法解析相应的JNI函数全部内容,希望文章能够帮你解决java – OpenCV Android – 无法解析相应的JNI函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。