kotlin - Proguard 删除 lambda 调用

标签 kotlin proguard

我有一个如下所示的方法

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)

最佳答案

将此添加到 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 糖语法

关于kotlin - Proguard 删除 lambda 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847453/

相关文章:

java - Android MANAGE_EXTERNAL_STORAGE 权限被 Google Playstore 拒绝用于社交网络应用

kotlin - 计算 ArrayList 中连续重复值的数量 (Kotlin)

android - 在TextView中播放/暂停选取框并平稳运行

android - 使用混淆器进行测试的技巧

android - 在 Android 中实现 Proguard 抛出错误 Gson

java - ProGuard 配置文件不起作用

android - Kotlin如何在队列中发出多个请求

java - 将类传递给 Kotlin 具体化方法

java - 类、成员和参数混淆的 Proguard 自定义命名

java - Proguard with AWS (amazon service sdk) reutrn 错误代码 1