Android アプリ名とランチャーに表示されるラベルは違う

あぁ、AndroidManifest.xml で <application> 要素の label 属性に設定したものが、アプリ名だと思い込んでいた。いや、正しい。それは結果的に正しかった。
さっきまでランチャー(ホームスクリーン)に表示されるアプリアイコンにこの名前が表示されないトラブルで悩まされていた。メインの <activity> に設定した label 属性の値がアプリ名として表示されてしまっていたのだ。

あれ、どうして? と思いつつ、先の <activity> の label 属性もアプリ名に変えてみる。そうするとランチャーでもアプリ名が表示された。しかし今度はこの Activity 画面のウィンドウタイトルやアクションバーのタイトルがアプリ名になってしまう。
今まで制作したアプリではメインの <activity> に label 属性を設定することがなかったので気付かなかった。

色々と調べていて分かったこととしては <application> の label 属性値はアプリ名で、これは Android の [設定 > アプリ] でこの名前が表示されるので間違いない。
メインの <activity> に label 属性を設定しなければ、このアプリ名がランチャーにも表示される。一方、メインの <activity> に label 属性を設定した場合は、ランチャーではこの属性値が使われる。

何故こんなことになっているかというと、ランチャーにはインストールしたアプリが表示されているわけではなく、アプリの起動できる Activity (これを「メイン Activity」と読んでるんだが正しいのか?)が表示されているからだった。
このメイン Activity はアプリに一つである必要はなく、複数のメイン Activity を持つことができる。つまり、一つのアプリで複数のアイコンをランチャーに表示させることも可能だった。

具体的な設定例を挙げると、

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>

  <application
     android:label="アプリケーション名">

    <activity
       android:name="com.example.MainActivity"
       android:label="アクティビティのタイトル">

      <intent-filter android:label="ランチャーでのラベル">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <activity
       android:name="com.example.AnotherMainActivity"
       android:label="アクティビティのタイトル2">

      <intent-filter android:label="ランチャーでのラベル2">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    ...

このような AndroidManifest.xml もアリだということ。この例のアプリをインストールすると、ランチャーには「ランチャーでのラベル」と「ランチャーでのラベル2」の二つが表示される(それぞれを起動した場合でもアプリのプロセスは通常一つ)。
Activity のウィンドウタイトル(アクションバーのタイトル)と、ランチャーに表示されるラベルを別のものにしたければ、上記のように <intent-filter> の label 属性を使えばいい。まだちゃんと試してないけど icon も同じような扱いのはず。
(Android 4.1 端末で確認)

Intents and Intent Filters | Android Developers
この辺りにも書かれてるんだが、IntentFilter の action と category をまだ 100% 理解できてない。

Last updated on July 8, 2015