言いたいことはそれだけか

KotlinとかAndroidとかが好きです。調べたことをメモします。٩( 'ω' )و

Build typeによってアプリアイコンを分ける

はじめに

この記事は諸事情によりRibbonizerライブラリが使えない人たち向けに書いたものです。 Ribbonizerが使える人はそちらを使ったほうが良いです。

やりたいこと

Debug buildの時とRelease buildの時にapp idやapp nameを変えて一つの端末の中に両者を共存させていたのですが、 アイコンが同じだと分かりづらいのでアイコンも分けることに。

どうするか

Ribbonizerという素敵なライブラリがあります。これをつかえば2行ほどbuild.gradleに書き足すだけでやりたいこと達成です。

github.com

どうするか その2

以下、諸事情により↑が使えない人向けです。 自分の場合だと、ローカルでbuildする場合は何の問題もないのですが、 Circle CIでbuildするときにCircle CIの4G制限に引っかかってしまいdied unexpectedly…(´・_・`)

とりあえずライブラリをつかわず自前でどうにかする方向で考えます。 こちらの記事がとても参考になりました。

ninjinkun.hatenablog.com

typeの縛りが激しいresValueと違って、placeholderはdrawableも扱えます。

まずはこんな感じでdefaultConfigに追記。

    defaultConfig {

        manifestPlaceholders = [appIcon:"@drawable/your_app_icon"]
    }

debug版のみアイコンを変えたいのでbuildtypeがdebugの時はdebug用のアイコンを指定します。 (自分の場合はRibbonizerが生成したdebug用のアイコンをbuild/ディレクトリ下から拾ってリネームして指定しました笑)

    buildTypes {
        debug {

            manifestPlaceholders = [appIcon:"@drawable/your_debug_app_icon"]
        }
    }

最後にManifestでこれを指定すればOK.

    <application

            android:icon="${appIcon}"

この方法だとお手軽に動くのですが、debug用のアイコンリソースがapkパッケージの中に含まれてしまいます。 それが耐えられない人はやっぱりRibbonizerでどうにかする方法で頑張ってください。