Ошибка в moshi android, не может работать на устройствах kitkat - PullRequest
0 голосов
/ 29 января 2020

проект может генерировать apk и может использоваться от kitkat до oreo, но после обновления android studio и начала использования androidx возникает следующая проблема. это происходит только в kitkat после включения minifyEnabled = true shrinkResources = true

java.lang.VerifyError: com/squareup/moshi/kotlin/reflect/KotlinJsonAdapter$IndexedParameterMap
    at com.squareup.moshi.kotlin.reflect.KotlinJsonAdapter.fromJson(KotlinJsonAdapter.kt:111)
    at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:40)
    at com.squareup.moshi.kotlin.reflect.KotlinJsonAdapter.fromJson(KotlinJsonAdapter.kt:84)
    at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:40)
    at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:161)
    at com.squareup.moshi.JsonAdapter$3.fromJson(JsonAdapter.java:197)
    at com.squareup.moshi.JsonAdapter$1.fromJson(JsonAdapter.java:108)
    at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:45)
    at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:27)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:223)
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:186)
    at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:41)
    at io.reactivex.Observable.subscribe(Observable.java:12267)
    at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
    at io.reactivex.Observable.subscribe(Observable.java:12267)
    at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35)
    at io.reactivex.Single.subscribe(Single.java:3603)
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:864) 

и вот мои правила proguard

-dontwarn kotlin.**
-dontwarn kotlin.reflect.jvm.internal.**
-keep class kotlin.reflect.jvm.internal.** { *; }

-keep class kotlin.Metadata { *; }

-keepclassmembers class kotlin.Metadata {
    public <methods>;
}

-dontwarn org.jetbrains.annotations.**

-keep class kotlin.** { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}

-keep class com.squareup.moshi.kotlin.reflect.** { *; }
-keep class com.squareup.moshi.internel.** { *; }

-keepclassmembers class com.squareup.moshi.kotlin.reflect.** { *; }
-keepclassmembers class com.squareup.moshi.internel.** { *; }

-keepclassmembers class * {
    @com.squareup.moshi.FromJson <methods>;
    @com.squareup.moshi.ToJson <methods>;
}

-dontwarn javax.annotation.**

-keepclasseswithmembers class * {
    @com.squareup.moshi.* <methods>;
}

-keep class **JsonAdapter {
    <init>(...);
    <fields>;
}

-keep @com.squareup.moshi.JsonQualifier interface *

-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {
    <fields>;
    **[] values();
}

-keep public class kotlin.reflect.jvm.internal.impl.builtins.* { public *; }

-keep public class kotlin.reflect.jvm.internal.impl.** { public *; }

я пробовал другие ссылки, такие как https://github.com/square/moshi/issues/803 но я не нашел в этом ответа. пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 01 апреля 2020

Вроде бы Kotlin проблема, в качестве обходного пути используйте Moshi 1.6.0 и Proguard вместо R8 -> android.enableR8=false

...