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项目 ,并重新编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值