引用Realm數據庫後.so文件找不到(UnsatisfiedLinkError)

在使用Realm數據庫後,遇到了如下錯誤:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[...],nativeLibraryDirectories=[.../lib/arm, /vendor/lib, /system/lib]]] couldn't find "libxmediaplayer.so"

是老司機,對這個錯誤還是很熟悉的,因爲沒加載到so庫。然而在這裏並不是沒有引用so庫,而且在沒有引用realm(apply plugin: 'realm-android')時程序是可以正常運行的。

可能的原因(很可能不正確,待續...):
由於我的工程只有一個armeabi文件夾,編譯後也只有一個armeabi文件夾 ,程序在運行後就會在armeabi中加載默認的so文件。然而在引入Realm編譯後會生成多個文件夾(armeabi、x86、mips、...),這時程序在運行後就會到CPU對應的型號的文件夾中去找,但是對應的文件夾中沒有就報出這個錯誤了。

解決方法:
加入如下代碼,這裏只保留“armeabi”
android{
	......
	defaultConfig {
		multiDexEnabled true
		ndk {
			abiFilters "armeabi"   //, "armeabi-v7a", "x86", "mips"
		}
	}
	......
}


編譯的時候可能會報這個錯誤:
Error:Execution failed for task ':app:compileDebugNdk'. Error: NDK integration is deprecated in the current plugin.

解決辦法:
將目錄結構視圖調整爲“project”,然後找到或新建 gradle.properties 文件,如下圖:



在這個文件中添加如下代碼:

android.useDeprecatedNdk=true


發佈了50 篇原創文章 · 獲贊 22 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章