Kotlin AAR库w/proguard:如何保持扩展方法?
问题描述:
我在写一个新的Kotlin库模块来添加常用的类和扩展方法。我编译“扩展”使用JvmMultifileClass
每个扩展文件(如BitmapExtensions.kt)到一个文件名为:Kotlin AAR库w/proguard:如何保持扩展方法?
@file:JvmName("Extensions")
@file:JvmMultifileClass
fun Bitmap.crop(cropRect: Rect) = ...
由于我们公司的知识产权政策的一部分,我需要通过proguard的之前混淆库它使任何消费者项目。因此,我需要一个proguard规则来保持这些扩展方法,以便它们不会被丢弃。
乍一看,以下似乎工作,检查生成的AAR的classes.jar显示,扩展方法仍然存在,其内部已被obfusecated。但是,当在一个消费者项目中实际编译时,我得到的未解决的对我引用的任何扩展方法的引用。
-keepclassmembernames class mycompany.kotlin.util.Extensions {
<methods>;
}
当我禁用缩小,项目建立正确。
如何混淆我的库并保留我的kotlin扩展?
编辑:看来,在整个包装采用keep
,甚至指定-dontshrink
是不够的。这些方法根本无法在消费者应用程序中引用。
edit2:我相信我已经缩小到.kotlin_module
文件下/ META-INF /被删除时minifyEnabled=true
。这似乎是我缩小和非缩小classes.jar之间的唯一区别。有些东西是删除这个文件...或阻止它的生成。
答
我升级到了gradle 4.1里程碑1.当minifyEnabled=true
和我的客户端应用程序现在可以正确使用来自lib的扩展方法时,.kotlin_module
元数据文件不再被剥离。