Flavorってなんなのか

# Flavor（味付け）?
みなさんFlavor使ってますか
意外と使ってないアプリも多かったりするんじゃないですかね

今日はFlavorのよくある使い方を例に、少しだけアプリに味付けをしてみたいと思います

とりあえずAndroidStudioで適当なプロジェクトつくります
URLとか出したいじゃないですか。ふつう。
ということで、Configファイルに記載してあるURLを出してみます。
<img width="1317" alt="スクリーンショット 2019-12-05 19.55.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/5eb113cf-553a-bf64-fb5a-e773fdc72f8b.png">
<img width="1317" alt="スクリーンショット 2019-12-05 19.56.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/dfe73c99-49af-37f2-bc36-85c219b3691d.png">

こんな感じで出ましたね。はい。
<img width="300" alt="スクリーンショット 0400665f-20d3-3f89-c5a0-2a03dc4fe929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/0400665f-20d3-3f89-c5a0-2a03dc4fe929.png">

・・・URLとかってテスト用と本番用で変えたい場合がほとんどですよね。。。

# わけてみる
本番用をhttps://www.yahoole.com
テスト用をhttps://www.test.yahoole.com

って感じにわけたいです。

ProjectStructureを起動してBuildVariantsからFlavorsを追加しましょう

# Dimensionをつくる
Flavorを登録するためには、まずDimensionというものを登録する必要があります
これはFlavorをいろいろなことに使えるようにするためのものです

でもFlavorがなんなのかがいまいちわかってないのに、Dimensionの話をされても困りますよね
ここはおまじないのように「default」というDimensionでも作ってお茶を濁すことにしましょう
<img width="955" alt="スクリーンショット 2019-12-05 20.45.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/fef63c37-c943-bee1-b6ca-ce729fefb381.png">
<img width="955" alt="スクリーンショット 2019-12-05 20.45.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/d1b38e6c-ee95-9929-b8ee-bfc557d953df.png">

# Flavorをつくる
Dimensionが登録できたので、Flavorを登録することができるようになりました
さっそく
本番：production
テスト：development
というFlavorを作ってみましょう
<img width="955" alt="スクリーンショット 2019-12-05 20.50.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/7dc5dd5b-e251-b5fe-4ecc-18741eccb355.png">
<img width="955" alt="スクリーンショット 2019-12-05 20.50.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/fe707e97-2d1b-150e-fa53-5e7b8edf579d.png">

はい、2つできました

Flavorはたくさんのことができるんですが、今回は本当にシンプルにURLを変えるということだけやってみます


# Flavorごとの入れ物をつくる
まずはprojectのウィンドウをAndroidからProject Filesに変えましょう
<img width="636" alt="スクリーンショット 2019-12-05 20.52.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/ff50d2a5-3a1f-04ca-38bd-c312b813ac7b.png">

次に、Configファイルの入っている、「main.java.com.gagaaplication」というフォルダ階層のmainの部分をdevelopmentに変えたフォルダ階層を作成します。
<img width="636" alt="スクリーンショット 2019-12-05 20.53.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/8b02d646-c31b-3106-e538-29b98fe7749f.png">
↓
<img width="636" alt="スクリーンショット 2019-12-05 20.59.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/7c4c1386-afbd-b1e5-29c0-3a25d46e7b1a.png">

次に、Configファイルを今作った、「development.java.com.gagaaplication」の下に移動させます
<img width="636" alt="スクリーンショット 2019-12-05 21.00.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/8b52cc59-5170-3a16-b345-61f8192a723b.png">

続いて、「development.java.com.gagaaplication」のdevelopmentをproductionに変えたものをコピペして作ります
<img width="636" alt="スクリーンショット 2019-12-05 21.02.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/3911f34b-96c8-83d1-abbb-8442406f4bd2.png">

これで、main、development、productionという3つのおなじようなフォルダ構成ができました

# Configの中身を変える
ConfigのURLを先程の本番用とテスト用にかきかえます
<img width="1057" alt="スクリーンショット 2019-12-05 21.06.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/36a05672-4351-c857-e901-06f5d8e98f8d.png">

これで、productionフォルダ配下のConfigの中身とdevelopmentフォルダ配下のConfigの中身が異なるものになりました

# 実行してみる
FlavorはBuildValiantsウィンドウから変更できます。
<img width="647" alt="スクリーンショット 2019-12-05 21.08.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/1db40b18-c374-0328-10bd-7e6f174a2204.png">
「DebugとかReleaseとかついてるやんけ！わからんわ！」となってしまった方はとりあえずDebugが付いてるのを選びましょう
このDebugとかReleaseというのは「Build Type」というものなんですが、これについてはまた今度説明することにして、ここではだまってDebugを選びましょう

ではFlavor「development」（developmentDebug）を選んでRun！
<img width="300" alt="スクリーンショット 0400665f-20d3-3f89-c5a0-2a03dc4fe929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/9cca2879-f614-9f29-67f8-a25428c2cb53.png">

続いてFlavor「production」（productionDebug）を選んでRun！
<img width="300" alt="スクリーンショット 0400665f-20d3-3f89-c5a0-2a03dc4fe929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241057/0400665f-20d3-3f89-c5a0-2a03dc4fe929.png">

どうでしょう？
見事にURLの中身が変わったでしょうか？

# まとめ
こんな感じでFlavorを使うと簡単になにかの値を切り替えることができます
今回はURLでしたが、クラス自体の中身を変えてmock用のFlavorを作ったり、SDKのバージョンを切り替えてテストするのに使用できたりと、あなた好みの味付けでビルドをすることができるようになります

ちなみに、アプリが大方出来上がってきてからFlavorで切り分けしようとすると変えたい情報が散らばってしまっていたりしてけっこう大変なので、Flavorはアプリの開発初期段階で作成してしまうのをおすすめします

では、すてきなAndoridライフを！