【2024】Android Hilt 安裝指南:使用 Kotlin DSL 和 Version Catalog 的現代配置
5分鐘完成依賴注入框架設定,解決官方文件過時問題
本文介紹如何使用現代化方式安裝 Hilt。快速開始,請按照以下步驟執行:
安裝流程
版本資訊
目前已驗證的版本組合:
組件 | 版本 | 備註 |
AGP | 8.7 | |
Kotlin | 1.9.21 | 使用相容 Compose 版本 |
KSP | 1.9.21-1.0.15 | 使用對應 Kotlin 版本 |
Hilt | 2.48 | AGP 7.0+ 要求 |
JDK | 17 | AGP 8.0+ 要求 |
檔案架構圖
app/
├── src/
│ ├── main/
│ │ ├── java/com/example/app/
│ │ │ ├── MyApplication.kt // @HiltAndroidApp
│ │ │ ├── MainActivity.kt
│ │ │ └── di/
Gradle Scripts/
├── build.gradle.kts // 專案層級
├── app/build.gradle.kts // 應用模組層級
└── gradle/libs.versions.toml // 版本目錄
安裝步驟(注意:要按照順序來安裝)
配置 Version Catalog,在
libs.versions.toml
中定義 Hilt和 KSP版本// libs.versions.toml [versions] hilt = "2.51.1" ksp = "1.9.21-1.0.15" [libraries] hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } [plugins] hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
專案層級配置
build.gradle.kts
(Project name)// build.gradle.kts plugins { ... alias(libs.plugins.hilt) apply false alias(libs.plugins.ksp) apply false }
應用模組配置
build.gradle.kts
(Module : app)// build.gradle.kts plugins { ... alias(libs.plugins.hilt) alias(libs.plugins.ksp) } android { ... compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } } dependencies { ... implementation(libs.hilt.android) ksp(libs.hilt.android.compiler) }
創建 Application 類別
檔案架構(跟 MainActivity 同層級)
app/ ├── src/ │ ├── main/ │ │ ├── java/com/example/app/ │ │ │ ├── MyApplication.kt // @HiltAndroidApp │ │ │ ├── MainActivity.kt │ │ │ └── di/ ...
MyApplication.kt
// MyApplication.kt ... @HiltAndroidApp class MyApplication : Application()
在 AndroidManifest.xml 註冊:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app"> <application android:name=".MyApplication" <!-- 加入這行 --> android:allowBackup="true" android:icon="@mipmap/ic_launcher" ... > <activity android:name=".MainActivity" ... </activity> </application> </manifest>
同步與編譯
Sync Project with Gradle Files
Build > Clean Project
Build > Rebuild Project
注意:完成編譯後可能會看到關於 deprecated API 的警告,這是 Hilt 生成代碼的問題,可以安全忽略。
以上完成 Hilt安裝與基礎環境設定,接下來可以
在Activity中使用
@AndroidEntryPoint
在ViewModel中使用
@HiltViewModel
開始定義和注入依賴
常見問題處理
編譯警告(可忽略)
Task :app:compileDebugJavaWithJavac Note: /Users/name/AndroidStudioProjects/.../app/build/generated/ksp/debug/java/com/.../.../Hilt_MyApplication.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details.
這是 Hilt 生成代碼的問題。具體來說,
Hilt_MyApplication.java
中使用了一些已過時的 API 。因這不是自己寫的代碼引起的,因此我想這是 Hilt 團隊需要解決的問題,可能在未來的版本會修復
版本相容性對照表連結
Hilt 沒查到官方 GitHub 提供,但有開發者們的版本對照分享:
Kotlin:1.9.0 - Hilt:2.48
、Kotlin:2.0.0 - Hilt:2.51.1
官方 GitHub:github.com/google/dagger
KSP :github.com/google/ksp/releases
KSP 版本的前半部必須與使用的 Kotlin 版本相符。
如果 Kotlin是2.0.21
,KSP 版本必須是2.0.21-x.y.z
版本之一。
AGP 與 Kotlin :kotlinlang.org/docs/gradle-configure-projec..
為什麼有這份指南
官方文檔經常過時且分散,故而產出此篇文章更符合現代化的整合安裝方案。
傳統 Hilt官方建議的安裝問題
未提供搭配 Version Catalog 的配置設定
使用kapt會產生警告訊息,執行Clean project > Rebuild 產生警告訊息:
Task :app:kaptDebugUnitTestKotlin warning: The following options were not recognized by any processor: '[dagger.fastInit, dagger.hilt.android.internal.disableAndroidSuperclassValidation, dagger.hilt.android.internal.projectType, kapt.kotlin.generated]' The following options were not recognized by any processor: '[dagger.fastInit, dagger.hilt.android.internal.disableAndroidSuperclassValidation, dagger.hilt.android.internal.projectType, kapt.kotlin.generated]'
- 這個警告是關於 Kapt 處理器的選項設定,官方建議逐漸遷移使用KSP,效率更快。詳情參考:developer.android.com/build/migrate-to-ksp?..
更現代化的安裝方案
KSP 替代 kapt
Android 官方推薦,提升編譯效率
主流框架如 Room 等已支援 KSP
升級至JDK 17
- 適配 AGP 8.0 以上版本
使用 Version Catalog
集中管理版本號
避免版本衝突
適合多模組專案
參考資源
Hilt 相關
Hilt 版本對照討論:https://stackoverflow.com/questions/67744002/hilt-unsupported-metadata-version-in-kotlin
Dagger 官方 GitHub:https://github.com/google/dagger
官方文件:https://developer.android.com/training/dependency-injection/hilt-android?hl=zh-tw#kts
KSP 相關
KSP GitHub Releases:https://github.com/google/ksp/releases
KSP 遷移指南:https://developer.android.com/build/migrate-to-ksp?hl=zh-tw#add-ksp
KSP 效能改善說明:https://android-developers.googleblog.com/2021/09/accelerated-kotlin-build-times-with.html
JDK & Android Gradle Plugin
Android JDK 環境要求:https://developer.android.com/build/jdks?hl=zh-tw#compileSdk
Kotlin 與 AGP 版本對照:https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin