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

AAR中Kotlin函数无法保留类名,如何兼容原有调用?

Android AAR库Java转Kotlin工具类后外部调用兼容问题

背景

我维护着一个供多个Android应用依赖的AAR库,核心代码以Java为主。为了后续开发效率,计划将部分工具类迁移到Kotlin,但改写后外部应用调用出现兼容性问题。

原Java工具类实现(库内部)

package com.example.library;

public interface Utils {
    static int functionOne() { return 1; }
}

原外部应用调用示例(Kotlin)

package com.example.app;
import com.example.library.Utils;

class SomeClass {
    private val myOne = Utils.functionOne()
}

迁移为Kotlin文件级函数后的异常

按照Kotlin文档尝试用文件级函数改写,代码如下:

@file:JvmName("Utils")
package com.example.library

fun functionOne(): Int = 1

但将编译后的AAR引入应用后,外部代码无法找到com.example.library.Utils.functionOne,只能识别到com.example.library.functionOne。这个签名差异要求所有依赖该库的应用修改调用代码,虽然库内部可以正常通过Utils.functionOne()调用。

临时兼容方案(Object类实现)

使用Kotlin object类配合@JvmStatic注解可以保留原有的调用签名,但会产生冗余的单例对象定义:

package com.example.library

object Utils {
    @JvmStatic
    fun functionOne(): Int = 1
}

无效的排查尝试

怀疑是ProGuard混淆配置导致的问题,尝试添加相关规则但无效果:

  • IDE提示-keepkotlinmetadata标志无效(标红报错)
  • 添加-keep class kotlin.Metadata规则也未解决问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:20