带有proguard的Kotlin AAR库:如何保持扩展方法?

时间:2017-07-02 23:43:04

标签: android kotlin

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

@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:我相信我已经缩小到.kotlin_module下的/ {META-INF /下的minifyEnabled=true文件。function getAuthorData() { metadataRef .child("author") .on("value", (snap) => { return snap.val() }) } function getSiteSocialLinks() { metadataRef .child("social") .on('value', (snap) => { return snap.val(); }) } function getFeaturedPosts() { featuredRef.on('value', (snap) => { return snap.val(); }) } function getBlogPosts() { blogPostsRef .orderByChild('createOn') .on('value', (snap) => { return snap.val() }); } function getPostCategories() { postRef .child('categoryStats') .on('value', (snap) => { return snap.val(); }); } function getTotalPostsLength() { postRef .child('nopp') .on('value', (snap) => { return snap.val(); }) } 。这似乎是我的缩小和非缩小class.jar之间的唯一区别。有些东西正在删除此文件......或阻止其生成。

1 个答案:

答案 0 :(得分:0)

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