※使用環境
Android Studio LadyBug
Kotlinのバージョン 1.9.0
エラーの内容
Android開発にて、この記事を読みながらHiltの導入を進めていたところ、AndroidManifest.xmlにアプリケーションクラスを指定して、GradleをSyncしたところで以下のようなエラーが発生しました。
java.lang.RuntimeException: Unable to instantiate application com.websarva.wings.dostudy_android.App package com.websarva.wings.dostudy_android: java.lang.ClassNotFoundException: Didn't find class "com.websarva.wings.dostudy_android.App" on path:...
要はAppクラスが見つからないよ、というエラーです。
以下のようにちゃんとAppクラスを書いて、Manifestでクラスを指定したにも関わらず、です。
@HiltAndroidApp
class App: Application()
<application
android:name=".App"
AIに言われるがままにClean Projectやproguard-rules.proファイルにAppクラスを保持するルールを追加したりするも改善せず。
何よりも明らかにAppクラスを作成して指定できているのに、Appクラスが見つからないと言われていることに絶望感を覚えていました。
そこで、私は本当に気が進まなかったのですが、hiltAndroid等のバージョンを確認してみることにしました。最近のAndroidStudioの仕様として、以下のようにバージョンを明記しなくてもライブラリを導入できるようになりました。
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
id("com.google.devtools.ksp")
id("dagger.hilt.android.plugin")
}
android {
dependency{
....
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
}
}
結果として、まだまだ開発経験の浅い自分にはこの仕様が仇となってしまいました。
解決法
Gradle Scripts内のlibs.versions.tomlを覗いてみます。
[versions]
....
hiltAndroid = "2.51.1"
hiltAndroidCompiler = "2.44"
hiltAndroidVersion = "2.51.1"
hiltCompilerVersion = "2.44"
hiltNavigationCompose = "1.2.0"
kotlin = "1.9.0"
....
2.44と2.51.1が混在していることが分かります。
2.44を2.51.1に置き換えてあげることでこの問題は解決しました。
今回の教訓:バージョン管理から目を逸らすな!!!