Мой мозг жарится. Я искал S.O. для справки, но кажется, что проблемы Proguard с этим исключением специфичны для рассматриваемого приложения. Я пытался использовать Proguard для obfucate/Минимизировать мое приложение и когда я запускаю его в сгенерированного APK образуют мое приложение либо аварии или поражает меня:Proguard for Wire + Retrofit NoSuchMethodException
com.company.project E/a: java.lang.NoSuchMethodException: fromValue [int]
StackTrace:
java.lang.AssertionError: java.lang.NoSuchMethodException: fromValue [int]
at com.squareup.wire.RuntimeEnumAdapter.decode(Unknown Source)
at com.squareup.wire.RuntimeEnumAdapter.getFromValueMethod(Unknown Source)
at com.squareup.wire.RuntimeEnumAdapter.decode(Unknown Source)
at com.company.project.utils.wiremodels.d.a(Unknown Source)
at com.company.project.utils.wiremodels.d.decode(Unknown Source)
at com.company.project.utils.wiremodels.g.a(Unknown Source)
at com.company.project.utils.wiremodels.g.decode(Unknown Source)
at com.squareup.wire.ProtoAdapter.decode(Unknown Source)
at retrofit2.converter.wire.WireResponseBodyConverter.convert(Unknown Source)
at retrofit2.converter.wire.WireResponseBodyConverter.convert(Unknown Source)
at retrofit2.ServiceMethod.toResponse(Unknown Source)
at retrofit2.OkHttpCall.parseResponse(Unknown Source)
at retrofit2.OkHttpCall$1.onResponse(Unknown Source)
at a.az.b(Unknown Source)
at a.a.l.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NoSuchMethodException: fromValue [int]
at java.lang.Class.getMethod(Class.java:624)
at java.lang.Class.getMethod(Class.java:603)
... 18 more
Мои приложение использует Retrofit (2.1.0) и Wire, как с Square. Затем, когда мое приложение падает я проверяю файл mapping.txt
, чтобы увидеть, какой класс является причиной проблемы (я считаю, что это com.company.project.a
, верно?)
Во всяком случае, вот мой файл ProGuard (с именами неясного класса FYI):
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keep class com.squareup.wire.** { *; }
-keep class com.company.project.utils.wiremodels.ProtoFile1 { *; }
-keep class com.company.project.utils.wiremodels.ProtoFile2 { *; }
-keep class com.company.project.utils.wiremodels.ProtoFile3 { *; }
-keep class com.company.project.utils.wiremodels.ProtoFile4 { *; }
-keep class com.company.project.utils.wiremodels.ProtoFile5 { *; }
-dontwarn com.google.**
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes Exceptions
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn org.simpleframework.xml.stream.**
Было бы замечательно, если я смогу помочь с этим, пожалуйста, дайте мне знать, если есть дополнительная информация, которую я должен предоставить.
EDIT: Вопрос ответ в комментариях заметного ответа (для будущих ссылок)
В любом случае я мог бы использовать это, чтобы предотвратить «NoSuchMethodException»? Журналы не достаточно специфичны, чтобы знать, какой метод ищет – mastrgamr
, добавьте его в свой файл proguard с именем класса, содержащим раздражающий метод, чтобы узнать, помогает ли он –
sigh, no luck ... Следующая ошибка Я получил: 'java .lang.IllegalArgumentException: невозможно создать конвертер для класса com.company.project.dah' (подумайте, что он ссылается на конвертер Retrofit для ответа Wire) – mastrgamr