多模块Kotlin项目集成Hilt启动报错:ClassNotFoundException
override fun onCreate() { super.onCreate() }
}
## MainActivity类 ```kotlin @AndroidEntryPoint class MainActivity : FragmentActivity(), IActionListeners, IImageListeners, OnListFragmentInteractionListener { @Inject lateinit var app: AppSettings ... whatever }
报错日志
2022-07-17 15:51:27.268 8574-8574/com.myapp.myapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.myapp, PID: 8574 java.lang.RuntimeException: Unable to instantiate application app.AppSettings: java.lang.ClassNotFoundException: Didn't find class "app.AppSettings" on path: DexPathList[[zip file "/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk"],nativeLibraryDirectories=[/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/lib/arm64, /data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] at android.app.LoadedApk.makeApplication(LoadedApk.java:1244) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6683) at android.app.ActivityThread.access$1300(ActivityThread.java:237) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.ClassNotFoundException: Didn't find class "app.AppSettings" on path: DexPathList[[zip file "/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk"],nativeLibraryDirectories=[/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/lib/arm64, /data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76) at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:52) at android.app.Instrumentation.newApplication(Instrumentation.java:1158) at android.app.LoadedApk.makeApplication(LoadedApk.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6683) at android.app.ActivityThread.access$1300(ActivityThread.java:237) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lapp/Hilt_AppSettings; at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 14 more Caused by: java.lang.ClassNotFoundException: Didn't find class "app.Hilt_AppSettings" on path: DexPathList[[zip file "/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk"],nativeLibraryDirectories=[/data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/lib/arm64, /data/app/~~umETXnca3-spQEy4jvBm2Q==/com.myapp.myapp-QfTlJr20Dw0ZWFvJSqfnvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 17 more
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" android:resizeable="true"/> <application android:name="app.AppSettings" android:enabled="true" android:allowBackup="true" android:fullBackupContent="true" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:largeHeap="true" tools:replace="android:theme" android:theme="@style/Theme.myTheme.TitleBar"> <uses-library android:name="org.apache.http.legacy" android:required="false" /> ...activities... <receiver android:name=".helpers.notification.receiver.AlarmReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.NOTIFY" /> </intent-filter> </receiver> <receiver android:name=".helpers.notification.receiver.BootReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <service android:name=".helpers.notification.service.AlarmService" android:enabled="true"/> <service android:name=".helpers.audio.PlayMp3Service" android:enabled="true"/> <provider android:name=".helpers.GenericFileProvider" android:authorities="${applicationId}.helpers.GenericFileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application> </manifest>
解决方案
1. 统一Hilt版本
根build.gradle中的Hilt插件版本(2.38.1)与app模块的Hilt依赖版本(2.42)不一致,会导致编译生成的代码不兼容。统一版本步骤:
- 在根build.gradle的
ext中添加Hilt版本变量:
buildscript { ext { kotlin_version = '1.7.10' hilt_version = '2.42' java_version = JavaVersion.VERSION_1_8 } repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath("com.google.dagger:hilt-android-gradle-plugin:$hilt_version") } }
- 在app模块的dependencies中使用该变量:
dependencies { implementation("com.google.dagger:hilt-android:$hilt_version") annotationProcessor("com.google.dagger:hilt-android-compiler:$hilt_version") // 其他依赖保持不变 }
2. 为Common模块配置Hilt支持
Common作为library模块,需要正确配置Hilt插件和依赖才能生成
相关产品推荐
相关产品推荐

