Gradle库接口参数名被替换问题的原因排查与解决方法
问题原因与解决方案
这事儿其实和Proguard没关系——Java/Kotlin默认编译成字节码时,不会保留方法的参数名,所以你的HybridMediaPlayer库在编译打包时,接口方法里的reason、currentWindowIndex这些参数名并没有被写入字节码里。当你在新项目里引入这个库时,IDE只能从字节码里拿到无意义的占位符名称(比如i、i1),就出现了你看到的情况。
要解决这个问题,你需要在HybridMediaPlayer库的Gradle配置里,开启编译时保留参数名的选项,具体分两种情况:
1. 如果你的库是用Java编写的
在库模块的build.gradle(或build.gradle.kts)里,添加以下配置:
android { compileOptions { // 开启参数名保留,让字节码包含方法参数的原始名称 parameters true } }
2. 如果你的库是用Kotlin编写的
同样在库模块的build.gradle里配置:
android { kotlinOptions { // 生成符合Java参数名规范的字节码,保留原始参数名 javaParameters true } }
配置完成后,重新编译并发布(或本地依赖)你的HybridMediaPlayer库,再在新项目里同步Gradle,此时IDE就能正确识别到接口方法的原始参数名了。
补充一句:这个配置只会在字节码里多存储一份参数名信息,不会影响代码的运行性能,完全可以放心开启。如果暂时没法修改库的配置,你也可以通过查看库的源码或Javadoc来确认参数的含义,但从长远来看,给库加上参数名保留配置是最方便使用者的做法。
内容的提问来源于stack exchange,提问作者Mateusz Kaflowski
相关产品推荐
相关产品推荐

