我在寫一個新的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之間的唯一區別。有些東西是刪除這個文件...或阻止它的生成。