말랑한 하루

[Flutter] (Error) Error type 3: Activity class {com.x.y.MainActivity} does not exist. 본문

개발/Flutter

[Flutter] (Error) Error type 3: Activity class {com.x.y.MainActivity} does not exist.

지수는말랑이 2024. 3. 30. 19:23
반응형

Error type 3: Activity class {com.x.y.MainActivity} does not exist. OAuth중 하나인 Kakao Login을 구현하면서 만난 문제이다.

Launching lib\\main.dart on sdk gphone64 x86 64 in debug mode...
√  Built build\\app\\outputs\\flutter-apk\\app-debug.apk.

애플리케이션을 실행하면, 위와 같은 상태로 Flutter Launching 상태가 무한히 지속되는데, 단순히 오래걸리는 것이라는 착각은 하지 않는게 좋다.

 

이에 대한 문제점을 찾기 위해선 아래 명령어를 사용한다.

flutter run -v

※ 만약 VsCode를 사용하고 있다면 main.dart 또는 다양한 페이지 내에서 F5를 눌러 실행하는 것 보다, 위 명령어를 통해, 정확히 실행되는지 확인해보도록 하자.

 

그렇다면 제목과 같은 Error type 3: Activity class {com.x.y.MainActivity} does not exist. 오류를 만날 수 있다.

해당 오류는 인터넷을 검색하면 다음과 같은 해결 방법을 만나게 된다.

 

🍒 emulator wipe data

 

🍒 emulator에 존재하는 application 삭제

이 방법은 Setting → 앱 및 설정 → 모든 앱 보기를 통해 설치되었거나 설치 중 멈춘 애플리케이션을 삭제할 때 활용한다.

직접 emulator에서 삭제하는 방법 이외에, android-sdk의 tools를 찾아가 abd uninstall {packageName}을 진행해도 된다 하는데, 본인의 경우 android-sdk의 경로를 찾지 못했다.

 

하지만 나의 경우에는, 두 방법 모두 효과가 없었다.

그 이유는 잘못된 AndroidManifest.xml 작성에 존재했다.

 

나는 Flutter에서 Kakao Login을 진행하고 나서 원래의 앱으로 돌아오기 위해 커스텀 URL 스킴을 설정하여, 앱으로 리다이렉트 될 수 있도록 설정했다.

 

그리고 추후 사용될 카카오톡 공유 및 메세지를 활용하기 위한 스킴을 추가했었다.

 

이 과정에서 나는 AndroidManifest.xml을 잘못 작성했다고 말할 수 있다. 내가 xml 파일의 내용을 수정하면서, 해당 오류를 해결했기 때문이다.

 

나의 잘못은 다음과 같았다.

 

🍒 카카오톡 공유 및 메세지에 관한 스킴 설정을 새로운 MAIN <intent-filter> tag에 추가한 것

 

.MainActivity를 name으로 가지는 activity는 기본적으로 다음과 같은<intent-filter> tag를 가지고 있다.

<intent-filter>
		<action android:name="android.intent.action.MAIN"/>
		<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

그리고 카카오톡 공유 및 메세지에 관한 인텐트는 다음과 같습니다.

<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<category android:name="android.intent.category.BROWSABLE" />
		
		<!-- "kakao${YOUR_NATIVE_APP_KEY}://${PRODUCT_NAME}" 형식의 앱 실행 스킴 설정 -->
		<!-- 카카오톡 공유, 카카오톡 메시지 -->
		<data android:host="kakaolink"
		    android:scheme="kakao${KAKAO_NATIVE_APP_KEY}" />
</intent-filter>

하지만 나는 이것을 혼합해서 다음과 같이 사용했습니다.

<intent-filter>
		<action android:name="android.intent.action.MAIN"/>
		<category android:name="android.intent.category.LAUNCHER"/>
		
		<!-- "kakao${YOUR_NATIVE_APP_KEY}://${PRODUCT_NAME}" 형식의 앱 실행 스킴 설정 -->
		<!-- 카카오톡 공유, 카카오톡 메시지 -->
		<data android:host="kakaolink"
		    android:scheme="kakao${KAKAO_NATIVE_APP_KEY}" />
</intent-filter>

그래서 내 AndroidManifest 내부에서는 파악할 수 없는 <data>태그로 인해, MainActivity가 생성되지 않아 애플리케이션을 실행할 때, 찾을 수 없다고 말하는 것이라고 생각합니다.

 

잘못 혼합해서 사용했던 <intent-filter>를 수정하고, 다시 앱을 시작했을 때 내 앱은 정상적으로 설치되고 실행됐습니다.

 

이 현상에 대해 정확하게 파악하고 넘어가기 위해선 다음 4개의 레퍼런스를 참고하길 바랍니다.

https://developer.android.com/guide/components/intents-filters

https://developer.android.com/reference/android/content/Intent.html

https://developer.android.com/guide/topics/manifest/action-element?hl=ko

https://developer.android.com/guide/topics/manifest/category-element?hl=ko

반응형
Comments