我的应用程序中有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 )的约束?
答案 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进行图像处理,不幸的是这些错误很常见。