テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

【Android】開発中のアプリのアイコンがホーム画面に表示されない場合の対処法

https://cdn-ak.f.st-hatena.com/images/fotolife/h/hmbdyh/20170110/20170110101721.jpg


先日Androidアプリを開発していたら、ホーム画面にアプリアイコンが表示されなくなってしまいました。

現象としてはこんな感じです↓

・以前はアプリアイコンがちゃんと表示されていたがいつからか消えていた

・「設定」アプリのアプリ一覧では確認できる

・「設定」アプリからアンインストールは可能



今回はこの現象の対処法についてまとめていきたいと思います。



ホーム画面にアプリアイコンが表示されなくなった

https://kanntann.com/wp-content/uploads/2018/04/b177c8ed501ea2fe245636c9e2317def.png


Androidアプリの開発中に、いつの間にかアプリアイコンが表示されなくなりました。

実機転送して動作確認をしていたので、開発中は問題ないのですが、アプリをリリースする場合、ホーム画面にアプリが表示されないのはまずいと思ったので調査してみました。



アプリで最初に立ち上げるアクティビティの決まりごと

公式によると、アプリ起動時に指定するActivityには以下のような決まりごとがあるようです。

developer.android.com

アプリのメインのアクティビティは、MAIN アクションと LAUNCHER カテゴリを含む を使用してマニフェストで宣言する必要があります。

自分のアクティビティの 1 つについて、MAIN アクションまたは LAUNCHER カテゴリのいずれかが宣言されていない場合は、アプリのアイコンがホーム スクリーンのアプリリストに表示されません。

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

Androidマニフェストに上記のような記述をしていないアプリはアプリのアイコンがホーム画面に表示されないようです。


僕のAndroidマニフェストのLauncher Activityはこんな感じになってます↓

<activity android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" android:name="org.cocos2dx.cpp.AppActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="カスタムスキーム" />
            </intent-filter>
        </activity>

一応、"android.intent.action.MAIN"と"android.intent.category.LAUNCHER" は記述してあるのになんでだろう?と思ったら、
最近、Androidアプリにディープリンクの機能を実装したので、"android.intent.action.VIEW" と"android.intent.category.DEFAULT"、
"android.intent.category.BROWSABLE" を追加したことが関係しているのかなと思いました。





【解決法】LAUNCHERとBROWSABLEは分ける必要がある

最終的には、以下のコードに変更したらホーム画面にAndroidアプリのアイコンが表示されるようになりました。

<activity android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" android:name="org.cocos2dx.cpp.AppActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <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" />
                <data android:scheme="カスタムスキーム" />
            </intent-filter>
        </activity>

intent-filterに"android.intent.category.LAUNCHER"と"android.intent.category.BROWSABLE"を一緒に書いてしまうとうまく読み込んでくれないようです。上記のようにintent-filterを分けたらうまく表示されるようになりました。

最初色々試してみても全然アプリアイコンが表示されなかったので、なんとか表示されるようになってよかったです。