這個編譯異常經常會出現(xiàn),一般請款下是因為某一個類或者support包重復導入多次引起,常規(guī)的解決辦法,使用 " ./gradlew -q app:dependencies" 使用這個命令查看項目中的各個module所依賴的第三方工程,然后在你的APP module下找到你導入第三方依賴的位置,并使用exclude group "xxx.xxx.xxx" 操作就可以解決項目依賴重復導入的問題。
這里描述一個我這遇到的坑比較深的場景
前置條件
- 項目支持kotlin;
- 導入的第三方或自己開發(fā)的lib庫內含有kotlin文件;
- 本地項目的 kotlin-stdlib-jkd7, kotlin-stdlib-jdk8 等lib庫均包含,
如下圖

534DC0C4-E190-46D1-A78E-21159E90B8FE.png
編譯后出現(xiàn)的錯誤:
Program type already present $$xx$ lambda
項目直接減錯誤指示到 kotlin文件中的lambda 表達式
接下來你可能會返回檢查、重寫、或者切換自己lambda 表達式的寫法或者直接不使用lambda表達式,但是編譯的錯誤依舊顯示這個bug;
問題的根本原因:org.jetbrains.kotlin:kotlin-stdlib-jkd7,
org.jetbrains.kotlin:kotlin-stdlib-jkd8 這兩個kotlin-stdlib 在項目中出現(xiàn)了版本不統(tǒng)一,
修復建議: kotlin-stdlib-jkd7,kotlin-stdlib-jkd8 這兩個版本只保留一個版本, 且需要使用 exclude group 命令主動刪除第三方包中導入的
kotlin-stdlib-jkd7(8),避免第三方主動帶入了kotlin-std-lib庫造成項目的kotlin-stdlib-jkd的版本不統(tǒng)一。
如果經過上述步驟還無法修復,可以刪除工程下的build, app.build這兩個文件目錄進行再次編譯

image.png