今天開啟新的項(xiàng)目襟己,把公共模塊移植過來(lái)后發(fā)現(xiàn)一直提示couldn't find "XXX.so"。
牍陌?擎浴?好家伙,好久沒這打交道了毒涧,讓我想想怎么回事贮预。
首先,這個(gè)時(shí)候契讲,大家先確定仿吞,自己so文件放的位置對(duì)不對(duì),android studio默認(rèn)是去jniLibs文件夾去找so文件的捡偏。
/src/main/jniLibs 注意是在 main下面唤冈。
如果位置正確的話,檢查一下model下的build.gradle中是否有以下代碼:
sourceSets { main { jniLibs.srcDirs = ['libs'] }}
這句是改變.so的路徑到libs下银伟。如果有的話你虹。請(qǐng)刪除或者把.so文件移動(dòng)到libs下。
但是依然有錯(cuò)呢彤避。請(qǐng)檢查提示傅物,沒有找到文件前面的路徑,如果是什么armeabi忠藤,armeabi-v7a挟伙,x86等等之類的路徑。說(shuō)明機(jī)器需要這個(gè)路徑下的.so文件,你建立了文件夾又沒有提供對(duì)應(yīng)的版本尖阔。
1.你可以復(fù)制其他的文件內(nèi)的.SO到缺失路徑下贮缅。
2.在工程中配置項(xiàng)目支持的類型。
android{
ndk{
? ? abiFilters"armeabi","armeabi-v7a","x86"
}
}
這樣只會(huì)在指定的類型內(nèi)選擇.so文件
3.android {
// rest of your app's logic
splits {
abi {
enable true
reset()
include 'x86', 'x86_64',
'arm64-v8a', 'armeabi-v7a', 'armeabi'
universalApk false
}
}
}
打包的時(shí)候分包
enable: 是否啟用ABI拆分機(jī)制
reset():重置ABI列表為只空字符串介却,一半和include谴供、exclude一起使用,如果要用必須在include和exclude前面
include:指明要包含哪些ABI齿坷,目前使用最多的偽64位處理器的arm64-v8a桂肌,其次才是armeabi-v7a
exclude:默認(rèn)包含下所有ABI,可以移除一些ABI
universalApk:是否打包一個(gè)通用版本永淌,包含所有的ABI崎场,默認(rèn)值為 false
————————————————————
但是呢。我都沒解決遂蛀。什么鬼谭跨。后來(lái)通過各種排除發(fā)現(xiàn),降低classpath'com.android.tools.build:gradle:3.6.4'
到我原項(xiàng)目classpath'com.android.tools.build:gradle:3.5.1' 之后問題解決李滴。至于原因螃宙。空閑的時(shí)候再研究