【问题标题】:Proguard removes lambda invocationsProguard 移除 lambda 调用
【发布时间】:2020-01-21 18:50:09
【问题描述】:

我有一个如下所示的方法

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)

【问题讨论】:

    标签: kotlin proguard


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多