アプリアイコンを変更する

アプリアイコンは、アプリを差別化する重要な手段です。また、ホーム画面、[すべてのアプリ] 画面、設定アプリを含め、さまざまな場所に表示されます。

アプリアイコンをランチャー アイコンということもあります。ランチャーとは、Android デバイスでホームボタンを押してアプリの表示と整理を行う場合や、ウィジェットとショートカットを追加する場合などのエクスペリエンスのことです。

5ad4cd1802b17e78.png 65ec30da24d6fccd.png

さまざまな Android デバイスを試していると、デバイス メーカーによってランチャーのユーザー エクスペリエンスが異なる場合があることに気づくかもしれません。デバイス メーカーは、自社ブランドに特徴的なカスタム ランチャー エクスペリエンスを作成することがあります。その一環として、さまざまなメーカーが、上に示した丸いアイコン形状とは異なる形状でアプリアイコンを表示することがあります。

たとえば、すべてのアプリアイコンを正方形、丸みを帯びた正方形、またはスクワークル(正方形と円形の中間)で表示できます。

fd309218335c53cd.png

デバイス メーカーが選択する形状に関係なく、目標は、1 つのデバイス上のすべてのアプリアイコン形状を統一し、一貫したユーザー エクスペリエンスを実現することです。

830d2fd23a99ac81.png

そのため Android プラットフォームでは、API レベル 26 でアダプティブ アイコンのサポートが導入されました。アプリにアダプティブ アイコンを実装すると、高品質なアプリアイコンを適切に表示することで、幅広いデバイスに対応できるようになります。

この Codelab では、Tip Calculator ランチャー アイコンの練習用の画像ソースファイルが提供されます。Android Studio の Image Asset Studio というツールを使用して、必要なランチャー アイコンのすべてのバージョンを生成します。その後、学習した内容を応用して他のアプリのアプリアイコンを変更できます。

2ab6c3045820a223.png

前提条件

  • リソース ファイルを含め、基本的な Android プロジェクトのファイルを操作できること
  • Android Studio からエミュレータまたは物理デバイスに Android アプリをインストールできること

学習内容

  • アプリのランチャー アイコンを変更する方法
  • Android Studio で Image Asset Studio を使用してランチャー アイコン アセットを生成する方法
  • アダプティブ アイコンの概要と、2 つのレイヤで構成されている理由

作成するアプリの概要

  • ランチャー アイコンが新しい Android アプリ

必要なもの

  • Android Studio バージョン 4.1 以降がインストールされているパソコン。
  • 画像リソース ファイルをダウンロードするためのインターネット接続。

この Codelab に Kotlin の Android の基本コースの一環として取り組む場合は、すでに実施した前の Codelab のチップ計算ツールを直接使用できます。

この Codelab に単独で(コース外で)取り組んでいる場合は、Android Studio で Empty Activity テンプレートを使用して新しいプロジェクトをセットアップできます。そうすると、これらの手順に慣れるまで、既存のアプリのランチャー アイコン ファイルが変更または上書きされることはありません。

目標は、デバイスのモデルや画面密度に関係なく、ランチャー アイコンをきれいに(鮮明かつ明瞭に)表示することです。具体的な話をすると、画面のピクセル密度とは、画面上の 1 インチあたりのピクセル数(dpi、1 インチあたりのドット数)を指します。中密度デバイス(mdpi)の場合、画面上の 1 インチあたりのドット数は 160 であり、超超超高密度デバイス(xxxhdpi)の場合、画面上の 1 インチあたりのドット数は 640 です。

さまざまな画面密度のデバイスに対応するには、さまざまなバージョンのアプリアイコンを用意する必要があります。

ランチャー アイコン ファイルを探す

  1. 外観を確認するには、Android Studio でプロジェクトを開きます。アプリをテンプレートから開始した場合、Android Studio であらかじめ用意されているデフォルトのランチャー アイコンがあるはずです。
  2. [Project] ウィンドウで、[Project] ビューに切り替えます。これにより、ファイルがパソコンにどのように保存されるかを示すファイル構造に従って、プロジェクト内のファイルが表示されます。

