這個(gè)編譯異常經(jīng)常會(huì)出現(xiàn)闸准,一般請款下是因?yàn)槟骋粋€(gè)類或者support包重復(fù)導(dǎo)入多次引起咳榜,常規(guī)的解決辦法惧浴,使用 " ./gradlew -q app:dependencies" 使用這個(gè)命令查看項(xiàng)目中的各個(gè)module所依賴的第三方工程肛鹏,然后在你的APP module下找到你導(dǎo)入第三方依賴的位置骗村,并使用exclude group "xxx.xxx.xxx" 操作就可以解決項(xiàng)目依賴重復(fù)導(dǎo)入的問題飞涂。
這里描述一個(gè)我這遇到的坑比較深的場景
前置條件
- 項(xiàng)目支持kotlin;
- 導(dǎo)入的第三方或自己開發(fā)的lib庫內(nèi)含有kotlin文件旦部;
- 本地項(xiàng)目的 kotlin-stdlib-jkd7, kotlin-stdlib-jdk8 等lib庫均包含祈搜,
如下圖
編譯后出現(xiàn)的錯(cuò)誤:
Program type already present $$xx$ lambda
項(xiàng)目直接減錯(cuò)誤指示到 kotlin文件中的lambda 表達(dá)式
接下來你可能會(huì)返回檢查、重寫士八、或者切換自己lambda 表達(dá)式的寫法或者直接不使用lambda表達(dá)式容燕,但是編譯的錯(cuò)誤依舊顯示這個(gè)bug;
問題的根本原因:org.jetbrains.kotlin:kotlin-stdlib-jkd7,
org.jetbrains.kotlin:kotlin-stdlib-jkd8 這兩個(gè)kotlin-stdlib 在項(xiàng)目中出現(xiàn)了版本不統(tǒng)一婚度,
修復(fù)建議: kotlin-stdlib-jkd7蘸秘,kotlin-stdlib-jkd8 這兩個(gè)版本只保留一個(gè)版本, 且需要使用 exclude group 命令主動(dòng)刪除第三方包中導(dǎo)入的
kotlin-stdlib-jkd7(8)蝗茁,避免第三方主動(dòng)帶入了kotlin-std-lib庫造成項(xiàng)目的kotlin-stdlib-jkd的版本不統(tǒng)一醋虏。
如果經(jīng)過上述步驟還無法修復(fù),可以刪除工程下的build哮翘, app.build這兩個(gè)文件目錄進(jìn)行再次編譯