런처 바로가기 앱 유지를 위한 Activity Alias

안드로이드 앱개발시 업데이트는 필수 사항이다. 안드로이드의 앱 아이콘은 Manifest의 Activity에 정의된 android.intent.category.LAUNCHER를 통해서 런처아이콘으로 인식한다. 앱을 설치후 바로가기를 만들면 해당 Activity Name정보를 저장하고 있다가 그 정보를 통해서 앱을 실행하게 된다. 하지만 앱을 업데이트시 개발자가 android.intent.category.LAUNCHER로 정의된 실행 Activity를 변경하게 되면 업데이트시 모든 바로가기는 삭제 된다. 사용자들이 바탕화면에 바로가기를 통해 만들어둔것이 없어 진다면 사용자로써는 당황하게 된다. 


기존 android.intent.category.LAUNCHER에 정의된  Activity Name 변경을 하지 않고 메이저 업데이트를 할 수도 있지만,  Activity Alias를 이용하면 간단하게 기존의 이름을 유지한체 실행 Activity변경이 가능하다. 

일반적으로 아래와 같이 실행 Activity를 구성한다. 메이저업데이트시 .MainActivity를 변경하게 되면 바로가기는 모두 삭제 된다. 

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

아래와 같이 Activity Alias를 이용하여 가짜 Activity를 만들어 주면된다. name을 기존의 .MainActivity로 주고 진짜 실행될 targetActivity를 주면 .MainActivity가 불려지면 .SplashActivity가 실행되는 구조이다. 

<activity
    android:name=".SplashActivity"
    android:label="@string/app_name"/>

<activity-alias
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:targetActivity=".SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>

*팁! 반드시 activity를 먼저 선언 후 tagetActivity에 값을 줘야한다. 그렇지 않을 경우 실행시 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 에러가 난다. 

Activity Alias를 이용하면 같은 Activity이지만 전혀 다른 Activity로 인식하기때문에 Task를 분리도 가능하다. 

댓글 남기기