在多模块应用程序中配置 Hilt
Configure Hilt in a multi module application
我正在尝试将 Hilt 用作我的多模块项目的依赖项注入框架。我有一个名为 :app
的模块,其中包含我的应用程序 class :
@HiltAndroidApp
class SampleApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
}
}
我有一个 :feature
模块,其中包括我的单个 Activity 和使用导航架构组件的片段:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
我可以成功构建项目,但是一旦它在设备上运行,我就会收到以下异常:
Process: com.android.sample.viaplay, PID: 27219
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sample.viaplay/com.android.sample.viaplay.feature.list.MainActivity}: java.lang.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
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.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
at dagger.hilt.android.internal.managers.ActivityComponentManager.createComponent(ActivityComponentManager.java:83)
at dagger.hilt.android.internal.managers.ActivityComponentManager.generatedComponent(ActivityComponentManager.java:66)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.generatedComponent(Hilt_MainActivity.java:45)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.inject(Hilt_MainActivity.java:67)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.onContextAvailable(Hilt_MainActivity.java:38)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:297)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
at com.android.sample.viaplay.feature.list.MainActivity.onCreate(MainActivity.kt:10)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
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)
如您所见:Hilt Activity must be attached to an @AndroidEntryPoint Application.
您可以在以下位置找到源代码:https://github.com/alirezaeiii/Hilt-MultiModule-Cache
我错过了在 build.gradle.kts
中为功能模块添加 Hilt 插件和依赖项:
plugins {
id("commons.android-library")
id(BuildPlugins.HILT)
}
dependencies {
implementation(Dependencies.HILT)
kapt(AnnotationProcessorsDependencies.HILT)
}
object BuildPlugins {
const val HILT = "dagger.hilt.android.plugin"
}
object Dependencies {
const val HILT = "com.google.dagger:hilt-android:${BuildDependenciesVersions.DAGGER}"
object AnnotationProcessorsDependencies {
const val HILT = "com.google.dagger:hilt-android-compiler:${BuildDependenciesVersions.DAGGER}"
}
我正在尝试将 Hilt 用作我的多模块项目的依赖项注入框架。我有一个名为 :app
的模块,其中包含我的应用程序 class :
@HiltAndroidApp
class SampleApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
}
}
我有一个 :feature
模块,其中包括我的单个 Activity 和使用导航架构组件的片段:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
我可以成功构建项目,但是一旦它在设备上运行,我就会收到以下异常:
Process: com.android.sample.viaplay, PID: 27219
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sample.viaplay/com.android.sample.viaplay.feature.list.MainActivity}: java.lang.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
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.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
at dagger.hilt.android.internal.managers.ActivityComponentManager.createComponent(ActivityComponentManager.java:83)
at dagger.hilt.android.internal.managers.ActivityComponentManager.generatedComponent(ActivityComponentManager.java:66)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.generatedComponent(Hilt_MainActivity.java:45)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.inject(Hilt_MainActivity.java:67)
at com.android.sample.viaplay.feature.list.Hilt_MainActivity.onContextAvailable(Hilt_MainActivity.java:38)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:297)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
at com.android.sample.viaplay.feature.list.MainActivity.onCreate(MainActivity.kt:10)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
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)
如您所见:Hilt Activity must be attached to an @AndroidEntryPoint Application.
您可以在以下位置找到源代码:https://github.com/alirezaeiii/Hilt-MultiModule-Cache
我错过了在 build.gradle.kts
中为功能模块添加 Hilt 插件和依赖项:
plugins {
id("commons.android-library")
id(BuildPlugins.HILT)
}
dependencies {
implementation(Dependencies.HILT)
kapt(AnnotationProcessorsDependencies.HILT)
}
object BuildPlugins {
const val HILT = "dagger.hilt.android.plugin"
}
object Dependencies {
const val HILT = "com.google.dagger:hilt-android:${BuildDependenciesVersions.DAGGER}"
object AnnotationProcessorsDependencies {
const val HILT = "com.google.dagger:hilt-android-compiler:${BuildDependenciesVersions.DAGGER}"
}