首页 文章

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

提问于
浏览
3

我'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 回答

  • 0

    我升级到gradle 4.1里程碑1.当 minifyEnabled=true 和我的消费者应用程序现在可以正确使用lib中的扩展方法时, .kotlin_module 元数据文件不再被剥离 .

相关问题