異常信息
顯然,這是由于讀取不到so文件導(dǎo)致的異常。
我嘗試了如下方法:
- 檢查了
jniLibs目錄下的文件結(jié)構(gòu)和so文件,都穩(wěn)穩(wěn)的躺在那兒;jniLibs目錄結(jié)構(gòu) - 試圖使用如下方式重新指定目錄,依然無(wú)果;
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
- 請(qǐng)教提供
so文件的開(kāi)發(fā)同學(xué)是否與targetSdkVersion等有關(guān)系,并且試圖配置了和他們一樣的version -
Clean Project和Rebuild Project - 反編譯查看
apk中的libs目錄下確實(shí)也存在so文件
然而,并無(wú)卵用!
奇怪的是這個(gè)異常在真機(jī)(OnePlus2,HUAWEI MATE8)上有,而在模擬器上卻安然無(wú)恙。
于是乎,查看到OnePlus2的CPU架構(gòu)是CPU_ABI=arm64-v8a。翻閱到一篇文章描述到:
對(duì)于一個(gè)
cpu是arm64-v8a架構(gòu)的手機(jī),它運(yùn)行app時(shí),進(jìn)入jnilibs去讀取庫(kù)文件時(shí),先看有沒(méi)有arm64-v8a文件夾:
如果沒(méi)有該文件夾,去找armeabi-v7a文件夾,如果沒(méi)有,再去找armeabi文件夾,如果連這個(gè)文件夾也沒(méi)有,就拋出異常
如果有arm64-v8a文件夾,那么就去找特定名稱的.so文件,注意:如果沒(méi)有找到,不會(huì)再往下(armeabi-v7a文件夾)找了,而是直接拋出異常
如上圖jniLibs目錄結(jié)構(gòu),本地并不存在arm64-v8a文件夾,反編譯apk后發(fā)現(xiàn)竟然存在此目錄,顯然是由于其他aar的引入會(huì)生成此目錄,用于存放其相關(guān)so文件。
過(guò)濾掉此目錄:
defaultConfig {
//省略其余配置
ndk {
//這句話的意思是指定ndk需要兼容的架構(gòu),其余文件夾so文件全部過(guò)濾掉
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}```
這么個(gè)問(wèn)題,兩天的光景沒(méi)了!藍(lán)瘦,香菇。
[關(guān)于abiFilters的使用](http://blog.csdn.net/wove55678/article/details/52313208)