couldn't find "libxxx.so"與"libxxx.so" is too small to be an ELF executable解決方法
阿新 • • 發佈:2019-02-18
跟著書學習使用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庫:
然後新增compile依賴檔案: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 'cn.bmob.android:bmob-sdk:3.4.7-aar'
這樣就解決了。
注:以上方法是在android studio中使用的。