1. 程式人生 > >Android編譯時註解框架4-爬坑

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專案 ,並重新編譯。