Android 安卓可以';不要导入两个库

Android 安卓可以';不要导入两个库,android,gradle,spotify,cmusphinx,Android,Gradle,Spotify,Cmusphinx,我正在尝试创建一个android应用程序,它同时使用CNU项目Sphinx库和Spotify库。我可以在单独的项目中很好地实现这些库,但是当我尝试将它们合并到一个项目中时,我得到了错误: 14178-14178/com.tmacstudios.spotifyvoice E/AndroidRuntime: FATAL EXCEPTION: main Process: com.tmacstudios.spotifyvoice, PID: 14178 java.lang.Unsatisfied

我正在尝试创建一个android应用程序,它同时使用CNU项目Sphinx库和Spotify库。我可以在单独的项目中很好地实现这些库,但是当我尝试将它们合并到一个项目中时,我得到了错误:

14178-14178/com.tmacstudios.spotifyvoice E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.tmacstudios.spotifyvoice, PID: 14178
  java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.tmacstudios.spotifyvoice-2/base.apk"],nativeLibraryDirectories=[/data/app/com.tmacstudios.spotifyvoice-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libgnustl_shared.so"
      at java.lang.Runtime.loadLibrary(Runtime.java:367)
      at java.lang.System.loadLibrary(System.java:988)
      at com.spotify.sdk.android.player.NativeSdkPlayer.nativeInit(NativeSdkPlayer.java:44)
      at com.spotify.sdk.android.player.NativeSdkPlayer.<clinit>(NativeSdkPlayer.java:34)
      at com.spotify.sdk.android.player.Player.<init>(Player.java:310)
      at com.spotify.sdk.android.player.Player.create(Player.java:356)
      at com.spotify.sdk.android.player.Player.access$000(Player.java:86)
      at com.spotify.sdk.android.player.Player$Builder.build(Player.java:282)
      at com.spotify.sdk.android.player.Spotify.getPlayer(Spotify.java:110)
      at com.spotify.sdk.android.player.Spotify.getPlayer(Spotify.java:76)
      at edu.cmu.pocketsphinx.demo.PocketSphinxActivity.onActivityResult(PocketSphinxActivity.java:272)
      at android.app.Activity.dispatchActivityResult(Activity.java:6758)
      at android.app.ActivityThread.deliverResults(ActivityThread.java:4726)
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4773)
      at android.app.ActivityThread.access$1500(ActivityThread.java:205)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:145)
      at android.app.ActivityThread.main(ActivityThread.java:6895)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

感谢您的帮助。

为了更清楚地显示我问题的答案,以下是解决我问题的评论线索中的信息:


我的猜测是,它们都有NDK库,但它们都支持不同的CPU体系结构。特别是对于具有64位CPU的设备,Android希望使用一组一致的库:全部64位或全部32位。因此,如果一个库发布64位,而另一个库只发布32位,则有人会丢失,IIRC它是唯一的32位发布器。检查每个库的内容,并查看哪些CPU体系结构似乎受到支持。提出一个通用子集。
-Commonware


你真是恰到好处。Spotify只为armeabi、armeabi-v7a和x86定义了jni库,因此我删除了Sphinx支持的无关体系结构库,它成功了。
-Me

感谢您的解决方案

我的项目运行良好,但使用Spotify aar。 当我添加deezer aar时,我的手机64b当时正在崩溃

它们不支持相同的体系结构。请参见屏幕:

因此,我不得不手动删除deezer aar中的额外内容,以使其正常工作:


我的猜测是,它们都有NDK库,但它们都支持不同的CPU体系结构。特别是对于具有64位CPU的设备,Android希望使用一组一致的库:全部64位或全部32位。所以,如果一个库发布64位,而另一个库只发布32位,那么有人会输,而IIRC它是唯一的32位发布者。那么你认为我可以如何解决这个问题呢?我一直想找出解决这个问题的方法,但我在自己的开发中还没有遇到这种情况,所以我没有一个可复制的测试用例。首先,检查每个库的内容,看看哪些CPU架构似乎得到了支持。找出一个公共子集。然后,看看有什么Android插件用于Gradle选项,可以在应用程序中只打包二进制文件的子集。我认为有办法做到这一点,但我不记得细节。你现在是这个星球上最酷的人之一;你说得对。Spotify只为armeabi、armeabi-v7a和x86定义了jni库,所以我删除了Sphinx支持的无关体系结构库,它成功了。谢谢你的好话!如果你有空,写下你的细节作为回答。
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.tmacstudios.spotifyvoice"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'

    // This library handles authentication and authorization
    compile 'com.spotify.sdk:spotify-auth:1.0.0-beta12@aar'

    // This library handles music playback
    compile 'com.spotify.sdk:spotify-player:1.0.0-beta12@aar'

    // All other dependencies for your app should also be here:

    compile 'com.android.support:appcompat-v7:21.0.3'
}