Muk*_*esh 1 java android classnotfoundexception dagger-2 androidx
迁移到在 AndroidX 设备上运行的 AndroidX(29) 后崩溃显示
\nClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\nRun Code Online (Sandbox Code Playgroud)\n该项目编译并运行时在 andorid10.0 中启动时崩溃\n单击 editText 时出现此错误
\nNullPointerException: Attempt to invoke virtual method \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' on a null object reference\nRun Code Online (Sandbox Code Playgroud)\n项目/build.gradle\n
ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\nRun Code Online (Sandbox Code Playgroud)\r\n应用程序/build.gradle
\nNullPointerException: Attempt to invoke virtual method \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' on a null object reference\nRun Code Online (Sandbox Code Playgroud)\r\ngradle-wrapper.properties
\nbuildscript {\n repositories {\n jcenter()\n maven { url \'https://maven.fabric.io/public\' }\n maven { url \'https://jitpack.io\' }\n google()\n }\n dependencies {\n// classpath \'com.android.tools.build:gradle:2.3.3\'\n classpath \'com.android.tools.build:gradle:3.5.0\'\n classpath \'com.google.gms:google-services:3.0.0\'\n// classpath \'io.fabric.tools:gradle:1.+\'\n\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n}\n\nallprojects {\n repositories {\n google()\n jcenter()\n mavenCentral()\n maven { url \'https://maven.google.com\' }\n maven { url \'https://jitpack.io\' }\n }\n}\n\ntask clean(type: Delete) {\n delete rootProject.buildDir\n}\next {\n // Sdk and tools\n minSdkVersion = 16\n targetSdkVersion = 26\n compileSdkVersion = 26\n buildToolsVersion = \'26.0.0\'\n\n // App dependencies\n supportLibraryVersion = \'25.4.0\'\n gsonVersion = \'2.8.0\'\n calligraphyVersion = \'2.2.0\'\n glideVersion = \'3.7.0\'\n roomDatabase = \'1.0.0-alpha3\'\n rx2FastAndroidNetworking = \'1.0.0\'\n\n dagger2Version = \'2.16\'\n rxjava2Version = \'2.0.6\'\n rxandroidVersion = \'2.0.1\'\n placeholderviewVersion = \'0.6.1\'\n debugDBVersion = \'1.0.0\'\n timberVersion = \'4.5.1\'\n lifecycle = \'1.0.0-alpha3\'\n\n retrofitVersion=\'2.3.0\'\n GsonVersion=\'2.7\'\n okhttpVersion= \'3.8.0\'\n googleplus= \'11.0.0\'//\'10.2.0\'//\'11.0.4\'\n glideversion= \'4.1.1\'\n\n //Test dependencies\n junitVersion = \'4.12\'\n espressoVersion = \'2.2.2\'\n mockitoVersion = \'2.7.1\'\n}Run Code Online (Sandbox Code Playgroud)\r\napply plugin: \'com.android.application\'\napply plugin: \'io.fabric\'\n\nrepositories {\n maven { url \'https://maven.fabric.io/public\' }\n}\nbuildscript {\n repositories {\n maven { url \'https://maven.fabric.io/public\' }\n }\n\n dependencies {\n classpath \'io.fabric.tools:gradle:1.27.1\'\n }\n}\nandroid {\n compileSdkVersion 28\n signingConfigs {\n ReleaseConfig {\n keyAlias \'xxxxx\'\n keyPassword \'xxxxx\'\n storeFile file(\'../KeyStore/xxxxx.jks\')\n storePassword \'xxxxx\'\n }\n }\n defaultConfig {\n applicationId "bz.pei.driver"\n minSdkVersion 15\n targetSdkVersion 28\n versionCode 1\n versionName "1.0"\n multiDexEnabled true\n vectorDrawables.useSupportLibrary = true\n testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"\n signingConfig signingConfigs.ReleaseConfig\n setProperty("archivesBaseName", "PEI Taxi_Driver_v$versionName")\n\n }\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_1_7\n targetCompatibility JavaVersion.VERSION_1_7\n }\n\n List<String> dirs = [\n \'main\', // main sample code; look here for the interesting stuff.\n \'common\', // components that are reused by multiple samples\n \'template\'] // boilerplate code that is generated by the sample template process\n sourceSets {\n main {\n dirs.each { dir ->\n java.srcDirs "src/${dir}/java"\n res.srcDirs "src/${dir}/res"\n }\n }\n androidTest.setRoot(\'tests\')\n androidTest.java.srcDirs = [\'tests/src\']\n\n }\n buildTypes {\n release {\n minifyEnabled false\n proguardFiles getDefaultProguardFile(\'proguard-android.txt\'), \'proguard-rules.pro\'\n }\n }\n lintOptions {\n checkReleaseBuilds false\n abortOnError false\n }\n dataBinding.enabled = true\n}\n\ndependencies {\n implementation fileTree(include: [\'*.jar\'], dir: \'libs\')\n androidTestImplementation(\'androidx.test.espresso:espresso-core:3.1.0\', {\n exclude group: \'com.android.support\', module: \'support-annotations\'\n })\n //Crashlytics\n implementation(\'com.crashlytics.sdk.android:crashlytics:2.8.0@aar\') {\n transitive = true;\n }\n // dependency injection\n implementation "com.google.dagger:dagger:$rootProject.dagger2Version"\n annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"\n annotationProcessor "com.google.dagger:dagger-android-processor:$rootProject.dagger2Version"\n implementation "com.google.dagger:dagger-android-support:$rootProject.dagger2Version"\n //Viewmodel\n implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"\n implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"\n implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.okhttpVersion"\n implementation "com.google.android.gms:play-services-auth:$rootProject.googleplus"\n implementation "com.google.android.gms:play-services-maps:$rootProject.googleplus"\n implementation "com.google.android.gms:play-services-location:11.0.0"\n implementation \'com.google.maps.android:android-maps-utils:0.5+\'\n implementation \'com.github.javiersantos:AppUpdater:2.7\'\n implementation \'com.google.firebase:firebase-core:11.0.0\'\n implementation \'com.google.firebase:firebase-messaging:11.0.0\'\n implementation "com.github.bumptech.glide:glide:$rootProject.glideversion"\n implementation(\'io.socket:socket.io-client:1.0.0\') {//0.8.3\') {\n exclude group: \'org.json\', module: \'json\'\n }\n implementation \'androidx.cardview:cardview:1.0.0\'\n implementation \'androidx.appcompat:appcompat:1.0.0\'\n implementation \'com.google.android.material:material:1.0.0\'\n implementation \'androidx.constraintlayout:constraintlayout:1.1.3\'\n implementation \'com.intuit.sdp:sdp-android:1.0.4\'\n implementation "com.google.android.gms:play-services-maps:$rootProject.googleplus"\n implementation \'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar\'\n testImplementation \'junit:junit:4.12\'\n\n}\napply plugin: \'com.google.gms.google-services\'\nconfigurations.all {\n resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"\n resolutionStrategy.force \'com.google.code.findbugs:jsr305:1.3.9\'\n}Run Code Online (Sandbox Code Playgroud)\r\njava.lang.ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\n at java.lang.Class.classForName(Native Method)\n at java.lang.Class.forName(Class.java:454)\n at java.lang.Class.forName(Class.java:379)\n at android.view.ViewRootImpl.<init>(ViewRootImpl.java:635)\n at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)\n at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95)\n at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4296)\n at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)\n at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)\n at android.os.Handler.dispatchMessage(Handler.java:107)\n at android.os.Looper.loop(Looper.java:214)\n at android.app.ActivityThread.main(ActivityThread.java:7356)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\n Caused by: java.lang.ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\n at java.lang.Class.classForName(Native Method)\n at java.lang.BootClassLoader.findClass(ClassLoader.java:1358)\n at java.lang.BootClassLoader.loadClass(ClassLoader.java:1418)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:312)\n at java.lang.Class.classForName(Native Method)\xc2\xa0\n at java.lang.Class.forName(Class.java:454)\xc2\xa0\n at java.lang.Class.forName(Class.java:379)\xc2\xa0\n at android.view.ViewRootImpl.<init>(ViewRootImpl.java:635)\xc2\xa0\n at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)\xc2\xa0\n at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95)\xc2\xa0\n at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4296)\xc2\xa0\n at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:107)\xc2\xa0\n at android.os.Looper.loop(Looper.java:214)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:7356)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\xc2\xa0\n Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available\njava.lang.NullPointerException: Attempt to invoke virtual method \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' on a null object reference\n at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7614)\n at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)\n at android.os.MessageQueue.nativePollOnce(Native Method)\n at android.os.MessageQueue.next(MessageQueue.java:336)\n at android.os.Looper.loop(Looper.java:174)\n at android.app.ActivityThread.main(ActivityThread.java:7356)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\nRun Code Online (Sandbox Code Playgroud)\n2019-11-21 06:41:59.007 27692-27692/bz.pei.driver E/AndroidRuntime:致命异常:main\n进程:bz.pei.driver,PID:27692\njava.lang.NullPointerException:尝试调用虚拟空对象引用上的方法 \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' \nat android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7614)\nat android .view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)\nat android.os.MessageQueue.nativePollOnce(本机方法)\nat android.os.MessageQueue.next(MessageQueue.java:336)\nat android.os.Looper。循环(Looper.java:174)\nat android.app.ActivityThread.main(ActivityThread.java:7356)\nat java.lang.reflect.Method.invoke(本机方法)\nat com.android.internal.os.RuntimeInit $MethodAndArgsCaller.run(RuntimeInit.java:492)\nat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
\n我在 Android 10 上遇到了同样的问题。我使用了Restring库,它Resource通过attachBaseContext(newBase: Context). 这里的每个人都提到了Resource标记为已弃用的构造函数,但它并没有真正引起问题。
我深入研究了 Android 源代码,发现了引发 NPE 的真正原因。
受影响的线路来自ViewRootImpl.java:
String processorOverrideName = context.getResources().getString(
R.string.config_inputEventCompatProcessorOverrideClassName);
if (processorOverrideName.isEmpty()) {
// No compatibility processor override, using default.
mInputCompatProcessor = new InputEventCompatProcessor(context);
} else {
InputEventCompatProcessor compatProcessor = null;
try {
final Class<? extends InputEventCompatProcessor> klass =
(Class<? extends InputEventCompatProcessor>) Class.forName(
processorOverrideName);
compatProcessor = klass.getConstructor(Context.class).newInstance(context);
} catch (Exception e) {
Log.e(TAG, "Unable to create the InputEventCompatProcessor. ", e);
} finally {
mInputCompatProcessor = compatProcessor;
}
}
Run Code Online (Sandbox Code Playgroud)
就我而言,使用 Restring 库,我定义了一种解析字符串键并返回文本的新方法。如果该密钥在我的字符串存储库(简单 HashMap)中不可用或作为字符串资源不可用,则它会返回该密钥本身。所以永远不会是空的,但根据代码,它将尝试加载自定义,InputEventCompatProcessor这将失败并且 mInputCompatProcessor将是null。
确保getText()您的自定义中的所有版本Resource都尊重原始行为,并且不会导致 NPE 崩溃。例如,确保R.string.config_inputEventCompatProcessorOverrideClassName资源在不可用时将被解析为空字符串。
这将解决真正的问题,您仍然可以使用已弃用的 Resource 构造函数。
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |