728x90
반응형
안드로이드 개발중에 아래처럼 Could not identify launch activity: Default Activity not found 이라는
에러 메시지를 보게 된다면 간단히 해결할 수 있는 해결 방법을 공유합니다.
1. 에러 로그
-. Could not identify launch activity: Default Activity not found
Error while Launching activity
Failed to launch an application on all devices
2. 에러 코드
-. java / kt 파일에선는 에러의 원인을 찾을 수 없습니다.
AndroidManifest.xml에 보면 그 원인을 찾을 수 있습니다.
위 XML 파일을 보게 되면 .MainActivity를 정의하였지만, 앱 실행시 컴파일러는 어느 activity가
main인지 알기 어렵습니다.
3. 해결 방법
-. AndroidManifest.xml에서 본인이 원하는 주가 되는 activity에 대해 아래와 같이 intent-filter를 적용해주면 해결됩니다.
파란색으로 마킹된 부분입니다.
아주 간단한 해결이지만, 실제로 삽질을 하게되면 자꾸 java / kt 파일만 수정하여 결국 스파게티 코드가 됩니다.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
4. 관련 백서 (white paper)
안드로이드 개발자 오피셜 사이트에서 발췌 |
암시적 인텐트 수신앱이 수신할 수 있는 암시적 인텐트가 어느 것인지 알리려면, <intent-filter> 요소를 사용하여 각 앱 구성 요소에 대해 하나 이상의 인텐트 필터를 매니페스트 파일에 선언합니다. 각 인텐트 필터는 인텐트의 작업, 데이터 및 카테고리를 기반으로 어느 유형의 인텐트를 수락하는지 지정합니다. 시스템은 인텐트가 인텐트 필터 중 하나를 통과한 경우에만 암시적 인텐트를 앱 구성 요소에 전달합니다.참고: 명시적 인텐트는 항상 자신의 대상에게 전달되며, 이는 구성 요소가 어떤 인텐트 필터를 선언하든 무관합니다. 앱 구성 요소는 자신이 수행할 수 있는 각각의 고유한 작업에 대하여 별도의 필터를 선언해야 합니다. 예를 들어 이미지 갤러리 앱에 있는 어떤 액티비티에 두 개의 필터가 있을 수 있습니다. 한 필터는 이미지를 보고, 다른 필터는 이미지를 편집하기 위한 것입니다. 액티비티가 시작되면, Intent를 검사한 다음 Intent에 있는 정보를 근거로 어떻게 동작할 것인지 결정합니다(편집기 제어 항목을 표시할 것인지 말 것인지 등). 각 인텐트 필터는 앱의 매니페스트 파일에 있는 <intent-filter>요소에서 정의하고, 이는 대응되는 앱 구성 요소에서 중첩됩니다(예: <activity> 요소). <intent-filter> 내부에서는 다음과 같은 세 가지 요소 중 하나 이상을 사용하여 허용할 인텐트 유형을 지정할 수 있습니다. <action>name 특성에서 허용된 인텐트 작업을 선언합니다. 이 값은 어떤 작업의 리터럴 문자열 값이어야 하며, 클래스 상수가 아닙니다.<data>허용된 데이터 유형을 선언합니다. 이때 데이터 URI(scheme, host, port, path)와 MIME 유형의 여러 가지 측면을 나타내는 하나 이상의 특성을 사용합니다.<category>name 특성에서 허용된 인텐트 카테고리를 선언합니다. 이 값은 어떤 작업의 리터럴 문자열 값이어야 하며, 클래스 상수가 아닙니다.참고: 암시적 인텐트를 수신하려면 CATEGORY_DEFAULT 카테고리를 인텐트 필터에 포함해야 합니다. startActivity() 및 startActivityForResult() 메서드는 마치 CATEGORY_DEFAULT 범주를 선언한 것처럼 모든 인텐트를 취급합니다. 이 카테고리를 인텐트 필터에서 선언하지 않으면 액티비티에 어떤 암시적 인텐트도 확인되지 않습니다. |
반응형
'안드로이드 개발' 카테고리의 다른 글
OutOfMemoryException 해결 방법 (0) | 2023.05.10 |
---|---|
IOException 해결 방법 (0) | 2023.05.10 |
error: unreachable statement 해결 방법 (0) | 2023.05.09 |
The project uses Gradle 4.4 which is incompatible with Java 11 or newer. (0) | 2023.05.08 |
Manifest merger failed with multiple errors, see logs 해결 방법 (0) | 2023.05.07 |