我有一个可用的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项目中以相同的方式包含了x86
和lib
本机库;
这些是您从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}}进行验证,如果不是更好。
答案 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