升级Kotlin至1.5.0后Android应用构建出现No noarg构造器错误
解决Kotlin 1.5.0升级后@Parcelize密封类子类触发的No noarg super constructor错误
问题根源
你给kotlin-noarg插件配置了对@Parcelize注解类生成无参构造,但@Parcelize本身通过CREATOR机制处理Parcelable序列化,完全不需要无参构造。同时,密封类Profile仅提供带参的protected构造,noarg插件无法为子类生成合法的无参构造,最终触发构建错误。
解决方案
1. 移除noarg插件对@Parcelize的注解配置
修改app级build.gradle,删除noArg块中针对@Parcelize的注解配置(如果插件是为其他自定义注解服务,保留对应配置即可):
apply plugin: "kotlin-noarg" noArg { // 仅保留你真正需要生成无参构造的注解,比如自定义的@NoArg // annotation("com.yourpackage.NoArg") invokeInitializers = true }
2. 若无需noarg插件,直接彻底移除
如果项目中kotlin-noarg插件仅为@Parcelize服务,直接删除所有相关配置:
- 移除project级
build.gradle中插件的引入 - 移除app级
build.gradle中的apply plugin: "kotlin-noarg"及noArg配置块
3. 优化密封类代码(可选)
子类无需重复实现Parcelable,父类Profile已经实现该接口,简化代码:
import android.os.Parcelable import kotlinx.parcelize.Parcelize sealed class Profile( val count: Int ) : Parcelable { @Parcelize class User( val origincount: Int, val imageUrl: String ) : Profile(origincount) @Parcelize class Guest( val origincount: Int ) : Profile(origincount) }
内容的提问来源于stack exchange,提问作者ant2009
相关产品推荐
相关产品推荐

