Android
Android Studio1.3.1
Android StudioのFlavor設定で初心者がはまりやすい落とし穴をまじえながら解説します。
なんだかんだ言いながら、Android Studioを使い始めています。
Eclipseから移行すると、作法がいろいろ違うので、とまどいます。
♪とまーどい 学んで 汗を流して いつも何かに傷つきながら
さて、Android Studioで一番やりたかったのは、Gradleを利用して、よくある次のようなことをやりたかったのです。
たとえば、弊社で配布しているSmart動態管理というアプリには、請求書で支払っている顧客とGoogle Playからダウンロードしていただいているお客様がいます。(例なので、実際のアプリの動きとは多少違いますが)
次のように、今まではマニュアルで変更していました。
- 請求書を送るアプリは名称を「請求書版」とつけ、請求書サイトに接続する
- Google Playからダウンロードするアプリは名称から「請求書版」を外し、Google Playのサイトに接続する
それで、テスト版と、リリース版があり、それだけで4通りのアプリが必要になるわけです。
4通りというのは、次の4通りです。
- 請求書版のテストアプリ
- 請求書版のリリースアプリ
- Google Playのテストアプリ
- Google Playのリリースアプリ
で、このあたりがFlavorというものの設定によって、簡単にできます。
まずはFlavorを作っておきます。
時代は進み、build.gradleを編集しなくても、GUIで設定できるのです。
Flavorの作り方はFile→Project Structureで、モジュールに自分が設定したいモジュールが選択されているのを確認して、Flavorsのタブをクリックします。
プラスボタンをクリックして、とりあえず、名前だけを最低限設定します。
invoice と google_play のフレーバーを作ります。
すると、build.gradleに次の一文ができています。
productFlavors { invoice { } google_play { } }
で、肝心の内容の変更です。
いろんな方のサイトを拝見すると、ディレクトリの名前とFlavorの名前を合わせて配置する、とのことでした。
http://iti.hatenablog.jp/entry/2015/06/22/084303
Windows10で開発していますので、エクスプローラーを使って次のようなディレクトリ構成を作ります。
フレーバーを追加する前は、ソースファイルや言語ファイルなどは次のような構成です。
smart_location\src\main\smart\location\…この中にjavaのソースファイルがごちゃっと入っています
smart_location\res\values\strings.xml…もともとの言語ファイル
これに、srcの中にinvoiceというフォルダを作って、次のようにinvoice用の言語ファイルを作ります。
smart_location\src\invoice\res/values/strings.xml
それぞれ、ファイルの内容は次の通りです。
smart_location\res\values\strings.xml これはデフォルトの言語設定 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="fetching">サーバーと通信中です。</string> <string name="app_name">Smart動態管理</string> <string name="btn_label">送信</string> <string name="back">戻る</string> …その他、書ききれないほどの言語設定
smart_location\src\invoice\res/values/strings.xml これは請求書版のみに利用する言語設定なので、とりあえずアプリタイトルを変更するサンプル <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Smart動態管理 請求書版</string> </resources>
で、ここまでは別にOKだったのですが、こっから先がつまづきました。
Android Studioのソースツリーを表示するペインに、invoiceディレクトリが出てこないんですよ。
上記の赤丸のように、srcのすぐ下にres/values/strings.xmlとなっている。
strings.xmlの中身は、確かにsmart_location\src\invoice\res/values/strings.xmlなのに…
なんで?解せぬ…。(´・ω・`)
と悩むことしきり。
Runしてみると、Stringファイルは確かにinvoice版が表示されているんですけどね。
で、ちょいちょい試していたら、理由がわかりました!
上記の赤丸のとこをクリックで、4つのフレーバーが変更できるようになるのですが、フレーバーのinvoiceを選択している場合は、親切にもinvoiceディレクトリを省略してくれるんですね!!
試しにフレーバーをgoogle_playDebugを選択したら、下記の図の上の赤丸部分のようにinvoice.res.values/strings.xmlと表示されるようになりました!
よかったよかったo(>▽<)o