4f9aa3d93f41669.png

  1. リソース ディレクトリ([app] > [src] > [main] > [res])に移動し、mipmap フォルダをいくつか展開します。これらの mipmap フォルダは、Android アプリのランチャー アイコン アセットを配置する場所です。

4809cedb440baf9a.png

mdpihdpixhdpi などは密度修飾子です。リソース ディレクトリの名前(mipmap など)に付加することで、特定の画面密度のデバイス用のリソースであることを示すことができます。Android の密度修飾子のリストを次に示します。

  • mdpi - 中密度画面(160 dpi まで)用のリソース
  • hdpi - 高密度画面(240 dpi まで)用のリソース
  • xhdpi - 超高密度画面(320 dpi まで)用のリソース
  • xxhdpi - 超超高密度画面(480 dpi まで)用のリソース
  • xxxhdpi - 超超超高密度画面(640 dpi まで)用のリソース
  • nodpi - 画面のピクセル密度に関係なくスケーリングされることを想定してないリソース
  • anydpi - 任意の密度にスケーリングされるリソース
  1. 画像ファイルをクリックすると、プレビューが表示されます。ic_launcher.png ファイルにはアイコンの正方形バージョンが含まれ、ic_launcher_round.png ファイルにはアイコンの円形バージョンが含まれています。どちらも各リソース ディレクトリにあります。

たとえば、[res] > [mipmap-xxxhdpi] > [ic_launcher_round.png] は次のようになります。また、アセットのサイズは右上に表示されています。この画像のサイズは 192 px x 192 px です。

f3a9121a119fe71a.png

一方、[res] > [mipmap-mdpi] > [ic_launcher_round.png] は次のようになります。サイズは 48 px x 48 px しかありません。

e76f2f5200934151.png

このように、こうしたビットマップ画像ファイルは一定のピクセル グリッドで構成されています。また、特定の画面解像度向けに作成されています。そのため、サイズを変更すると画質が低下することがあります。

ビットマップ画像を縮小すると、ピクセル情報が削除されるため、おそらく問題なく表示されます。ビットマップ画像を大幅に拡大すると、Android はピクセル情報を推測して入力する必要があるため、ぼやけた表示になる可能性があります。

ランチャー アイコンの概要について理解したところで、次はアダプティブ アイコンについて学習します。

フォアグラウンド レイヤとバックグラウンド レイヤ

Android 8.0 リリース(API レベル 26)で、アダプティブ ランチャー アイコンがサポートされました。これにより、アプリアイコンの柔軟かつ面白い視覚的効果が可能になりました。デベロッパーにとって、これはアプリアイコンがフォアグラウンド レイヤとバックグラウンド レイヤという 2 つのレイヤで構成されることを意味します。

1b5d411e9a4665f0.gif

上の例では、白の Android アイコンがフォアグラウンド レイヤにあり、青と白のグリッドがバックグラウンド レイヤにあります。フォアグラウンド レイヤはバックグラウンド レイヤの上に重ねられます。その上にマスク(この場合は円形マスク)が適用され、円形のアプリアイコンが生成されます。

アダプティブ アイコン ファイルを探す

Android Studio のプロジェクト テンプレートで提供されているデフォルトのアダプティブ アイコン ファイルを見てみましょう。

  1. Android Studio の [Project] ウィンドウで、[res] > [mipmap-anydpi-v26] リソース ディレクトリを探して展開します。

90ab834132f04c50.png

  1. XML ファイルのいずれか(ic_launcher.xml など)を開きます。次のようになっているはずです。
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
  1. <adaptive-icon> 要素を使用して、それぞれにリソース ドローアブルを指定することで、アプリアイコンの <background> レイヤと <foreground> レイヤを宣言しています。
  2. [Project] ビューに戻り、ドローアブルが宣言されている場所([drawable] > [ic_launcher_background.xml][drawable-v24] > [ic_launcher_foreground.xml])を探します。
  3. [Design] ビューに切り替えると、それぞれのプレビューが表示されます(左がバックグラウンド、右がフォアグラウンド)。

