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 <-- 本番環境用
  • 後はファイルを上書きコピーする。

こんな感じでできそう。まだ泥臭い感じがするので、もっといい方法はないのかな。