我正在编写一个新的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之间的唯一区别。有些东西正在删除此文件......或阻止其生成。
答案 0 :(得分:0)
我升级到gradle 4.1里程碑1.当.kotlin_module
和我的消费者应用程序现在可以正确使用lib中的扩展方法时,minifyEnabled=true
元数据文件不再被剥离。