Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android库提供的本机库架构少于主项目_Android_Android Ndk_Android Gradle Plugin_Build.gradle - Fatal编程技术网

Android库提供的本机库架构少于主项目

Android库提供的本机库架构少于主项目,android,android-ndk,android-gradle-plugin,build.gradle,Android,Android Ndk,Android Gradle Plugin,Build.gradle,我正在尝试将SDK集成到我的项目中,但由于以下错误,我被卡住了: 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.Pa

我正在尝试将SDK集成到我的项目中,但由于以下错误,我被卡住了:

 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仅为
armeabi
x86
体系结构提供本机库,但我的项目已经为
armeabi-v7a
x86\u 64
提供了库

所以我猜,由于该项目提供了一些
armeabi-v7a
库,因此该设备希望找到该体系结构的所有库。这是正确的吗

当库可用时,我可以做些什么使设备使用
armeabi-v7a
,当库不可用时,我可以回退到
armeabi

附加信息:我正在使用AndroidStudio 2.2 RC2、Gradle 2.14.1进行开发,并使用Android7 DP5在Nexus6上进行测试

我能做些什么使设备在库可用时使用armeabi-v7a,在库不可用时回退到armeabi

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

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

我能做些什么使设备在库可用时使用armeabi-v7a,在库不可用时回退到armeabi

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


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

除了Dan Albert的答案之外,请记住armeabi和armeabi-v7a是二进制兼容的。因此,如果SDK只提供armeabi,您实际上可以创建一个新的armeabi-v7a目录,并将armeabi文件复制到其中,这样就可以正常工作了。它的效率可能会低于为armeabi-v7a编译SDK的效率。(但不能对arm64-v8a或x86_64执行相同的操作,因为它们与armeabi(-v7a)和x86是不同的体系结构。)


反过来说,;如果您自己的应用程序中的本机代码对性能不太敏感(实际上,如果它不使用大量浮点运算),那么省略armeabi-v7a版本并只提供armeabi不会损失太多性能,而且二进制代码也会节省一些大小。

除了Dan Albert的答案,请记住,armeabi和armeabi-v7a是二进制兼容的。因此,如果SDK只提供armeabi,您实际上可以创建一个新的armeabi-v7a目录,并将armeabi文件复制到其中,这样就可以正常工作了。它的效率可能会低于为armeabi-v7a编译SDK的效率。(但不能对arm64-v8a或x86_64执行相同的操作,因为它们与armeabi(-v7a)和x86是不同的体系结构。)


反过来说,;如果您自己的应用程序中的本机代码对性能不太敏感(实际上,如果它不使用大量浮点运算),那么不使用armeabi-v7a版本,只提供armeabi,不会损失太多性能,并且可以在二进制文件上保存一些大小。

操作系统将只从与最匹配的单个文件夹获取库

例如: 如果你有

  • 带有2个库的armeabi
  • 1库的armeabi-v7a
在兼容armeabi-v7a的设备上运行时,它将按顺序查找文件夹

  • armeabi-v7a
  • 阿姆亚比
它将立即找到文件夹(armeabi-v7a),并且只考虑该文件夹,从而生成found1

有关支持和选择ABI的更多信息:


ps.不久前我遇到了一个问题,我只支持armeabi平台,但其中一个依赖项库确实支持所有ABI,这导致在非严格的armeabi设备上出现许多崩溃(未满足的链接错误)

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

例如: 如果你有

  • 带有2个库的armeabi
  • 1库的armeabi-v7a
在兼容armeabi-v7a的设备上运行时,它将按顺序查找文件夹

  • armeabi-v7a
  • 阿姆亚比
它将立即找到文件夹(armeabi-v7a),并且只考虑该文件夹,从而生成found1

有关支持和选择ABI的更多信息:


ps.不久前我遇到了一个问题,我只支持armeabi平台,但其中一个依赖项库确实支持所有ABI,这导致在非严格的armeabi设备上出现许多崩溃(不满意的链接错误)

嘿,谢谢你的回答。但是我仍然不明白为什么会抛出异常
unsatifiedlinkerror
:libEX_引擎7。因此
文件在
lib/armeabi
文件夹中可用(我已经检查了APK),但操作系统只在
/lib/armeabi-v7a
中查找。请参见此处的其他答案(@mstorsjo有一个解决方法)。它将只搜索其中一个目录。嘿,谢谢你的回答。但是我仍然不明白为什么会抛出异常
unsatifiedlinkerror
:libEX_引擎7。因此
文件在
lib/armeabi
文件夹中可用(我已经检查了APK),但操作系统只在
/lib/armeabi-v7a
中查找。请参见此处的其他答案(@mstorsjo有一个解决方法)。它将只搜索其中一个目录。这正是我正在经历的行为。这正是我正在经历的行为。