Я столкнулся с проблемой в Kotlin, когда включена обфускация, особенно при динамическом вызове функции с использованием KFunction.callBy. Код работает нормально в среде без обфускации, но дает сбой после применения обфускации.
data class User(
val name: String
)
private fun buildObject(
...
constructor: KFunction,
): T {
val params = constructor.valueParameters.mapIndexed { index, param ->
val res = getValueForParam()
param to res
}.toMap()
return constructor.callBy(params)
}
После включения обфускации я получаю следующую ошибку:
Callable ожидает 2 аргумента, но был предоставлен 1.
Похоже, чтоstructor.caller.parameterTypes включает дополнительный параметр типа DefaultConstructorMarker.
правила proguard:
-keepattributes *Annotation*, Signature, InnerClasses, Synthetic, MethodParameters, RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations, Record, InnerClasses, EnclosingMethod
-keep class my.package.** { *;(...); }
-keepclassmembers class my.package.**$* { *; }
-keepclassmembernames class my.package.**$* { *; }
-keep class kotlin.Metadata { *; }
Подробнее здесь: https://stackoverflow.com/questions/790 ... tconstruct