2016-09-16 55 views
0

我试图在Polaris Viewer Kit SDK在我的项目整合,但我因为这个错误的卡:只的Android库提供较少的机库结构比主项目

Could not dispatch event: class com.myproject.documents.model.callback.DocumentCallback to subscribing class class com.myproject.documents.ui.DocumentListFragment 
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.myproject-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myproject-2/lib/arm, /system/fake-libs, /data/app/com.myproject-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]] couldn't find "libEX_Engine7.so" 

的SDK是提供本地库对于armeabix86体系结构,但我的项目已经为armeabi-v7ax86_64提供了库。

所以我想,因为该项目提供了一些armeabi-v7a库,该设备期望找到该架构的所有库。它是否正确?

有没有什么我可以做的,使设备使用armeabi-v7a库时可用并退回到armeabi当不是?

附加信息:我正在使用Android Studio 2.2 RC2,Gradle 2.14.1进行开发,并使用Android 7 DP5在Nexus 6上进行测试。

回答

1

Is there anything that I can do to make the device to use armeabi-v7a when a library is available and fallback to armeabi when is not?

系统自动执行此操作。如果该设备支持armeabi,但不支持armeabi-v7a,则会使用armeabi。

问题是,您的应用程序不支持armeabi-v7a,因为您使用的SDK不支持。除非你可以重建armeabi-v7a的SDK,否则你只能支持armeabi。

+0

嘿感谢答案。但是我仍然不明白为什么抛出异常'UnsatisfiedLinkError':'libEX_Engine7.so'文件在'lib/armeabi'文件夹中可用(我已经检查过APK),但是操作系统只在'/ LIB/armeabi-v7a'。 –

+0

查看其他答案(@ mstorsjo's有一个解决方法)。它只会搜索这些目录中的一个。 –

0

除了Dan Albert的回答,请记住armeabi和armeabi-v7a是二元兼容的。所以如果SDK只提供armeabi,你实际上可以创建一个新的armeabi-v7a目录并将armeabi文件复制到它,它会工作得很好。如果SDK已经针对armeabi-v7a进行了编译,它的效率可能会降低。 (虽然你不能对arm64-v8a或x86_64执行相同的操作,因为这些是不同于armeabi(-v7a)和x86的体系结构。)

并且换句话说:如果您自己的应用程序中的本机代码对性能不敏感(在实践中,如果它没有使用大量的浮点数学运算),那么通过舍弃armeabi-v7a版本并仅运输armeabi ,你会在二进制文件上保存一些大小。

1

操作系统将只从最匹配的单个文件夹中提取库。

例如: 如果你有

  • armeabi与库
  • armeabi-V7A与库

armeabi-运行v7a co mpatible设备将查找文件夹(按顺序)

  • armeabi-V7A
  • armeabi

,它会创建文件夹的时候了(armeabi-V7A),和将只采取该文件夹帐户导致发现库

更多关于支持和选择abis的信息:https://developer.android.com/ndk/guides/abis.html#am

ps。我前一段时间的问题,我是只支持armeabi平台,但依赖库的一个不支持的所有ABIS,导致许多崩溃(不合适的链接错误)在非严格armeabi设备

+0

这正是我所经历的行为。 –