gpt4 book ai didi

android - Kotlin AAR 库 w/proguard : how to keep extension methods?

转载 作者:太空狗 更新时间:2023-10-29 14:42:57 24 4
gpt4 key购买 nike

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

@file:JvmName("Extensions")
@file:JvmMultifileClass

fun Bitmap.crop(cropRect: Rect) = ...

作为我们公司 IP 政策的一部分,我需要在库进入任何消费者项目之前通过 proguard 对其进行混淆处理。因此,我需要一个 proguard 规则来保留这些扩展方法,以免它们被丢弃。

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

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

当我禁用缩小时,项目会正确构建。

如何混淆我的库并保留我的 kotlin 扩展?

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

edit2:我相信我已经将范围缩小到/META-INF/下的 .kotlin_module 文件在 minifyEnabled=true 时被删除。这似乎是我缩小的和非缩小的 classes.jar 之间的唯一区别。某些东西正在删除此文件...或阻止其生成。

最佳答案

我升级到 gradle 4.1 里程碑 1。.kotlin_module 元数据文件在 minifyEnabled=true 时不再被删除,我的消费者应用程序现在可以使用来自lib 正确。

关于android - Kotlin AAR 库 w/proguard : how to keep extension methods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com