今天在集成好友盟SDK測試新浪微博時突然蹦出來的一個異常(如下圖),關鍵信息就是:couldn't find "libweibosdkcore.so"。
項目崩潰的原因也是因爲 "libweibosdkcore.so"這個庫沒有找到,可我看了下我的Project目錄結構,各個平臺的架包(arm64-v8a、armeabi、armeabi-v7a、x86、x86_64)下我都存放了"libweibosdkcore.so"這個庫,爲什麼運行時卻找不到呢?
後來查閱大量資料,發現我的sourceSets設置中沒有引用到我在項目中新建的JniLibs文件夾裏架包的so庫,那SourceSets又是什麼呢?
java插件引入了一個概念叫做SourceSets,通過修改SourceSets中的屬性,可以指定哪些源文件(或文件夾下的源文件)要被編譯,哪些源文件要被排除。Gradle就是通過它實現Java項目的佈局定義。
SourceSets目錄結構是固定的Java的標準項目目錄佈局,如下圖:
修改方式如下:
所以我需要在sourceSets設置中把"libweibosdkcore.so"這個庫的具體位置添加進去。具體操作如下:
修改 Module:app/build.gredle 中的sourceSets節點配置,將 jniLibs.srcDirs = ['libs'] (默認配置,將JniLibs資源文件的位置指向libs文件) 改爲 jniLibs.srcDirs = ['src/main/jniLibs'] (指出了JniLibs資源文件夾的具體位置),這樣便會引用到jniLibs目錄文件下的庫和jar包了。修改完畢後該異常解決,運行測試無誤。