SQLiteDatabase.loadLibs使用x86本机库时的致命信号11

时间:2014-03-18 06:03:46

标签: android android-studio sqlcipher

我有一个可用的Android应用程序,它使用armeabi库来进行SQLCipher,但我无法让该应用程序适用于x86

当我尝试在x86设备上调试应用时,我可以逐步浏览应用,直到调用SQLiteDatabase.loadLibs(this);,这会导致A/libc﹕ Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)

我已经检查了logcat中的库加载;

armeabi

D/dalvikvm? Trying to load lib /data/data/com.eglootech.sqlcipher/lib/libstlport_shared.so 0x42562c10
D/dalvikvm? Added shared lib /data/data/com.eglootech.sqlcipher/lib/libstlport_shared.so 0x42562c10
D/dalvikvm? No JNI_OnLoad found in /data/data/com.eglootech.sqlcipher/lib/libstlport_shared.so 0x42562c10, skipping init
D/dalvikvm? Trying to load lib /data/data/com.eglootech.sqlcipher/lib/libsqlcipher_android.so 0x42562c10
D/dalvikvm? Added shared lib /data/data/com.eglootech.sqlcipher/lib/libsqlcipher_android.so 0x42562c10
D/dalvikvm? No JNI_OnLoad found in /data/data/com.eglootech.sqlcipher/lib/libsqlcipher_android.so 0x42562c10, skipping init
D/dalvikvm? Trying to load lib /data/data/com.eglootech.sqlcipher/lib/libdatabase_sqlcipher.so 0x42562c10
D/dalvikvm? Added shared lib /data/data/com.eglootech.sqlcipher/lib/libdatabase_sqlcipher.so 0x42562c10
I/Database? JNI_OnLoad called
I/Database? JNI_OnLoad register methods

86

D/dalvikvm? Trying to load lib /data/app-lib/com.eglootech.electorlookup-2/libstlport_shared.so 0x41c3e430
D/dalvikvm? Added shared lib /data/app-lib/com.eglootech.electorlookup-2/libstlport_shared.so 0x41c3e430
D/dalvikvm? No JNI_OnLoad found in /data/app-lib/com.eglootech.electorlookup-2/libstlport_shared.so 0x41c3e430, skipping init
D/dalvikvm? Trying to load lib /data/app-lib/com.eglootech.electorlookup-2/libsqlcipher_android.so 0x41c3e430
D/dalvikvm? Added shared lib /data/app-lib/com.eglootech.electorlookup-2/libsqlcipher_android.so 0x41c3e430
D/dalvikvm? No JNI_OnLoad found in /data/app-lib/com.eglootech.electorlookup-2/libsqlcipher_android.so 0x41c3e430, skipping init
D/dalvikvm? Trying to load lib /data/app-lib/com.eglootech.electorlookup-2/libdatabase_sqlcipher.so 0x41c3e430
D/dalvikvm? Added shared lib /data/app-lib/com.eglootech.electorlookup-2/libdatabase_sqlcipher.so 0x41c3e430
A/libc? Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 2313 (h.electorlookup)

为什么JNI_OnLoad来电失踪?

我可以进入我可以进入SQLiteDatabase.loadLibs(this);的调用,错误来自SQLiteDatabase以及loadLibs(android.content.Context context, java.io.File workingDir) workingDir /data/data/com.eglootech.sqlcipher/files armeabi的调用1}}。

我在Android Studio项目中以相同的方式包含了x86lib本机库;

libs folder with armeabi and x86

这些是您从SQLCipher下载的二进制文件,然后每个平台目录都压缩在.jar文件夹下,然后将zip重命名为lib.armeabi。它们在lib.x86.jar列表中显示,但它们是dependencies { compile fileTree(dir: 'libs', include: '*.jar') } 中的嵌套文件夹。

然后在Gradle中我有以下内容,应该确保复制本机文件;

x86

是否有理由不为.jar包含本地库?

我还尝试将这些库包含在armeabi中,而不是只包含在目录中; Android studio, gradle and NDK

该应用再次适用于x86但不适用x86

该应用只能使用armeabi库在x86上工作,但由于虚拟化而导致性能下降,我们希望使用正确的本机库{{1}}进行验证,如果不是更好。

1 个答案:

答案 0 :(得分:0)

原始问题是由ffmpeg -f dshow -i video="VIDBOX NW07":audio="Microphone (VIDBOX NW07)" -c:v libx264 out.mp4 文件夹的结构造成的,而且找不到正确的本机库。本机库需要位于单个.jar文件中。

最新版本的SQLCipher for Android通过AAR包分发,Gradle中的集成可以通过将以下内容添加到.jar文件来执行:

app/build.gradle