8ba74284850a2c2f.png c823613ef2633800.png

  1. どちらもベクター型ドローアブル ファイルです。ピクセル単位の固定サイズはありません。[Code] ビューに切り替えると、<vector> 要素を使用したベクター型ドローアブルの XML 宣言を表示できます。

ベクター型ドローアブルとビットマップ画像はどちらもグラフィックを表しますが、重要な違いがあります。

ビットマップ画像は、各ピクセルの色情報を除き、保持する画像についてあまり理解していません。一方、ベクター グラフィックは、画像を定義する図形の描画方法を理解しています。これらの命令は、色情報とともに、点、線、曲線のセットで構成されています。ベクター グラフィックの利点は、画質を損なうことなく、任意の画面密度のキャンバス サイズに応じてスケーリングできることです。

ベクター型ドローアブルは Android のベクター グラフィックの実装であり、モバイル デバイスで十分な柔軟性を持たせることを目的としています。使用可能な要素によって、XML で定義できます。すべての密度バケットに対してビットマップ アセットのバージョンを指定するのではなく、画像を一度定義するだけで済みます。そのため、アプリのサイズが小さくなり、保守が簡単になります。

それでは、アプリアイコンを実際に変更する作業に入ります。

次に示す 2 つの新しいアセットをダウンロードすると、Tip Calculator アプリ用のアダプティブ アイコンを作成できます。ベクター型ドローアブル ファイルの詳細をすべて理解する必要はありません。内容はデザインツールから自動的に生成されます。

  1. バックグラウンド レイヤのベクター型ドローアブル ic_launcher_background.xml をダウンロードします。ブラウザがファイルをダウンロードせずに表示する場合は、[File] > [Save Page As...] の順に選択し、ファイルをパソコンに保存します。
  2. フォアグラウンド レイヤのベクター型ドローアブル ic_launcher_foreground.xml をダウンロードします。

なお、フォアグラウンド レイヤ アセットとバックグラウンド レイヤ アセットには、両方ともサイズが 108 dp x 108 dp でなければならないなど、一定の要件があります。要件の詳細については、こちらか、マテリアル サイトの Android アイコンのデザイン ガイダンスをご覧ください。

デバイス メーカーが提供するマスクの形状によっては、アイコンの端が切り取られる可能性があるため、アイコンの重要な情報は、レイヤ中央にある直径 66 dp の円形である「セーフゾーン」に配置することが重要です。セーフゾーンの外のコンテンツは、切り取られても構わない、必須でないものにする必要があります(背景色など)。

Android Studio に戻って、新しいアセットを使用します。

  1. まず、Android アイコンと緑のグリッド背景を持つ古いドローアブル リソースを削除します。[Project] ビューで、ファイルを右クリックして [Delete] を選択します。

次のファイルを削除します。

drawable/ic_launcher_background.xml
drawable-v24/ic_launcher_foreground.xml

[Safe delete (with usage search)] チェックボックスをオフにして、[OK] をクリックします。

  1. 新しい画像アセットを作成します。[res] ディレクトリを右クリックして、[New] > [Image Asset] を選択します。または、[Resource Manager] タブをクリックし、「+」アイコンをクリックして [Image Asset] を選択します。

c655215f2a42dd5e.png

  1. Android Studio の Image Asset Studio ツールが開きます。
  2. デフォルト設定のままにします。
  3. Icon Type: Launcher Icons (Adaptive and Legacy)
  4. Name: ic_launcher

2873b6dd2ae1661a.png

  1. [Foreground Layer] タブがすでに選択されている状態で、[Source Asset] サブセクションに移動します。[Path] フィールドで、フォルダ アイコンをクリックします。
  2. パソコンを参照してファイルを選択するように促すポップアップが表示されます。パソコンにダウンロードした新しい ic_launcher_foreground.xml ファイルの場所を探します。パソコンのダウンロード フォルダに保存されている可能性があります。見つかったら、[Open] をクリックします。
  3. [Path] が、新しいフォアグラウンド ベクター型ドローアブルの場所に更新されます。[Layer Name] は [ic_launcher_foreground]、[Asset Type] は [Image] のままにします。

