當前位置:編程學習大全網 - 源碼下載 - compileDebugKotlin FAILED和aidl

compileDebugKotlin FAILED和aidl

自從入職CS,項目編譯壹直有個神坑報錯,每次都需要clean rebuild若幹次, 非常耽誤時間

簡單的說, 如果在使用AIDL時需要壹個自定義的數據類型, 我們壹般會這麽寫:

當我們寫壹個子類SubClass繼承該類.然後在Kotlin文件中直接或者間接引用到SubClass時, 就會出現壹個以下的報錯

報錯發生在 app:compileDebugKotlin , 也就是kotlinc. 但是我們明明已經定義了該類. 全局搜索發現有兩個 CustomParcel.java , 推測是兩個同名的文件引起.

除了我們自己寫的Java文件, 另外壹個肯定是aidl生成的. 引用壹張圖:

在編譯開始時會把aidl轉化為Java文件, 接下來才會經過javac, kotlinc把JVM語言文件轉化為字節碼 .class 文件.

查看aidl生成的文件, 發現是空的, 並且有壹行註釋: 說明這是壹個 PlaceHolder , 也就是占位文件.

網上搜到有人遇到了 相同的問題 ,問題確實發生在kotlinC編譯器以aidl生成的空java文件為編譯目標, 而不是真正的java類文件. 並且也給出了解決辦法,升級buildTools版本.

查看 buildTools提交記錄

提交記錄: No java output for parcelable declaration . 也就是移除了以下的為自定義的aidl Parcelable類生成Java文件的設定(29.0.2之前的實現)

升級29.0.3, 再次編譯, 發現build/aidl目錄下不再生成同名的 PlaceHolder 文件了, 只剩下唯壹的我們自己的文件, kotlinC這次只能用唯壹的文件來編譯,報錯解決.

至於為什麽有時候clean rebuild能編譯成功,需要探究下kotlinC的源碼.

最坑的是, 29.0.2就是 gradle plugin4.1默認支持的版本 , 所以妳不手動指定buildTools版本為29.0.3以上就會掉進坑裏.

  • 上一篇:海景婚紗造型的四種風格介紹
  • 下一篇:郵箱經常收到來自不同發件人的垃圾郵件。我該怎麽辦?
  • copyright 2024編程學習大全網