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

标签 java android dagger-2 classnotfoundexception androidx

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

ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName

项目编译并运行在andorid10.0启动时崩溃 当单击 editText 时,我收到此错误

NullPointerException: Attempt to invoke virtual method 'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)' on a null object reference

项目/build.gradle

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
        maven { url 'https://jitpack.io' }
        google()
    }
    dependencies {
//        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath 'com.google.gms:google-services:3.0.0'
//        classpath 'io.fabric.tools:gradle:1.+'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://maven.google.com' }
        maven { url 'https://jitpack.io' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
ext {
    // Sdk and tools
    minSdkVersion = 16
    targetSdkVersion = 26
    compileSdkVersion = 26
    buildToolsVersion = '26.0.0'

    // App dependencies
    supportLibraryVersion = '25.4.0'
    gsonVersion = '2.8.0'
    calligraphyVersion = '2.2.0'
    glideVersion = '3.7.0'
    roomDatabase = '1.0.0-alpha3'
    rx2FastAndroidNetworking = '1.0.0'

    dagger2Version = '2.16'
    rxjava2Version = '2.0.6'
    rxandroidVersion = '2.0.1'
    placeholderviewVersion = '0.6.1'
    debugDBVersion = '1.0.0'
    timberVersion = '4.5.1'
    lifecycle = '1.0.0-alpha3'

    retrofitVersion='2.3.0'
    GsonVersion='2.7'
    okhttpVersion= '3.8.0'
    googleplus= '11.0.0'//'10.2.0'//'11.0.4'
    glideversion= '4.1.1'

    //Test dependencies
    junitVersion = '4.12'
    espressoVersion = '2.2.2'
    mockitoVersion = '2.7.1'
}

应用程序/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}
buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.27.1'
    }
}
android {
    compileSdkVersion 28
    signingConfigs {
        ReleaseConfig {
            keyAlias 'xxxxx'
            keyPassword 'xxxxx'
            storeFile file('../KeyStore/xxxxx.jks')
            storePassword 'xxxxx'
        }
    }
    defaultConfig {
        applicationId "bz.pei.driver"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        signingConfig signingConfigs.ReleaseConfig
        setProperty("archivesBaseName", "PEI Taxi_Driver_v$versionName")

    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    List<String> dirs = [
            'main',     // main sample code; look here for the interesting stuff.
            'common',   // components that are reused by multiple samples
            'template'] // boilerplate code that is generated by the sample template process
    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    dataBinding.enabled = true
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //Crashlytics
    implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
        transitive = true;
    }
    // dependency injection
    implementation "com.google.dagger:dagger:$rootProject.dagger2Version"
    annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
    annotationProcessor "com.google.dagger:dagger-android-processor:$rootProject.dagger2Version"
    implementation "com.google.dagger:dagger-android-support:$rootProject.dagger2Version"
    //Viewmodel
    implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
    implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.okhttpVersion"
    implementation "com.google.android.gms:play-services-auth:$rootProject.googleplus"
    implementation "com.google.android.gms:play-services-maps:$rootProject.googleplus"
    implementation "com.google.android.gms:play-services-location:11.0.0"
    implementation 'com.google.maps.android:android-maps-utils:0.5+'
    implementation 'com.github.javiersantos:AppUpdater:2.7'
    implementation 'com.google.firebase:firebase-core:11.0.0'
    implementation 'com.google.firebase:firebase-messaging:11.0.0'
    implementation "com.github.bumptech.glide:glide:$rootProject.glideversion"
    implementation('io.socket:socket.io-client:1.0.0') {//0.8.3') {
        exclude group: 'org.json', module: 'json'
    }
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.intuit.sdp:sdp-android:1.0.4'
    implementation "com.google.android.gms:play-services-maps:$rootProject.googleplus"
    implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
    testImplementation 'junit:junit:4.12'

}
apply plugin: 'com.google.gms.google-services'
configurations.all {
    resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}

gradle-wrapper.properties

#Wed Nov 20 00:37:33 IST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

java.lang.ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:454)
    at java.lang.Class.forName(Class.java:379)
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:635)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4296)
    at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: java.lang.ClassNotFoundException: config_inputEventCompatProcessorOverrideClassName
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:1358)
    at java.lang.BootClassLoader.loadClass(ClassLoader.java:1418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:454) 
    at java.lang.Class.forName(Class.java:379) 
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:635) 
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377) 
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4296) 
    at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)' on a null object reference
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7614)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:336)
    at android.os.Looper.loop(Looper.java:174)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

2019-11-21 06:41:59.007 27692-27692/bz.pei.driver E/AndroidRuntime:致命异常:main 进程:bz.pei.driver,PID:27692 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.util.List android.view.InputEventCompatProcessor.processInputEventForCompatibility(android.view.InputEvent)” 在 android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7614) 在 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188) 在 android.os.MessageQueue.nativePollOnce( native 方法) 在 android.os.MessageQueue.next(MessageQueue.java:336) 在 android.os.Looper.loop(Looper.java:174) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke( native 方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

最佳答案

我在 Android 10 上遇到了同样的问题。我使用了 Restring通过 attachBaseContext(newBase: Context) 注入(inject)自定义 Resource 实现的库。这里的每个人都提到 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;
            }
        }

就我而言,使用 Restring 库,我定义了一种解析字符串键并返回文本的新方法。如果该 key 在我的字符串存储库(简单 HashMap)中不可用或作为字符串资源不可用,则它会返回该 key 本身。因此永远不会为空,但根据代码,它将尝试加载为自定义 InputEventCompatProcessor,但会失败,并且 mInputCompatProcessor 将为 null

确保自定义Resource中的所有版本的getText()都遵循原始行为,并且不会导致NPE崩溃。例如,确保 R.string.config_inputEventCompatProcessorOverrideClassName 资源在不可用时将解析为空字符串。

这将解决真正的问题,您仍然可以使用已弃用的资源构造函数。

关于java - ClassNotFoundException:config_inputEventCompatProcessorOverrideClassName androidx,在 andoridx 上运行崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58965782/

相关文章:

java - IDE 内部的 Jython 正常,IDE 外部, "no os specific module found"?

java - FileNotFoundException 问题

android - 在新 Activity 中显示捕获的图像

user-interface - 如何使用JSON数据+cardslib android库动态填充卡片内容

java - Gradle 性能 : Duplicating Dependencies with Implementation vs Reusing and Exposing with API

android - 使用 Dagger 2(Robolectric 和 Mockito)进行单元测试

android - Dagger 2 : Error about subcomponents, 但我的应用程序中没有任何子组件

java - 扫描仪类跳过空白

java - Spring Boot @Scheduled 暂停

Android:如何获取 native 电子邮件客户端包名称