OpenTok提供了一个.jar文件和2个jniLibs:armeabi / libopentok.so和x86 / libopentok.so。 Card.io导入"编译' io.card:android-sdk:5.1.2'"
已编译,我在我的APK中获得此结构:
lib
arm64-v8a
libcardioDecider.so
libcardioRecognizer_tegra2.so
libcardioRecognizer.so
libopencv_core.so
libopencv_imgproc.so
armeabi
libcardioDecider.so
libopentok.so
armeabi-v7a
libcardioDecider.so
libcardioRecognizer_tegra2.so
libcardioRecognizer.so
libopencv_core.so
libopencv_imgproc.so
mips
libcardioDecider.so
x86
libcardioDecider.so
libcardioRecognizer_tegra2.so
libcardioRecognizer.so
libopencv_core.so
libopencv_imgproc.so
libopentok.so
x86_64
libcardioDecider.so
libcardioRecognizer_tegra2.so
libcardioRecognizer.so
libopencv_core.so
libopencv_imgproc.so
但我的应用程序崩溃(当我使用opentok时):
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[
[zip file "/data/app/com.mypackage.app-1/base.apk"],
nativeLibraryDirectories=[/data/app/com.mypackage.app-1/lib/arm,
/data/app/com.mypackage.app-1/base.apk!/lib/armeabi-v7a,
/vendor/lib,
/system/lib]
]] couldn't find "libopentok.so"
该应用与card.io正常工作。
如果我删除card.io,我的APK lib现在是:
lib
armeabi
libopentok.so
x86
libopentok.so
OpenTok现在正常运作。
我的猜测是:因为应用程序找到了一个目录" armeabi-v7a",它希望每个.so文件都进入。但是对于" libopentok.so",它只适用于" armeabi"。
如何解决我的问题?我是否必须将我的.so文件复制到每个目录中?
答案 0 :(得分:1)
大多数设备都是armeabi-v7a
,并且通常是您用来测试的设备。
Android寻找二进制文件的方式是使用最合适的集合。
例如,它不能同时使用armeabi-v7a
和armeabi
中的库。
因此,这里发生的是:
armeabi-v7a
.so
个文件,因此不会更深入搜索(例如armeabi)armeabi-v7a
目录中有一些缺少的库(libopentok.so)如果您希望与设备兼容,则必须为任何支持的配置提供每个.so
文件。
编辑:我不是100%肯定,但armeabi版本可以与armeabi-v7a兼容。值得一试。