Android複数のビルドターゲット(antを使用)のプロジェクトがあります。テスト目的で、これらのビルドターゲットはすべて異なるパッケージ名を持っています(したがって、私のパッケージ名はリリースビルドのcom.mycompany.myappです。 com.mycompany.myapp.test for test build)。
これは、レイアウトファイルのカスタムxml名前空間に関する場合を除いて、ほとんどの部分でうまく機能します。したがって、この:
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res/com.mycompany.myapp" />
パッケージ名がcom.mycompany.myapp.testに置き換えられるとすぐに動作を停止します。
そのため、ビルド前に毎回com.mycompany.myappの値を置き換える必要があります。そして、これらのファイルはすべてvcsにあり、1人が構成を切り替えてマージするたびに競合しないため、レイアウトファイルを特定の構成フォルダーに移動する必要がありました。
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res/@CONFIG.PACKAGENAME@" />
これで、このファイルはvcsに保存され、@ CONFIG.PACKAGENAME @は事前構築中に置き換えられ、ファイルは./config/file.xmlから./res/layout/file.xmlにコピーされます。
これは非常に不便であり、実際にはうまく拡張できません(ビルドスクリプトで50個のファイルのすべてに言及することは想像できません)。
だから私の質問は、名前空間宣言で現在のパッケージ名を自動的に使用する方法はありますか?または、少なくともパッケージファイルを変更するたびにcom.mycompany.myappを置き換える必要がないように、レイアウトファイル(またはビルドファイル)を変更します。
そのためのポストフィックスがあることがわかりました:res-auto。
だからあなたがする必要があるのは書くことです
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res-auto" />
これにより、現在のパッケージ名が自動的に使用されます。