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

时间:2016-09-27 14:11:59

标签: android android-5.0-lollipop android-6.0-marshmallow fatal-error opencv4android

我的应用程序中有3个模块名为(例如)" app" " emp-library" ,的"面文库" 即可。

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

emp-library - 它是图书馆模块,它包含基本员工表单和相机模块,以获取员工图像,图像将传递给面部库检测脸部。

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

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

Fatal signal 11 (SIGSEGV), code 2, fault addr 0xdeadbaad in tid 32696

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

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

更新

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

- >我已经从 app 模块中添加了 face-library 原生调用(在我的情况下我不应该使用此功能)。现在应用没有崩溃

- >因此,问题是 emp-library 模块" face-library 模块调用。两者都是库模块。

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

1 个答案:

答案 0 :(得分:6)

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

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

您可以在清单中获得权限,或者在执行时询问权限(例如相机)。

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

或者您可以使用Logger,它的工作方式类似于c 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

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)
}

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

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