Proguard удаляет лямбда-вызовы - PullRequest
5 голосов
/ 21 января 2020

У меня есть метод, который выглядит следующим образом

HashMap.doSomething(block:(SpecificTypeOfObject)->Unit){
  forEach{ (k,v) ->
      (v as? SpecificTypeOfObject)?.let {
          block(it)
       }

   }
}

Когда я включаю Proguard, блок стирается. Как мне заставить Proguard сохранить его?

java.lang.NoSuchMethodError: No interface method invoke(Ljava/lang/Object;)Ljava/lang/Object; in class Lkt6; or its super classes (declaration of 'kt6' appears in /data/app/com.app.client-_zT-qCWwu71b-k9s0YyjOQ==/base.apk!classes3.dex)

1 Ответ

1 голос
/ 21 января 2020

Добавьте это к proguard:

-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <methods>;
}
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

, и это заставит его сохранить весь синтаксис kotlins сахара

...