2012-05-04 18 views
45

私は複数のビルドターゲット(antを使用して)を持つアンドロイドプロジェクトを持っています。テスト目的のために、それらのビルドターゲットはすべて異なるパッケージ名を持ちます(したがって、私のパッケージ名はリリースビルド用のcom.mycompany.myappで、テストビルド用のcom.mycompany.myapp.testです)。Xml名前空間宣言:自動代入パッケージ名

これは、レイアウトファイルでカスタム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に置き換えされるとすぐに動作を停止します。
そのため、私はprebuilt中にcom.mycompany.myappの値を置き換える必要があります。今、この

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/@[email protected]" /> 

:このすべてのファイルは、VCSにする必要があり、1人は設定を切り替えて、それらをマージするたびに競合してはならないので、私は、彼らが次のようになり、特定のconfigフォルダの中にレイアウトファイルを移動しなければなりませんでしたファイルはvcsに格納され、@ CONFIG.PACKAGENAME @はビルド中に置き換えられ、ファイルは./config/file.xmlから./res/layout/file.xmlにコピーされます。

これは非常に不便で、実際にはうまくスケールされません(ビルドスクリプトで50個のファイルのすべてを言及することは想像できません)。

私の質問です:自動的に名前空間宣言で現在のパッケージ名を使用する方法はありますか?または少なくともmodifeのレイアウトファイル(またはファイルをビルドする?)ので、パッケージ名を変更するたびにcom.mycompany.myappを置き換える必要はありません。

答えて

115

それには、res-autoの後置があることが分かります。

だから、あなたがする必要があるすべては、これは自動的に現在のパッケージ名を使用します

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

を書きです。

+1

リファレンス:http://developer.android.com/tools/sdk/eclipse-adt.html(セクションADT 17.0.0)。 – Pang

+0

"カスタム属性を使用したカスタムビューのライブラリへのサポートの追加カスタム属性を使用するレイアウトでは、アプリケーションパッケージ名を含むURIの代わりに名前空間URI http://schemas.android.com/apk/res-autoを使用する必要があります。ビルド時に特定のアプリケーションに置き換えられます。 – flup

+2

私のプロジェクトでカスタムビューを保持するライブラリを使用していても動作しますか? –

関連する問題