๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ’ป/๊ธฐํƒ€

[Android] Hilt - java.lang.RuntimeException: Unable to instantiate application

interfacer_han 2025. 2. 1. 15:23

#1 ๋ฌธ์ œ ์ƒํ™ฉ

#1-1 Hilt ๋„์ž…

 

[Android] Dagger2 - Hilt๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

#1 Hilt ๊ฐœ์š” Hilt๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hilt๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž… ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์— ๊ธฐ๋ฐ˜ํ•ด, ๊ฐœ๋ฐœ ์ค‘์ธ ์•ฑ์— Hilt๋ฅผ ๋„์ž…ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

#1-2 Application ํด๋ž˜์Šค

package com.example.nutri_capture_new.di

import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class HiltApplication : Application()

"com.example.nutri_capture_new"๋Š” ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด๋‹ค. ์—ฌ๊ธฐ์— "di" ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  HiltApplication.kt๋ฅผ ๋„ฃ์—ˆ๋‹ค. Hilt๋Š” Application ํด๋ž˜์Šค๋ฅผ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

#1-3 ์—๋Ÿฌ ๋ฉ”์‹œ์ง€

java.lang.RuntimeException: Unable to instantiate application com.example.nutri_capture_new.di.HiltApplication package com.example.nutri_capture_new: java.lang.ClassNotFoundException: Didn't find class "com.example.nutri_capture_new.di.HiltApplication" on path: DexPathList[[zip file "/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk"],nativeLibraryDirectories=[/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/lib/arm64, /data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1574)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1503)
...

์š”์•ฝํ•˜๋ฉด, HiltApplication ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋Š” ๋ง์ด๋‹ค.

 

์ „์ฒด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€

๋”๋ณด๊ธฐ
java.lang.RuntimeException: Unable to instantiate application com.example.nutri_capture_new.di.HiltApplication package com.example.nutri_capture_new: java.lang.ClassNotFoundException: Didn't find class "com.example.nutri_capture_new.di.HiltApplication" on path: DexPathList[[zip file "/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk"],nativeLibraryDirectories=[/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/lib/arm64, /data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1574)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1503)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7558)
    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:226)
    at android.os.Looper.loop(Looper.java:313)
    at android.app.ActivityThread.main(ActivityThread.java:8762)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.nutri_capture_new.di.HiltApplication" on path: DexPathList[[zip file "/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk"],nativeLibraryDirectories=[/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/lib/arm64, /data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
    at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:51)
    at android.app.Instrumentation.newApplication(Instrumentation.java:1232)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1566)
    at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1503) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7558) 
    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:226) 
    at android.os.Looper.loop(Looper.java:313) 
    at android.app.ActivityThread.main(ActivityThread.java:8762) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) 
    Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/nutri_capture_new/di/Hilt_HiltApplication;
        at java.lang.VMClassLoader.findLoadedClass(Native Method)
        at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:1276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:621)
        ... 16 more
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.nutri_capture_new.di.Hilt_HiltApplication" on path: DexPathList[[zip file "/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk"],nativeLibraryDirectories=[/data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/lib/arm64, /data/app/~~V6g0-RtfopAougO3sWY7bA==/com.example.nutri_capture_new-blpUDwYEKGYG8Zyat-1NKA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
        ... 19 more

 

#2 ์›์ธ - kapt์˜ ๋ถ€์žฌ

plugins {
    ...
    // KSP (์–ด๋…ธํ…Œ์ด์…˜ ์ฝ๊ธฐ์šฉ)
    id("com.google.devtools.ksp")
    // Hilt
    id("com.google.dagger.hilt.android")
}

android {
    ...
}

dependencies {

    ...

    // Hilt
    implementation("com.google.dagger:hilt-android:2.46")
    ksp("com.google.dagger:hilt-compiler:2.46")
}

KSP๊ฐ€ kapt์˜ ์™„์ „ํ•œ ์ƒ์œ„ํ˜ธํ™˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค.

 

Hilt๋Š” dagger2๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์ถ”์ƒํ™” ๊ณ„์ธต์ด๋‹ค. ๋”ฐ๋ผ์„œ Hilt๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” dagger2๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  dagger2๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ kapt๋ฅผ ํ†ตํ•ด ์–ด๋…ธํ…Œ์ด์…˜(@)์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ดํ›„์— KSP๊ฐ€ ๋‚˜์™”๋Š”๋ฐ, KSP๋Š” kapt๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ „๋ถ€ ์ปค๋ฒ„ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ฆ‰, plungins { ... } ๋ฐ dependencies { ... }์— kapt ๋Œ€์‹  KSP๋งŒ ์“ฐ๋ฉด ์ฝ์ง€ ๋ชปํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. #1-2์— ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ธ @HiltAndroidApp์€ KSP๋กœ ์ฝ์„ ์ˆ˜ ์—†๊ณ  ๋ฐ˜๋“œ์‹œ kapt๋กœ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๊ธฐ์—, ์•ˆ๋“œ๋กœ์ด๋“œ ๋Ÿฐํƒ€์ž„์ด ๊ทธ ์กด์žฌ๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

 

ํ˜ธํ™˜์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋‘˜ ๋‹ค ์ฑ™๊ธฐ๋ ค๋ฉด KSP์™€ kapt๋ฅผ ๋‘˜๋‹ค ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค (#3 ์ฐธ์กฐ). ์ด๋Ÿฌ๋ฉด kapt๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ๋งŒ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์€ kapt๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋น„๊ต์  ๋” ๋น ๋ฅธ KSP๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ KSP๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

#3 ํ•ด๊ฒฐ

plugins {
    ...
    // KSP ๋ฐ kapt (์–ด๋…ธํ…Œ์ด์…˜ ์ฝ๊ธฐ์šฉ)
    id("com.google.devtools.ksp")
    id("org.jetbrains.kotlin.kapt")
    // Hilt
    id("com.google.dagger.hilt.android")
}

android {
    ...
}

dependencies {

    ...

    // Hilt
    implementation("com.google.dagger:hilt-android:2.46")
    kapt("com.google.dagger:hilt-android-compiler:2.46")
    ksp("com.google.dagger:hilt-compiler:2.46")
}

 

#4 ์†Œ์Šค ์ฝ”๋“œ

 

GitHub - Kanmanemone/nutri-capture-new

Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.

github.com

์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋œ ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ (๊ฐœ๋ฐœ ์ค‘์ธ ์•ฑ์˜ ํ†ต์งœ ์†Œ์Šค์ฝ”๋“œ)