Android編譯時註解框架4-爬坑
概述
因為有關APT的資料過少,又因為是Java Moudle +Android Moudle的使用方式,在專案編寫過程中,會有一些匪夷所思的奇怪問題~入門階段真的是步履維艱。
這篇部落格就是編寫《Android編譯時註解框架》系列中,將所遇到的一些坑列舉出來,並給出一些繞過坑的方法。(注意哦~是繞過,坑還在,沒有填~因為不知道這坑咋來的……)
隨時踩坑,隨時更新~
坑1:無法引入javax包下的類庫
編寫編譯時註解框架時,需要用到javax包下的一些類庫,但是引入包時卻提示沒有。
#####解決:javax包屬於java,Android核心庫中沒有。所以不能直接在app Module和Android Library中使用,必須要建立一個Java Library。然後由Java Library匯出jar包使用。
坑2:Build通過,編譯失敗
報錯資訊: finished with non-zero exit value 2
Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
這個問題引起了很大程度的誤解,因為是看錯誤資訊是jdk的錯誤,關注點一直放到了jdk版本上。
開始換了jdk版本為1.8。成功運行了一次,但是之後修改程式碼又報錯了。
#####解決: app Moudle不能直接引用 apt Module(編寫註解處理程式碼的Module),需要apt Module匯出jar包,app Moudle引入jar包才可以。
坑3:只能成功執行一次,修改程式碼後再執行就報錯
報錯內容同 坑2 相同。
app Moudle直接引用 apt Module 可以成功執行一次,但再次修改apt Module程式碼後,執行就會報錯,程式碼再修改回來,就又可以運行了。(就好像一次性專案一樣……)
#####解決: app Moudle不能直接引用 apt Module(編寫註解處理程式碼的Module),需要apt Module匯出jar包,app Moudle引入jar包才可以。
坑4:錯誤: javax.annotation.processing.Processor: Error reading configuration file時丟擲異常錯誤
錯誤提示:
錯誤: 服務配置檔案不正確, 或構造處理程式物件javax.annotation.processing.Processor: Error reading configuration file時丟擲異常錯誤
#####解決: app Moudle不能直接引用 apt Module(編寫註解處理程式碼的Module),需要apt Module匯出jar包,app Moudle引入jar包才可以。
坑5:成功執行,沒有任何報錯,但也沒有任何預期結果。
這是比較容易忽視的兩個問題。
#####Check 1:檢查是否添加了配置檔案:javax.annotation.processing.Processor
(新增方式請看 前一篇 《Android編譯時註解框架-Run Demo》)
#####Check 2:檢查是否重寫了getSupportedAnnotationTypes方法:javax.annotation.processing.Processor
重寫該方法告訴Processor它需要處理哪些註解。
坑6:替換APT jar包後,apt程式碼並沒有被執行。
#####解決: 嘗試 clean專案 ,並重新編譯。