Jetpack Compose应用无自定义Application类时如何正确使用Hilt
结论先说
没有任何方式可以跳过带@HiltAndroidApp注解的Application类配置,哪怕你用Jetpack Compose也不行,只给MainActivity加@AndroidEntryPoint直接运行必然启动崩溃,不存在所谓的内部适配逻辑帮你省掉这步,我刚搭Compose+Hilt项目的时候试过偷懒省这步,直接在启动阶段抛Hilt初始化异常。
具体操作步骤
整个配置过程非常简单,哪怕你之前从来没自定义过Application类,全程只需要写3行代码,改一行清单配置,两分钟就能搞定:
- 新建一个Kotlin类,类名随便取,比如
MyApp,直接继承系统的Application类即可,不需要写任何额外业务逻辑,只需要给类加上@HiltAndroidApp注解:
@HiltAndroidApp class MyApp : Application()
- 打开项目的
AndroidManifest.xml文件,找到根节点下的<application>标签,添加android:name属性,值指向你刚创建的类即可,标签里原有的icon、label、theme等配置,以及内部声明的Activity等组件全部不需要改动:
<application android:name=".MyApp" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.YourApp"> <!-- 原有组件声明保持不变 --> </application>
- 最后给你的
MainActivity加上@AndroidEntryPoint注解,就可以正常在Activity以及内部的Composable里使用Hilt注入的依赖了,不需要给MainActivity加其他任何注解。
常见误区
很多人觉得自己没写过自定义Application就能省这步,本质是混淆了系统默认Application和Hilt要求的入口类的区别:Android系统确实会给未配置自定义Application类的应用创建一个框架内置的Application实例,但Hilt的全局依赖容器初始化逻辑,必须依托@HiltAndroidApp标记的类生成对应的代码入口,这个是Hilt的硬性初始化要求,和你用Compose还是传统View体系没有关系。
你创建的这个Application类不需要写任何额外逻辑,写完之后基本不需要再维护,完全不存在配置复杂的问题。
内容的提问来源于stack exchange,提问作者realh
相关产品推荐
相关产品推荐

