Develop/Flutter

[Flutter 플러터] 패키지명 변경 시 android 수정해야 할 내용 feat.FATAL EXCEPTION: main

issuemaker99 2024. 9. 17. 00:09
728x90

안드로이드 어플 심사할 때 패키지명을 변경하라고 하는 경우가 있습니다

flutter 로 프로젝트 생성 하면 기본 패키지가 "com.example.프로젝트명" 이렇게 됩니다.

이때 example 을 패키지명으로 사용하지 말라고 하기 때문에 변경합니다.

그리고 빌드를 하면 아래와 같은 오류가 발생 합니다. 

오류 내용 : FATAL EXCEPTION: main

E/AndroidRuntime(14305): FATAL EXCEPTION: main
E/AndroidRuntime(14305): Process: com.taekistyle.avg_price, PID: 14305
E/AndroidRuntime(14305): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.taekistyle.avg_price/com.taekistyle.avg_price.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.taekistyle.avg_price.MainActivity" on path: DexPathList[[zip file "/data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/base.apk"],nativeLibraryDirectories=[/data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/lib/arm64, /data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(14305): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3689)
E/AndroidRuntime(14305): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
E/AndroidRuntime(14305): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
E/AndroidRuntime(14305): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
E/AndroidRuntime(14305): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
E/AndroidRuntime(14305): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
E/AndroidRuntime(14305): 	at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(14305): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(14305): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
E/AndroidRuntime(14305): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
E/AndroidRuntime(14305): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.taekistyle.avg_price.MainActivity" on path: DexPathList[[zip file "/data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/base.apk"],nativeLibraryDirectories=[/data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/lib/arm64, /data/app/~~tHfC_LFnKhojtwHZKORE3Q==/com.taekistyle.avg_price-ttgOUIXZ_ldrVzk2_cY5gA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(14305): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E/AndroidRuntime(14305): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(14305): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(14305): 	at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
E/AndroidRuntime(14305): 	at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44)
E/AndroidRuntime(14305): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1378)
E/AndroidRuntime(14305): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676)
E/AndroidRuntime(14305): 	... 12 more

 

이런 경우 총 4가지 부분에서 패키지 변경을 해주고 다시 빌드를 해야 합니다. 

예를들어 변경한 패키지명이 "com.taekistyle.avg_price" 라고 가정하겠습니다.

example 부분을 taekistyle 로 변경한 경우 입니다.

{프로젝트 디렉토리}/android/app/build.gradle
{프로젝트 디렉토리}/android/app/src/main/AndroidManifest.xml
{프로젝트 디렉토리}/android/app/src/main/kotlin/com/{폴더명수정}/avg_price
{프로젝트 디렉토리}/android/app/src/main/kotlin/com/{폴더명수정}/avg_price/MainActivity.kt

 

1. {프로젝트 디렉토리}/android/app/build.gradle  파일 수정

아래처럼 namespace 와 applicationId 값을 변경 합니다.

android {
    namespace = "com.taekistyle.avg_price"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion


    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.taekistyle.avg_price"
        ...
        ...
        ...
    }
    ...
    ...
    ...
}

build.gradle  파일 수정

 

2. {프로젝트 디렉토리}/android/app/src/main/AndroidManifest.xml 파일 수정 

manifest 에 package 값을 추가 합니다. 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.taekistyle.avg_price">
        
        ...
        ...
        ...
</manifest>

AndroidManifest.xml 파일 수정

 

3. {프로젝트 디렉토리}/android/app/src/main/kotlin/com/{폴더명수정}/avg_price 

패키지명으로 폴더가 만들어져 있는데 변경한 패키지명으로 폴더명을 변경 합니다. 

android/app/src/main/kotlin 폴더명 변경

 

4. {프로젝트 디렉토리}/android/app/src/main/kotlin/com/{폴더명수정}/avg_price/MainActivity.kt 파일 수정 

MainActivity.kt 파일 상단의 패키지명을 수정 합니다.

package com.taekistyle.avg_price

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity()

MainActivity.kt 파일 수정

 

이제 다시 빌드를 하면 정상적으로 빌드가 되고 에러가 발생하지 않는걸 확인 할 수 있습니다.

 

LIST