我正在编写一个新的 Kotlin 库模块来添加常用的类和扩展方法。我正在使用以下命令将每个扩展文件(例如 BitmapExtensions.kt)编译成一个名为“Extensions”的文件JvmMultifileClass:
@file:JvmName("Extensions")
@file:JvmMultifileClass
fun Bitmap.crop(cropRect: Rect) = ...
Run Code Online (Sandbox Code Playgroud)
作为我们公司 IP 政策的一部分,我需要在库进入任何消费者项目之前通过 proguard对其进行混淆。因此,我需要一个 proguard 规则来保留这些扩展方法,以免它们被丢弃。
乍一看,下面似乎可行,检查生成的 AAR 的 classes.jar 表明扩展方法仍然存在,并且它们的内部结构已被混淆。但是在消费者项目中实际编译时,我得到了对我所引用的任何扩展方法的未解析引用。
-keepclassmembernames class mycompany.kotlin.util.Extensions {
<methods>;
}
Run Code Online (Sandbox Code Playgroud)
当我禁用缩小时,项目构建正确。
如何混淆我的库并保留我的 kotlin 扩展?
编辑:似乎keep在整个包上使用,甚至指定-dontshrink是不够的。这些方法根本无法在消费者应用程序中引用。
edit2:我相信我已经将范围缩小到.kotlin_module/META-INF/ 下的文件在minifyEnabled=true. 这似乎是我的缩小和非缩小 classes.jar 之间的唯一区别。有些东西正在删除这个文件......或阻止它的生成。
我升级到 gradle 4.1 里程碑 1。当我的消费者应用程序现在可以正确使用库中的扩展方法.kotlin_module时,元数据文件不再被删除。minifyEnabled=true
| 归档时间: |
|
| 查看次数: |
1620 次 |
| 最近记录: |