27ed073e3fde1c02.png

  1. 次に、インターフェースの [Background Layer] タブに切り替えます。デフォルトはそのままにしておきます。[Path] のフォルダ アイコンをクリックします。
  2. ダウンロードした ic_launcher_background.xml ファイルの場所を探します。[Open] をクリックします。

a1ccf589eb91dc96.png

  1. 新しいリソース ファイルを選択すると、プレビューが更新されます。新しいフォアグラウンド レイヤとバックグラウンド レイヤでは、次のようになります。

4d5b591e2cf6f202.png

アプリアイコンを 2 つのレイヤで表すことで、デバイス メーカー(相手先ブランド製品製造企業、略称 OEM)は、上のプレビューに示したように、Android デバイスに応じてさまざまな形状を作成できます。OEM は、デバイス上のすべてのアプリアイコンに適用されるマスクを提供します。

このマスクは、アプリアイコンのフォアグラウンド レイヤとバックグラウンド レイヤの上に適用されます。円形マスクと正方形マスクの例を次に示します。

fd16968065745024.png

円形マスクをアプリアイコンの両レイヤに適用すると、背景が青いグリッドでその中に Android が入った、円形のアイコンが作成されます(上の左の画像)。また、正方形マスクを適用すると、上の右の画像のようなアプリアイコンを生成できます。

2 つのレイヤを使用すると、2 つのレイヤを別々に動かしたりスケーリングしたりできるため、面白い視覚効果が得られます。視覚効果の見え方に関する面白い例については、設計上の考慮事項のブログ投稿をご覧ください。ユーザーが使用するデバイスや、OEM がアイコンに適用するマスクを事前に知ることはできないため、重要な情報が途切れないようにアダプティブ アイコンを設定する必要があります。

  1. フォアグラウンド レイヤのメイン コンテンツ(この場合はサービスベルのアイコン)がセーフゾーン内にあり、さまざまなマスク形状によって切り取られていないことを確認します。重要なコンテンツが切り取られている場合や小さすぎる場合は、各レイヤの [Scaling] セクションにある [Resize] スライダーバーを使用できます。この場合、サイズ変更は不要であるため、100% のままで構いません。

d349f38383ed09fe.png

  1. [Next] をクリックします。
  2. このステップは [Confirm Icon Path] です。個々のファイルをクリックすると、プレビューが表示されます。既存のファイルが上書きされる(赤い文字で表示)という警告も下部に表示されます。古いファイルは以前のアプリアイコン用であったため、問題ありません。

1ddb585036d12cf4.png

  1. デフォルトのままで構わないため、[Finish] をクリックします。
  2. mipmap フォルダで、生成されたすべてのアセットが正しく表示されることを確認します。次に例を示します。

1208e1c670bd55e5.png d917956d6e27c145.png

よくできました。ここでもう 1 つ変更を加えます。

ベクター型ドローアブル ファイルを -v26 ディレクトリに移動する

アプリの最小 SDK によっては、フォアグラウンド アセットが drawable-v24 フォルダにあり、バックグラウンド アセットが drawable フォルダにあることに気づくかもしれません。これは、フォアグラウンド アセットに、Android 7.0 リリース(API バージョン 24 ともいうため、-v24 リソース修飾子)から利用可能になったグラデーションが含まれているためです。バックグラウンド アセットにはグラデーションが含まれていないため、ベースの drawable フォルダに配置できます。

フォアグラウンド アセットとバックグラウンド アセットを 2 つの別々の drawable フォルダに配置するのではなく、両方のベクター型ドローアブル ファイルを -v26 リソース ディレクトリに移動します。これらのアセットはアダプティブ アイコンにのみ使用されるため、これら 2 つのドローアブルは API 26 以降でのみ必要です。このフォルダ構造により、アダプティブ アイコン ファイルの検索と管理が簡単になります。

drawable-anydpi-v26
   ic_launcher_background.xml
   ic_launcher_foreground.xml
