解决Android中使用jdk 9以上中的某个类(AbstractProcessor)但是无法导入的问题,最简单的解决方案

前景提要

今天在使用jdk中的AbstractProcessor类的时候,怎么都找不到,网上各种搜索,加什么依赖都没用,看了下依赖确实有这个类但是就是无法正常导入
在这里插入图片描述

然后翻了下android.jar,发现没有这个类
在这里插入图片描述

疑问

但是你尝试一下发现在jdk 7/8中部分可以正常导入,这个经过和同事朋友沟通后发现可能是谷歌的限制(谷歌改了javax)+在jdk9及后续版本中,jdk开始使用模块化规则。

最直接的解决方案

直接在Android项目中新建一个java-library,假设module名为:annotation
然后修改一下gradle的配置

apply plugin: 'java-library'

dependencies {
    implementation fileTree(include: ["*.jar"], dir: "libs")
    annotationProcessor "com.google.auto.service:auto-service:$autoServiceVersion"
    implementation "com.google.auto.service:auto-service-annotations:$autoServiceVersion"
    implementation "com.squareup:javapoet:$javapoetVersion"
    implementation "com.squareup:javawriter:$javawriterVersion"
}
sourceCompatibility = "17"//写jdk多少版本都行,17的话很多新特性都可以用,建议高版本的
targetCompatibility = "17"

然后在需要引用的地方引用该module,注意着两个都不能少,如果你需要使用AbstractProcessor的话,如果不使用则可以不应用注解解释器

    implementation project(':annotation')
    annotationProcessor project(':annotation')

完事!!!!下面不用看了!

JDK 1.8问题解决

在网上查阅很多资料发现jdk1.8直接导入rt.jar可以解决问题(ps:借一下网友的图,省的自己截图了)
在这里插入图片描述

JDK1.8 以上问题解决

但是你会发现问题又来了,你翻了翻你的jdk 11/17/19/21等等都没有jre这个路径当然也不会有rt.jar

如何获取jdk9及以上版本中依赖包,如’rt.jar’,’ dt.jar’等

在jdk9及后续版本中,jdk开始使用模块化规则,实现更好的封装和定义良好的接口,近一步加强了java的自由度,开发者可以定制化SDK包括rt.jar在内的依赖均已移除,以模块化形式更高效的存诸在 JAVA_HOME/jmods目录下,如果需要可以用命令进行抽取,例如需要用到javax.annotation.processing.AbstractProcessor类,则可以将jmods目录下的java.compiler进行重新打包
在这里插入图片描述

解压jmods目录下的java.compiler.jmod模块到当前目录

任意目录下

jmod extract "D:\Program Files\Java\jdk-17\jmods\java.compiler.jmod"

使用jar工具在当前目录创建一个新的JAR文件

注意后面有个.

jar cf java.compiler.jar -C classes .

使用命令进行验证,将会成列出jar包中所有条目

jar tf .\java.compiler.jar

在Android studio如何引用依赖包?

将jar包复制到项目的lib目录下并右键选择Add As Library,将可以正常使用jar包中的类库模块的build.gradle文件中生成如下指令,

implementation files('libs\\java.compiler.jar')

虽然可以正常使用类库,但是在构建的时候会报错此时将指令更改为

compileOnly files('libs\\java.compiler.jar')

搞定结语

感谢https://www.cnblogs.com/bingbaihanji/p/17351815.html
最后提醒一下不要把java.compiler.jar发到自己的私库然后在线引用,我尝试过依然会导致无法导入,只有以jar包导入才行,如果你成功了可以留言告诉我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青丶穗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值