Kotlin AAR库w / proguard:如何保持扩展方法?

我正在写一个新的Kotlin库模块来添加常用的类和扩展方法。 我正在使用JvmMultifileClass将每个扩展文件(例如BitmapExtensions.kt)编译成一个名为“Extensions”的文件:

 @file:JvmName("Extensions") @file:JvmMultifileClass fun Bitmap.crop(cropRect: Rect) = ... 

作为我们公司知识产权政策的一部分,我需要通过proguard对图书馆进行混淆, 然后才能将其提供给任何消费者项目。 因此,我需要一个proguard规则来保持这些扩展方法,使它们不被丢弃。

乍一看,下面的工作似乎有效,检查生成的AAR的类.jar显示扩展方法仍然存在,其内部已被混淆。 但是,当在一个消费者项目中实际编译时,我得到了我所引用的任何扩展方法的未解析的引用。

 -keepclassmembernames class mycompany.kotlin.util.Extensions { <methods>; } 

当我禁用缩小,项目建立正确。

我怎样才能模糊我的图书馆,并保持我的kotlin扩展?

编辑:看来,使用keep整个包,甚至指定-dontshrink是不够的。 这些方法根本无法在消费者应用程序中引用。

编辑2:我相信我已经缩小到/ META-INF / minifyEnabled=true时被删除的.kotlin_module文件。 这似乎是我缩小和非缩小classes.jar之间的唯一区别。 有些东西是删除这个文件…或阻止其生成。

我升级到了gradle 4.1里程碑1.当minifyEnabled=true时, .kotlin_module元数据文件不再被剥离,我的客户应用程序现在可以正确地使用来自lib的扩展方法。