mipmap-anydpi-v26
   ic_launcher.xml
   ic_launcher_round.xml
  1. まず、drawable-anydpi-v26 ディレクトリを作成します。[res] フォルダを右クリックします。[New] > [Android Resource Directory] を選択します。
  2. [New Resource Directory] ダイアログが表示されます。オプションを次のように選択します。

Directory name: drawable-anydpi-v26

Resource type: drawable(プルダウンから選択します)

Source set: main(デフォルト値をそのまま残します)

597c5c1af0ca463f.png

[OK] をクリックします。[Project] ビューで、新しいリソース ディレクトリ [res] > [drawable-anydpi-v26] が作成されていることを確認します。

  1. ic_launcher_foreground.xml ファイルを左クリックして、[drawable] フォルダから [drawable-anydpi-v26] フォルダにドラッグします。「任意の dpi」のディレクトリにリソースを配置することは、任意の密度にスケーリングできるリソースであることを表します。
  2. ic_launcher_background.xml ファイルを左クリックして、[drawable-v24] フォルダから [drawable-anydpi-v26] フォルダにドラッグします。
  3. drawable-v24 フォルダが空であれば、削除します。フォルダを右クリックして、[Delete] を選択します。
  4. プロジェクト内のすべての drawable ファイルと mipmap ファイルをクリックします。これらのアイコンのプレビューが正しく表示されることを確認します。

アプリをテストする

  1. 新しいアプリアイコンが表示されるかどうかをテストします。デバイス(エミュレータまたは物理デバイス)でアプリを実行します。
  2. デバイスのホームボタンをタップします。
  3. 上にスワイプして「すべてのアプリ」リストを表示します。
  4. 更新したアプリを探します。新しいアプリアイコンが表示されます。

54ff6ce3c55d3ba7.png

注: デバイスモデルによっては、異なる形状のランチャー アイコンが表示される場合があります。ただし、それでもバックグラウンド レイヤの上にフォアグラウンド レイヤが表示され、なんらかのマスクが適用されます。

よくできました。新しいアプリアイコンは上出来です。

アダプティブ ランチャー アイコンとレガシー ランチャー アイコン

これでアダプティブ アイコンが正しく機能するようになりましたが、アプリアイコンのビットマップ画像をすべて削除できないのはなぜかと思うかもしれません。これらのファイルは、以前のバージョンの Android で高品質なアプリアイコンを表示するために必要です。これを下位互換性といいます。

Android 8.0 以降(API バージョン 26 以降)を搭載したデバイスの場合:

アダプティブ アイコンを使用できます(フォアグラウンド ベクター型ドローアブル、バックグラウンド ベクター型ドローアブル、その上に適用される OEM マスクの組み合わせ)。プロジェクトの関連ファイルは次のとおりです。

res/drawable-anydpi-v26/ic_lancher_background.xml
res/drawable-anydpi-v26/ic_launcher_foreground.xml
res/mipmap-anydpi-v26/ic_launcher.xml
res/mipmap-anydpi-v26/ic_launcher_round.xml

Android 8.0 より前(ただしアプリの必要な最小 API レベルより後)を搭載したデバイスの場合:

レガシー ランチャー アイコンが使用されます(さまざまな密度バケットの mipmap フォルダにあるビットマップ画像)。プロジェクトの関連ファイルは次のとおりです。

res/mipmap-mdpi/ic_launcher.png
res/mipmap-mdpi/ic_launcher_round.png
res/mipmap-hdpi/ic_launcher.png
res/mipmap-hdpi/ic_launcher_round.png
res/mipmap-xhdpi/ic_launcher.png
res/mipmap-xhdpi/ic_launcher_round.png
res/mipmap-xxdpi/ic_launcher.png
res/mipmap-xxdpi/ic_launcher_round.png
res/mipmap-xxxdpi/ic_launcher.png
res/mipmap-xxxdpi/ic_launcher_round.png

Android は基本的に、アダプティブ アイコンをサポートしていない以前のデバイスではビットマップ画像にフォールバックします。

これで、アプリアイコンを変更する手順がすべて完了しました。

54ff6ce3c55d3ba7.png

