2017-07-02 77 views
3

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

回答

0

我升級到了gradle 4.1里程碑1.當minifyEnabled=true和我的客戶端應用程序現在可以正確使用來自lib的擴展方法時,.kotlin_module元數據文件不再被剝離。