Android Marshmallow - 从另一个库模块调用库模块(本机库)崩溃

SKK*_*SKK 4 android fatal-error opencv4android android-5.0-lollipop android-6.0-marshmallow

我的应用程序中有3个模块,名为(例如)"app","emp-library","face-library".

app - 仅包含加载屏幕并打开emp-library库活动.

emp-library - 它是Library模块,它包含用于获取员工图像的基本员工表单和相机模块,并且图像将被传递到face-library以检测面部.

face-library - 它是Library模块,它包含用于检测面部的面部检测库(Native library - 自己的面部检测算法)

该应用程序正在Lollipop设备中运行.但是当我在Marshmallow中执行应用程序时,它会因以下异常而崩溃.

Fatal signal 11 (SIGSEGV), code 2, fault addr 0xdeadbaad in tid 32696
Run Code Online (Sandbox Code Playgroud)

注意:这是我在日志中收到的唯一错误消息.

我是否想要为Marshmallow设备构建任何特定的本机库?请有人帮我解决这个问题吗?

更新:

- >因为我无法找到任何技术错误(据我所知,我没有在本机代码中得到任何异常)我遵循了试错法.

- >我已经从app模块添加了face-library本机调用(在我的情况下我不应该使用它).现在应用程序没有崩溃.

- >所以,问题是" 来自emp-library模块的face-library模块调用".两者都是库模块.

Marshmallow中是否存在从库(emp-library)模块调用本机库(face-library)的约束?

uel*_*rdi 6

不,您不需要将特定版本编译为marshmallow.因为棉花糖在armeabi-v7和armeabi中工作,除了armV8是64位编译.

首先,尝试在armv8版本中编译库.

您可以在清单中获得权限,或者在执行时询问权限(例如摄像头).

您的错误是一般错误,因此,您可以尝试本机调试以查找哪个库提供错误https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?指数= ..%2F%.. 2Findex#0

或者您可以使用Logger,它的工作方式与ac printf类似.

这里是logger.h

#ifndef LOGGER_H
#define LOGGER_H

#include <strings.h>
#include <android/log.h>

#define LOG_INFO(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOG_ERROR(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , LOG_TAG,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO   , LOG_TAG,__VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN   , LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG,__VA_ARGS__)

#endif
Run Code Online (Sandbox Code Playgroud)

cpp文件中的示例:

#include "Foo.h"
#include "logger.h" //include your logger.h
#define LOG_TAG "your_Log_tag"

void Foo::myFunction(char * mystring)
{
 LOGV("Hello foo %s",mystring)
}
Run Code Online (Sandbox Code Playgroud)

我希望,这将帮助您找到错误的位置.如果您可以更具体,我可以帮助您解决问题.

我经常使用OpenCV c ++和Android进行图像处理,不幸的是这些错误很常见.