728x90
안드로이드 개발을 하다가 보면 갑자기 앱 아이콘이 사라지는 경우가 있다.
보통의 경우 intent-filter 를 설정 때문에 문제가 발생하게 된다.
특히 딥링크 개발하며 scheme이나 host를 매니페스트에 설정하다가 본 이슈가 발생하는 경우가 있으며 다음과 같이 해결할 수 있다.
문제 발생
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="@string/app_name" android:host="main" />
</intent-filter>
</activity>
문제 해결
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="@string/app_name" android:host="main" />
</intent-filter>
</activity>
여기서 핵심은 <data> 로 선언되는 intent-filter는 별도로 분리해야 한다는 것이다.
동일 intent-filter 에 넣는 경우 <data> 태그의 우선순위(?)가 높아 <action>, <category>가 무시되는 것으로 보인다.
실제 안드로이드 개발자 사이트에서도 다음과 같이 언급하고 있다.
두 인텐트 필터는 <data> 요소만 다릅니다. 동일한 필터에 여러 <data> 요소를 포함할 수 있지만, 고유한 URL(예: scheme 및 host의 특정 조합)을 선언하려는 경우 별도의 필터를 만드는 것이 중요합니다. 왜냐하면, 동일한 인텐트 필터의 여러 <data> 요소는 결합한 속성의 모든 변형을 고려하여 실제로 병합되기 때문입니다. 예를 들어, 다음 사항을 고려해 보세요. |
728x90