由Android10适配到Android12时遇到相关编译失败问题

最近Android系统各大应用商店联合发出公告,处于个人隐私安全考虑,强制APP适配到Android 11及以上版本。下面是其中应用市场的公告(顺带提醒没适配的同学):

适配前的开发环境

名称 版本
Android studio Giraffe | 2022.3.1
build.gradle配置的compileOptions JDK 1.8
build.gradle配置的kotlinOptions "1.8"
Gradle JDK版本(通过Project Structure > SDK Location > Gradle Settings配置) JDK 1.8
Android Gradle Plugin版本 4.0.0
Gradle版本 6.1.1
一、错误:java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE

具体报错信息如下图:

操作步骤:

小编是直接将compileSdkVersion、buildToolsVersion、targetSdkVersion修改为31后通过编译出现这个错误。

复制代码
compileSdkVersion: 31,
buildToolsVersion: "31.0.0",
minSdkVersion    : 19,
targetSdkVersion : 31,

错误发生原因:

具体原因暂不太清楚,猜测应该是跟Android的compileSdk和buildTools的版本有关,因为将编译版本降级为30时没出现这个错误。
解决方式:
调整Gradle JDK的版本,将jdk版本由1.8升级到11,再次编译该错误解决。

二、错误:java.lang.NoClassDefFoundError: javax/annotation/Generated

具体报错信息如下图:

操作步骤:

设置Gradle JDK的版本为11后直接进行编译
错误发生原因:

直观上看是编译时缺少javax/annotation相关的类,仔细分析错误发现涉及到dagger库,初步认定与dagger版本有关。
解决方式:

dagger版本进行升级,由2.9 -> 2.47

说明:

若不是由引入的第三方库引起可尝试引入javax.annotation-api库,如下:

implementation 'javax.annotation:javax.annotation-api:1.3.2'

annotationProcessor("javax.annotation:javax.annotation-api:1.3.2")

正常以小编的工程把上面两个问题解决就能正常编译打包了,但是强迫症迫使我与时俱进,于是将工程使用的Java版本升级到11,出现了新的错误。

三、错误: 无法访问ViewGroup找不到android.view.ViewGroup的类文件

详细错误如图:

操作步骤:

设置build.gradle的compileOptions和kotlinOptions 为java 11
错误发生原因:

通过错误可以看出应该跟android库没多少关系,真正的错误原因应该是这个:
org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details
解决方式:
待解决(可能需要升级gradle),等后面有空了再研究下,先把版本适配了。

如已有解决办法的同学欢迎在评论区留言。

扩展:

若有同学不了解gradle JDK和build.gradle中compileOptions的区别的可以参考下面文章:
https://blog.csdn.net/hnjcxy/article/details/122902155

黑暗中摸索不易,若对你有帮助,希望能给个大赞!!!

相关推荐
消失的旧时光-194325 分钟前
从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透
android·数据结构·链表
方白羽26 分钟前
Android 中Flags从源码到实践
android·app·客户端
深蓝电商API26 分钟前
从数据采集到商业变现:网络爬虫技术的实战与边界
android·爬虫
恋猫de小郭3 小时前
再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复
android·前端·flutter
李慕婉学姐3 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
似霰5 小时前
传统 Hal 开发笔记6----App 访问硬件服务
android·framework·hal
爱装代码的小瓶子6 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
私人珍藏库6 小时前
AutoGLM无需豆包手机,让AI自动帮你点外卖-刷视频
android·ai·智能手机·工具·软件·辅助·autoglm
孤舟簔笠翁7 小时前
【Android驱动14】Android系统Crash工具使用方法和分析
android