应用程序运行后立即崩溃,并出现错误 ClassNotFoundException:在路径上找不到类应用程序:DexPathList

onS*_*ner 11 android dagger-hilt

开始一个新项目,我遇到以下错误...我尝试过其他解决方案,但似乎已过时

\n

我尝试过的步骤:

\n
    \n
  • 仔细检查插件(如下所列)
  • \n
  • 实例运行(未列出)
  • \n
  • 尝试使用 kapt 代替annotationProcessor(产生不同的错误)
  • \n
\n
    Process: com.example.transfer_tracker, PID: 28953\n    java.lang.RuntimeException: Unable to instantiate application com.example.transfer_tracker.CoreApplication package com.example.transfer_tracker: java.lang.ClassNotFoundException: Didn't find class "com.example.transfer_tracker.CoreApplication" on path: DexPathList[[dex file "/data/data/com.example.transfer_tracker/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/base.apk"],nativeLibraryDirectories=[/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/lib/arm64, /system/lib64, /system_ext/lib64]]\n        at android.app.LoadedApk.makeApplication(LoadedApk.java:1364)\n        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6686)\n        at android.app.ActivityThread.access$1500(ActivityThread.java:247)\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053)\n        at android.os.Handler.dispatchMessage(Handler.java:106)\n        at android.os.Looper.loopOnce(Looper.java:201)\n        at android.os.Looper.loop(Looper.java:288)\n        at android.app.ActivityThread.main(ActivityThread.java:7839)\n        at java.lang.reflect.Method.invoke(Native Method)\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\n     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.transfer_tracker.CoreApplication" on path: DexPathList[[dex file "/data/data/com.example.transfer_tracker/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/base.apk"],nativeLibraryDirectories=[/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/lib/arm64, /system/lib64, /system_ext/lib64]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)\n        at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)\n        at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:52)\n        at android.app.Instrumentation.newApplication(Instrumentation.java:1177)\n        at android.app.LoadedApk.makeApplication(LoadedApk.java:1356)\n        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6686)\xc2\xa0\n        at android.app.ActivityThread.access$1500(ActivityThread.java:247)\xc2\xa0\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n        at android.os.Looper.loopOnce(Looper.java:201)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:288)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:7839)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\xc2\xa0\n        Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/transfer_tracker/Hilt_CoreApplication;\n        at java.lang.VMClassLoader.findLoadedClass(Native Method)\n        at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:363)\n                ... 15 more\n     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.transfer_tracker.Hilt_CoreApplication" on path: DexPathList[[dex file "/data/data/com.example.transfer_tracker/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/base.apk"],nativeLibraryDirectories=[/data/app/~~zfKHJdy7wnPYBA_pfwtohQ==/com.example.transfer_tracker-gXT0kIH37Cwb7XaCDmovmg==/lib/arm64, /system/lib64, /system_ext/lib64]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)\n                ... 18 more\n        [CIRCULAR REFERENCE:java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/transfer_tracker/Hilt_CoreApplication;]\n
Run Code Online (Sandbox Code Playgroud)\n

安卓清单

\n
<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n    package="com.example.transfer_tracker">\n\n    <application\n        android:name=".CoreApplication"\n        android:allowBackup="true"\n        android:fullBackupContent="true"\n        android:icon="@mipmap/ic_launcher"\n        android:label="@string/app_name"\n        android:roundIcon="@mipmap/ic_launcher_round"\n        android:supportsRtl="true"\n        android:theme="@style/Theme.TransferTracker">\n        <activity\n            android:name=".login.LauncherActivity"\n            android:exported="true">\n            <intent-filter>\n                <action android:name="android.intent.action.MAIN" />\n\n                <category android:name="android.intent.category.LAUNCHER" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>\n\n
Run Code Online (Sandbox Code Playgroud)\n

项目构建.gradle

\n
buildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath "com.android.tools.build:gradle:7.0.4"\n        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"\n        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.40.5'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n
Run Code Online (Sandbox Code Playgroud)\n

模块项目.gradle

\n
plugins {\n    id 'com.android.application'\n    id 'kotlin-kapt'\n    id 'kotlin-android'\n    id 'dagger.hilt.android.plugin'\n}\n\nandroid {\n    compileSdk 31\n\n    defaultConfig {\n        applicationId "com.example.transfer_tracker"\n        minSdk 22\n        targetSdk 31\n        versionCode 1\n        versionName "1.0"\n        multiDexEnabled true\n        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"\n    }\n\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    implementation 'com.android.support:multidex:1.0.3'\n    implementation 'androidx.core:core-ktx:1.7.0'\n    implementation 'androidx.appcompat:appcompat:1.4.1'\n    implementation 'com.google.android.material:material:1.5.0'\n    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'\n    implementation 'androidx.legacy:legacy-support-v4:1.0.0'\n    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'\n    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'\n    testImplementation 'junit:junit:4.+'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.3'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'\n\n    implementation 'com.google.dagger:hilt-android:2.40.5'\n    annotationProcessor 'com.google.dagger:hilt-compiler:2.40.5'\n}\n
Run Code Online (Sandbox Code Playgroud)\n

应用类

\n
package com.example.transfer_tracker\n\nimport android.app.Application\nimport androidx.multidex.MultiDexApplication\nimport dagger.hilt.android.HiltAndroidApp\n\n@HiltAndroidApp\nclass CoreApplication : Application()\n
Run Code Online (Sandbox Code Playgroud)\n

当使用 kapt 而不是annotationProcessor时

\n
public final class CoreApplication extends android.app.Application {\n             ^\n  Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin? (dagger.hilt.android.plugin)\n  See https://dagger.dev/hilt/gradle-setup.html\n  [Hilt] Processing did not complete. See error above for details.\n\nFAILURE: Build failed with an exception.\n\n* What went wrong:\nExecution failed for task ':app:kaptDebugKotlin'.\n> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction\n   > java.lang.reflect.InvocationTargetException (no error message)\n\n* Try:\nRun with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.\n
Run Code Online (Sandbox Code Playgroud)\n

更新

\n

使用 Dagger2 实现错误消失了...也许这是由于 Hilt 库中的错误造成的

\n

Suj*_*mar 0

尝试使用MultiDexApplication扩展CoreApplication类,如下所示:

@HiltAndroidApp
class CoreApplication : MultiDexApplication() {...}
Run Code Online (Sandbox Code Playgroud)