android strings.xmlの定義を環境毎に切り替える
- 以下のようにstrings.xmlに開発環境毎に異なる定義があって、切り替えて使用するような場合
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- テスト環境 --> <string name="connect_url">http://example.net/test</string> <!-- 本番環境 --> <!-- <string name="connect_url">http://example.net/product</string> --> </resources>
- 開発者が手作業で編集して切り替えるというのもあるけど、リリース時に間違った定義でモジュールを作成しないように自動化したいが良い方法はないか。
- strings.xmlでもlayoutの定義のように
のようなことができるといいと思ったけど、そういう仕組みはないようだ(?)。
- sed、antのreplaceタスク等で文字列を書き換える方法が考えられる。
- 置換するキーワードをちゃんと考えておかないと、予期しない部分まで置換してしまう危険性あり。
- リリース時の定義を事前に静的にチェックできない。
- リソース文字列を定義するstrings.xmlというのは、実はファイル名が固定ではなく、またファイルを複数用意してもOKらしい。要は中で
タグを使っていればいいらしい。 - そのため、res/values ディレクトリの下の文字列定義を複数のファイルに分割する。
res/values strings.xml envdefs.xml <-- 環境固有の定義
- また別のディレクトリやバージョン管理のブランチなどにテスト環境用/本番環境用などのファイルを分けて用意。
envdefs_test.xml <-- テスト環境用 envdefs_product.xml <-- 本番環境用
- 後はファイルを上書きコピーする。
こんな感じでできそう。まだ泥臭い感じがするので、もっといい方法はないのかな。