1. 程式人生 > >couldn't find "libxxx.so"與"libxxx.so" is too small to be an ELF executable解決方法

couldn't find "libxxx.so"與"libxxx.so" is too small to be an ELF executable解決方法

跟著書學習使用Bmob後端雲的使用,匯入用到的兩個jar包後出現了下面的錯誤:

java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip file "xxx.apk"],nativeLibraryDirectories=[xxx/lib, /vendor/lib, /system/lib]]] couldn't find "libxxx.so"
原來是缺少.so檔案。然後我在下載的sdk裡找到了.so,關鍵是如何匯入。

上網搜尋後找到兩種方法:

方法1

一定要將目錄結構改成下面這個樣子:

|---src
     |---main
           |---jniLibs
                  |---arm64-v8a
                         |---libhello-jni.so
                  |---armeabi
                         |---libhello-jni.so
                  |---armeabi-v7a
                         |---libhello-jni.so
                  |---x86
                         |---libhello-jni.so
                  |---x86_64
                         |---libhello-jni.so
                  |---mips
                         |---libhello-jni.so
                  |---mips64
                         |---libhello-jni.so

方法2

直接修改app的build.gradle檔案如下:

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
}

但是,我使用以上方法後,又出現了一個新錯誤:

java.lang.UnsatisfiedLinkError: dlopen failed: "libxxx.so" is too small to be an ELF executable

問公司帶我的人怎麼辦,他讓我直接去看Bmob的開發文件,結果開發文件裡顯示不需要手動新增jar包,而是在build.gradle中新增maven庫:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

allprojects {
    repositories {
        jcenter()
        //Bmob的maven倉庫地址,必須填寫
        maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
    }
}
然後新增compile依賴檔案:
compile 'cn.bmob.android:bmob-sdk:3.4.7-aar'
這樣就解決了。

注:以上方法是在android studio中使用的。