TL;DR
Easylauncher(https://github.com/akaita/easylauncher-gradle-plugin) というAndroidアプリのランチャーアイコンに付加情報をつけてくれるGradle Pluginがあります。
Adaptive Icon対応もしているのですが、いまのところVector Assetsを使用した場合に対応していません。
LayerDrawableを使用することで、いちおうVector Assetsに対応する事が出来たのでその方法をまとめています。
🧐 Attention
Pixel3のホームアプリ(Pixel Launcher)でしか動作確認していません。他のホームアプリだと動かないかもしれません。
リリースビルドへの影響が気になる場合、リリースビルド用のresディレクトリに変更前のic_launcher.xml
をコピーしておき、リリースビルドではLayerDrawableが使用されないようにしておくと安心です。
🍽 Before
現在のic_launcher.xml
の記述が次の様になっており、<forground>
タグでVectorDrawableが指定されています。
このときに<background>
タグで指定するDrawableはVectorDrawableでもColorDrawableでも構いません
<?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>
💪 Operation
1.リボン描画用の透過画像を作成
108 x 108 dp
の透明なPNGファイルを作成し、drawable_xxdpi/ic_launcher_foreground_ribbon
のような名称で保存します。
※ mdpi 〜 xxxdpiまですべての画像を置いても、デバッグ用なので手抜きしてxxdpiだけでもOKです。
↓↓↓↓↓ ココにxxhdpi用の透過画像を貼っています ↓↓↓↓↓
↑↑↑↑↑ ココにxxhdpi用の透過画像を貼っています ↑↑↑↑↑
2.本来のフォアグラウンド画像とリボン描画用の透明画像を重ねたLayerDrawableを作成
次の内容のdrawable/ic_launcher_foreground_with_ribbon.xml
を作成します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_launcher_foreground" />
<item
android:drawable="@drawable/ic_launcher_foreground_ribbon" />
</layer-list>
3.フォアグラウンド画像としてLayerDrawableを指定する
res/mipmap-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_with_ribbon" />
</adaptive-icon>
4.build.gradleにEasylauncher用のスクリプトを追加する
build.gradle
のeasylauncherセクションに以下のような内容を記述します。
ここでforegroundIconNames
にリボン描画用の透明画像のDrawableを指定します。
詳細なEasylauncherのカスタマイズ方法についてはgithubのREADMEを参照してください。
https://github.com/akaita/easylauncher-gradle-plugin
easylauncher {
foregroundIconNames "@drawable/ic_launcher_foreground_ribbon"
buildTypes {
debug {
filters = customColorRibbonFilter("開発版", "#DF3A01", "#FFFFFF", "bottom")
}
}
}