Бросал NoSuchMethodException при просмотре клика - PullRequest
0 голосов
/ 26 октября 2019

У меня есть приложение, опубликованное в магазине игр с включенными правилами proguard, и я получаю некоторые отчеты об ошибках из Android версий 4.4 и 4.2 с этой ошибкой трассировки

java.lang.IllegalStateException: 
      at android.view.View$1.onClick (View.java:3949)
      at android.view.View.performClick (View.java:4633)
      at android.view.View$PerformClick.run (View.java:19270)
      at android.os.Handler.handleCallback (Handler.java:733)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:146)
      at android.app.ActivityThread.main (ActivityThread.java:5602)
      at java.lang.reflect.Method.invokeNative (Method.java)
      at java.lang.reflect.Method.invoke (Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099)
      at dalvik.system.NativeStart.main (NativeStart.java)
    Caused by: java.lang.NoSuchMethodException: 
      at java.lang.Class.getConstructorOrMethod (Class.java:472)
      at java.lang.Class.getMethod (Class.java:857)
      at android.view.View$1.onClick (View.java:3942)
      at android.view.View.performClick (View.java:4633)
      at android.view.View$PerformClick.run (View.java:19270)
      at android.os.Handler.handleCallback (Handler.java:733)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:146)
      at android.app.ActivityThread.main (ActivityThread.java:5602)
      at java.lang.reflect.Method.invokeNative (Method.java)
      at java.lang.reflect.Method.invoke (Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099)
      at dalvik.system.NativeStart.main (NativeStart.java)

Поскольку нет ссылки на method, который называется, или Activity, и я не могу его воспроизвести, я понятия не имею, как я мог это исправить. (Большая часть проекта написана на Java, хотя некоторые классы на kotlin)

В файле proguard я исключил модели доменов и некоторые модификации, например:

# Application classes that will be serialized/deserialized over Gson
-keep class com.example.mypackage.DataModel.** { *; }
-keep class com.example.mypackage.WS.** { *; }

Заранее спасибо!

1 Ответ

0 голосов
/ 26 октября 2019

При обновлении проекта (версия gradle, appCompat -> androidX ...) я был вынужден исправить некоторые варианты использования lint, и одним из них было изменение пользовательского TextView, который расширил TextView до AppCompatTextView.

Я забыл, что в старых версиях Android, когда вы расширяете пользовательское представление из AppCompatView, все ваши свойства xml onClick больше не работают, и генерируется исключение NoSuchMethodException.

Некоторые ссылки можно найти здесь:

Не удалось найти метод onClick (View) в классе активности TintContextWrapper для onClick при использовании тем

Не удалось найти пользовательский метод в androidx.appcompat.widget.TintContextWrapper для обработчика onClick в MaterialButton

...