[英]Kotlin, Proguard and lambdas
我有一個簡潔的功能,可以在視圖上執行某些操作:
fun<T : View> Activity.withView(nr : Int, fn : T.()->Unit) {
(findViewById(nr) as T?)?.fn()
}
現在,當我在我的活動中使用此功能時:
withView<Spinner>(R.id.spinner_toolbar) {
adapter = AdapterIndeksuDlaSpinnera(this@NewMainActivity, PlaylistIndex)
......在使用ProGuard之前一切正常。 我可以看到AdapterIndeksuDlaSpinnera
被破壞,正如預期的那樣,但是當使用“無法加載類AdapterIndeksuDlaSpinnera”進行編程時應用程序失敗(同時它應該抱怨錯誤的適配器名稱)。
我能夠通過禁用可以在我的withView
使用的所有適配器的修改來創建臨時的解決方法
-keep class pl.qus.xenoamp.adapter.** { *; }
但我覺得這不是一個好的解決方案(我不知道其他類可以通過這種方式失敗!)。 那么任何人都可以解釋什么是問題,我應該添加什么樣的ProGuard線來潛在地修復withView
使用的其他類的類似withView
?
這是困難的一個。 簡而言之,Proguard並不了解Kotlin。 它使用簡單的代碼分析來檢測Class.forName()
類的東西並解決它們,但是對於任何更復雜的事情都可能會失敗。 你需要從build
子目錄中查看生成的.class
文件(你可以發布相關的嗎?)來找出真正發生的事情。
現在你可以做兩件事:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.