我'm writing a new Kotlin library module to add commonly used classes and extension methods. I'm使用 JvmMultifileClass
将每个扩展文件(例如BitmapExtensions.kt)编译成一个名为'Extensions'的文件:
@file:JvmName("Extensions")
@file:JvmMultifileClass
fun Bitmap.crop(cropRect: Rect) = ...
作为我们公司的IP政策的一部分,我需要通过proguard对库进行模糊处理,然后再将其用于任何消费者项目 . 因此,我需要一个proguard规则来保留这些扩展方法,以便它们不被丢弃 .
乍一看,下面的内容似乎有效,检查生成的AAR的类.jar表明扩展方法仍然存在,并且它们的内部结构已被忽视 . 但是当实际编译一个消费者项目时,我得到了我引用的任何扩展方法的未解析引用 .
-keepclassmembernames class mycompany.kotlin.util.Extensions {
<methods>;
}
当我禁用缩小时,项目正确构建 .
我如何模糊我的库并保留我的kotlin扩展名?
编辑:似乎在整个包上使用 keep
,甚至指定 -dontshrink
是不够的 . 这些方法根本无法在消费者应用中引用 .
edit2:我相信我把它缩小到了 minifyEnabled=true
下的/ META-INF / .kotlin_module
文件 . 这似乎是我的缩小和非缩小class.jar之间的唯一区别 . 有些东西正在删除此文件...或阻止其生成 .
1 回答
我升级到gradle 4.1里程碑1.当
minifyEnabled=true
和我的消费者应用程序现在可以正确使用lib中的扩展方法时,.kotlin_module
元数据文件不再被剥离 .