kotlin - moshi android 出错,无法在 kitkat 设备上运行
问题描述
该项目可以生成apk,可以从kitkat到oreo使用,但是在升级android studio并开始使用androidx后,出现以下问题。它仅在启用 minifyEnabled=true shrinkResources=true 后发生在 kitkat 中
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,但我没有找到答案。请帮我解决一下这个。
解决方案
这似乎是 Kotlin 问题,作为一种解决方法使用Moshi 1.6.0
,Proguard
而不是R8
->android.enableR8=false
推荐阅读
- azure - 为什么托管服务标识在我的 MS Azure Web 应用程序中显示为灰色
- javascript - 单击除数字以外的任何内容后重置我的输入框
- python - openstack python api脚本获取SSL错误
- sql - 如何将总和除以计数?
- django - 如何使用 forloop 使得如果满足循环中的“IF”语句,则循环在 Django 模板中结束
- python - ValueError:空词汇
- python - SQL ORDER BY Timestamp,相同的值
- docker - Gitlab-runner + Docker + Windows - 卷规格无效
- java - 类之间的 Java 参数
- python-3.x - python - 如何从无监督的文本分类中提取 id