この Codelab のソリューション コードを以下に示します。

res/mipmap-anydpi-v26/ic_launcher.xml

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

res/mipmap-anydpi-v26/ic_launcher_round.xml

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

res/drawable-anydpi-v26/ic_launcher_background.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
  <path
      android:pathData="M0,0h108v108h-108z">
    <aapt:attr name="android:fillColor">
      <gradient
          android:startY="-1.0078"
          android:startX="54"
          android:endY="106.9922"
          android:endX="54"
          android:type="linear">
        <item android:offset="0" android:color="#FF12C26D"/>
        <item android:offset="1" android:color="#FF0F9453"/>
      </gradient>
    </aapt:attr>
  </path>
</vector>

res/drawable-anydpi-v26/ic_launcher_foreground.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
  <path
      android:pathData="M38.19,65.92L69.32,65.92a1.2,1.2 0,0 0,1.2 -1.2,0.89 0.89,0 0,0 0,-0.23 17,17 0,0 0,-33.25 0,1.18 1.18,0 0,0 0.9,1.42ZM74.53,69.05a0.85,0.85 0,0 0,-0.78 -0.84L34,68.21a0.85,0.85 0,0 0,-0.77 0.84v2.82a0.84,0.84 0,0 0,0.77 0.86L73.78,72.73a0.85,0.85 0,0 0,0.77 -0.86L74.55,70.65C74.55,70.24 74.56,69.58 74.53,69.05ZM52.08,49h3.59a1.86,1.86 0,0 0,0 -3.72L52.08,45.28a1.86,1.86 0,0 0,0 3.72ZM53.87,39.81a1.19,1.19 0,0 0,1.19 -1.19L55.06,32.87a1.19,1.19 0,0 0,-2.38 0v5.71a1.19,1.19 0,0 0,1.19 1.19h0ZM61.69,41l4.62,-3.35a1.19,1.19 0,1 0,-1.4 -1.93L60.29,39A1.2,1.2 0,0 0,60 40.67a1.18,1.18 0,0 0,1.66 0.26ZM41.69,37.65L46.31,41a1.2,1.2 0,0 0,1.35 -2L43,35.66a1.19,1.19 0,0 0,-1.66 0.26,1.2 1.2,0 0,0 0.3,1.67Z"
      android:fillColor="#FFFFFF"/>
</vector>

また次の場所に、Android Studio によってビットマップ画像が自動生成されているはずです。

res/mipmap-mdpi/ic_launcher.png
res/mipmap-mdpi/ic_launcher_round.png
res/mipmap-hdpi/ic_launcher.png
res/mipmap-hdpi/ic_launcher_round.png
res/mipmap-xhdpi/ic_launcher.png
res/mipmap-xhdpi/ic_launcher_round.png
res/mipmap-xxdpi/ic_launcher.png
res/mipmap-xxdpi/ic_launcher_round.png
res/mipmap-xxxdpi/ic_launcher.png
res/mipmap-xxxdpi/ic_launcher_round.png
  • アプリアイコン ファイルを mipmap リソース ディレクトリに配置する。
  • 以前のバージョンの Android との下位互換性のために、各密度バケット(mdpihdpixhdpixxhdpixxxhdpi)に異なるバージョンのアプリアイコン ビットマップ画像を提供する。
  • リソース ディレクトリにリソース修飾子を追加して、特定の構成(v26 など)のデバイスで使用するリソースを指定する。
  • ベクター型ドローアブルは Android のベクター グラフィックの実装であり、関連する色情報とともに、点、線、曲線のセットとして XML で定義される。ベクター型ドローアブルでは、画質を損なうことなく任意の密度にスケーリングできる。
  • API 26 で Android プラットフォームにアダプティブ アイコンが導入された。特定の要件を満たすフォアグラウンド レイヤとバックグラウンド レイヤで構成されているため、さまざまな OEM マスクを使用して、幅広いデバイスで高品質なアプリアイコンが表示される。
  • Android Studio の Image Asset Studio を使用して、アプリのレガシー アイコンとアダプティブ アイコンを作成する。