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的扩展方法。