ClassNotFoundException:config_inputEventCompatProcessorOverrideClassName androidx,在 andoridx 上运行崩溃

Muk*_*esh 1 java android classnotfoundexception dagger-2 androidx

迁移到在 AndroidX 设备上运行的 AndroidX(29) 后崩溃显示

\n
ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\n
Run Code Online (Sandbox Code Playgroud)\n

该项目编译并运行时在 andorid10.0 中启动时崩溃\n单击 editText 时出现此错误

\n
NullPointerException: Attempt to invoke virtual method \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' on a null object reference\n
Run Code Online (Sandbox Code Playgroud)\n

项目/build.gradle\n

\r\n
\r\n
ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

应用程序/build.gradle

\n

\r\n
\r\n
NullPointerException: Attempt to invoke virtual method \'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)\' on a null object reference\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

gradle-wrapper.properties

\n

\r\n
\r\n
buildscript {\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\n
\r\n
\r\n

\n

\r\n
\r\n
apply 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\n
\r\n
\r\n

\n

java.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)\n
Run Code Online (Sandbox Code Playgroud)\n

2019-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

Ján*_*iár 5

我在 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 构造函数。