java.lang.IllegalArgumentException: Unable to find ConfigModule implementation

本文介绍在Android开发中使用Arms框架遇到的混淆问题及解决办法。通过调整ProGuard配置,如添加特定的-dontwarn和-keep指令来避免警告并确保关键代码不被混淆。

Android开发,使用Arms框架遇到的问题

链接 https://github.com/JessYanCoding/MVPArms/issues/215 这里写了一部分的解决方法

我这边遇到的问题描述差不多但是解决方案可能有点不一样,首先在打assembleXXXXXRelease会发出一些okhttp的Warning,

所以我用了混淆抑制了警告,但是还是不成功后来我使用-keep 将Arms框架的代码和自己的包名代码不加入混淆

结果居然成功了,以下是我的 proguard-rules.pro的添加内容 待参考,和以上的链接写的有点不一样

-dontwarn org.conscrypt.OpenSSLProvider
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class com.jess.arms.** { *; }
-keep class com.pingtiao51.armsmodule.** { *; }

 

10/30 10:31:58: Launching 'app' on OnePlus GM1900. App restart successful without requiring a re-install. $ adb shell am start -n "com.example.myapplication/com.example.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 3090 on device 'oneplus-gm1900-127.0.0.1:5555'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. I/art: Late-enabling -Xcheck:jni D/libnativebridge: call UnloadNativeBridge! state=1 W/System: ClassLoader referenced unknown path: /data/app/com.example.myapplication-1/lib/x86_64 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener; at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-1/lib/x86_64, /system/lib64, /vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 3090 java.lang.RuntimeException: Unable to resume activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.IllegalArgumentException: column '_id' does not exist at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3468) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6305) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782) Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:378) at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:346) at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:349) at com.example.myapplication.MainActivity.refreshListView(MainActivity.java:61) at com.example.myapplication.MainActivity.onResume(MainActivity.java:56) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) at android.app.Activity.performResume_orig(Activity.java:6822) at android.app.Activity.performResume(Activity.java:6803) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3445) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6305)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)  为什么会出错
10-31
10/30 10:43:27: Launching 'app' on OnePlus GM1900. Install successfully finished in 467 ms. $ adb shell am start -n "com.example.myapplication/com.example.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 3492 on device 'oneplus-gm1900-127.0.0.1:5555'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. W/System: ClassLoader referenced unknown path: /data/app/com.example.myapplication-1/lib/x86_64 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener; at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-1/lib/x86_64, /system/lib64, /vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 3492 java.lang.RuntimeException: Unable to resume activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.IllegalArgumentException: column '_id' does not exist at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3468) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6305) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782) Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:378) at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:346) at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:349) at com.example.myapplication.MainActivity.refreshListView(MainActivity.java:61) at com.example.myapplication.MainActivity.onResume(MainActivity.java:56) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) at android.app.Activity.performResume_orig(Activity.java:6822) at android.app.Activity.performResume(Activity.java:6803) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3445) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6305)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)  错误原因
10-31
10/30 10:38:12: Launching 'app' on OnePlus GM1900. Install successfully finished in 473 ms. $ adb shell am start -n "com.example.myapplication/com.example.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 3284 on device 'oneplus-gm1900-127.0.0.1:5555'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. W/System: ClassLoader referenced unknown path: /data/app/com.example.myapplication-2/lib/x86_64 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener; at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.myapplication-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-2/lib/x86_64, /system/lib64, /vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 3284 java.lang.RuntimeException: Unable to resume activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.IllegalArgumentException: column '_id' does not exist at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3468) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6305) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782) Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:378) at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:346) at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:349) at com.example.myapplication.MainActivity.refreshListView(MainActivity.java:61) at com.example.myapplication.MainActivity.onResume(MainActivity.java:56) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) at android.app.Activity.performResume_orig(Activity.java:6822) at android.app.Activity.performResume(Activity.java:6803) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3445) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6305)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)  怎么修改
10-31
10/30 10:52:32: Launching 'app' on OnePlus GM1900. App restart successful without requiring a re-install. $ adb shell am start -n "com.example.myapplication/com.example.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Connected to process 3831 on device 'oneplus-gm1900-127.0.0.1:5555'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. W/System: ClassLoader referenced unknown path: /data/app/com.example.myapplication-2/lib/x86_64 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener; at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.myapplication-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-2/lib/x86_64, /system/lib64, /vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2463) at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:938) at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806) at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693) at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170) at void com.example.myapplication.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:19) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6701) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2657) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2765) at void android.app.ActivityThread.-wrap14(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1488) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at void android.os.Looper.loop() (Looper.java:154) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6305) at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:892) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:782) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 3831 java.lang.RuntimeException: Unable to resume activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.IllegalArgumentException: column '_id' does not exist at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3468) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6305) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782) Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:378) at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:346) at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:349) at com.example.myapplication.MainActivity.refreshListView(MainActivity.java:61) at com.example.myapplication.MainActivity.onResume(MainActivity.java:56) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) at android.app.Activity.performResume_orig(Activity.java:6822) at android.app.Activity.performResume(Activity.java:6803) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3445) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3508)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6305)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)  给出解决方案
最新发布
10-31
当出现 `java.lang.IllegalArgumentException: Unable to instantiate factory class` 异常时,通常表明 Java 在尝试通过反射机制实例化某个类时遇到了问题。此异常可能由多种原因导致,以下是一些常见的原因及其解决方案: ### 原因与解决方案 #### 1. **JDK 9+ 中的模块系统限制** 从 JDK 9 开始,Java 引入了模块系统(JPMS),对反射访问某些内部类进行了限制。如果代码尝试通过反射访问 `java.lang` 包下的类(如 `ClassLoader` 或 `Class`),可能会因访问权限问题而失败。 **解决方案:** 在启动 JVM 时添加以下 JVM 参数以放宽访问限制: ```bash --add-opens java.base/java.lang=ALL-UNNAMED ``` 此参数允许所有未命名模块访问 `java.lang` 包中的类,适用于 Spring Boot 等框架在 JDK 9+ 上运行时遇到的反射问题 [^2]。 #### 2. **类路径中缺少必要的依赖** 如果目标类属于某个第三方库或框架(如 MyBatis、Spring Boot 等),但该库未正确引入项目中,也会导致无法实例化。 **解决方案:** 检查项目依赖配置,确保相关依赖已正确引入。例如,如果使用的是 MyBatis Spring Boot Starter,则应确保 `pom.xml` 或 `build.gradle` 中包含以下依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> ``` 确保版本与项目兼容,并且 Maven 或 Gradle 能够正确下载该依赖 [^3]。 #### 3. **类定义不完整或构造方法不可访问** 如果目标类没有默认构造方法(无参构造器),或者构造方法被标记为 `private`、`protected` 等非公开访问权限,反射机制将无法成功实例化该类。 **解决方案:** - 确保目标类具有公开的无参构造方法: ```java public class MyFactory { public MyFactory() { // 初始化逻辑 } } ``` - 如果无法修改类定义,可以尝试通过 `setAccessible(true)` 强制访问非公开构造方法,但需注意安全策略限制: ```java Constructor<?> constructor = clazz.getDeclaredConstructor(); constructor.setAccessible(true); Object instance = constructor.newInstance(); ``` #### 4. **类加载器问题** 有时类加载器未能正确加载目标类,或者类加载器之间存在冲突,也可能导致无法实例化。 **解决方案:** - 检查类加载器是否正确初始化。 - 确保没有多个版本的相同类被不同类加载器加载(类冲突)。 - 使用 `ClassLoader.getSystemClassLoader()` 或当前线程上下文类加载器来加载目标类。 #### 5. **Spring Boot 自动配置问题** 在 Spring Boot 应用中,如果自动配置类(如 `Environment` 相关类)未能正确加载,也可能抛出此类异常。 **解决方案:** - 确保 Spring Boot 版本与 JDK 兼容。 - 清理并重新构建项目,确保所有自动配置类被正确生成。 - 检查 `spring.factories` 文件是否包含必要的自动配置类。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值