47

複数のビルドターゲット(antを使用)を持つAndroidプロジェクトがあります。テストの目的で、これらのビルドターゲットはすべて異なるパッケージ名を持っています(したがって、私のパッケージ名は、リリースビルドの場合はcom.mycompany.myapp、テストビルドの場合はcom.mycompany.myapp.testです)。

これは、レイアウトファイルのカスタム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を置き換える必要がないようにします。

4

1 に答える 1

118

そのための接尾辞があることがわかります:res-auto。

だからあなたがする必要があるのは書くことだけです

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto" />

これにより、現在のパッケージ名が自動的に使用されます。

于 2012-05-05T06:30:22.327 に答える