单击视图时抛出 NoSuchMethodException
Thrown NoSuchMethodException on click view
我在 Play 商店发布了一个启用了混淆规则的应用程序,我收到了来自 Android 版本 4.4 和 4.2 的一些错误报告,其中包含此跟踪错误
java.lang.IllegalStateException:
at android.view.View.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.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.** { *; }
提前致谢!
在更新项目(gradle 版本,appCompat -> androidX ...)时,我被迫更正了一些 lint 使用,其中之一是更改将 TextView 扩展到 AppCompatTextView 的自定义 TextView。
我忘记了,在旧 Android 版本中,当您从 AppCompatView 扩展自定义视图时,所有 xml onClick 属性都不再有效,并且会抛出 NoSuchMethodException。
您可以在这里找到一些参考资料:
Could not find a method onClick(View) in the activity class TintContextWrapper for onClick if using themes
我在 Play 商店发布了一个启用了混淆规则的应用程序,我收到了来自 Android 版本 4.4 和 4.2 的一些错误报告,其中包含此跟踪错误
java.lang.IllegalStateException:
at android.view.View.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.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.** { *; }
提前致谢!
在更新项目(gradle 版本,appCompat -> androidX ...)时,我被迫更正了一些 lint 使用,其中之一是更改将 TextView 扩展到 AppCompatTextView 的自定义 TextView。
我忘记了,在旧 Android 版本中,当您从 AppCompatView 扩展自定义视图时,所有 xml onClick 属性都不再有效,并且会抛出 NoSuchMethodException。
您可以在这里找到一些参考资料:
Could not find a method onClick(View) in the activity class TintContextWrapper for onClick if using themes