You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用Kotlin库Release包编译报错,如何保留@Throws注解?

解决Kotlin库@Throws注解被ProGuard移除导致Java客户端编译错误的问题

问题根因

你推测的结论正确:ProGuard在处理Release版本时移除了@Throws(MyCustomException::class)注解,使得Java编译器无法识别doSomething()方法会抛出该异常,从而触发编译错误。之前的-keepattributes *Annotation*和-keep class kotlin.**配置未生效,是因为它们没有明确保留带有@Throws注解的方法及其注解信息。

解决方案

在ProGuard配置文件中添加以下规则,精准保留所需的注解和相关类:

1. 保留@Throws注解类本身

-keep class kotlin.jvm.Throws

2. 保留所有带有@Throws注解的方法

这条规则确保ProGuard不会移除方法上的@Throws注解:

-keepclassmembers class * {
    @kotlin.jvm.Throws <methods>;
}

3. 保留自定义异常类(关键)

如果MyCustomException被混淆,Java客户端同样无法正确识别异常类型,因此必须保留该类:

-keep class com.your.package.MyCustomException {
    public <init>();
}

请将com.your.package替换为MyCustomException实际的包路径。

完整ProGuard配置示例

将以下内容添加到你的proguard-rules.pro文件中:

# 保留Kotlin@Throws注解类
-keep class kotlin.jvm.Throws

# 保留带有@Throws注解的所有方法
-keepclassmembers class * {
    @kotlin.jvm.Throws <methods>;
}

# 保留自定义异常类
-keep class com.your.package.MyCustomException {
    public <init>();
}

# 原有必要配置
-keepattributes *Annotation*
-keep class kotlin.**

验证步骤

重新构建Release版本的Kotlin库,让Java客户端引入该版本后,编译错误即可消除。

内容的提问来源于stack exchange,提问作者Adam Johns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:48:24