Объявление пространства имен Xml: имя пакета автозамены - программирование
Подтвердить что ты не робот

Объявление пространства имен Xml: имя пакета автозамены

У меня есть проект андроида с несколькими целями построения (используя ant). Для целей тестирования у всех создаваемых целей есть разные имена пакетов (поэтому мое имя пакета - 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 и не должны конфликтовать каждый раз, когда один человек переключает конфигурацию, и они объединяются, мне пришлось перемещать файлы макета в определенную папку конфигурации, где они выглядели бы так:

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

Теперь эти файлы хранятся в vcs, а @CONFIG.PACKAGENAME @заменяется во время предварительной сборки, а затем файл копируется из. /config/file.xml в./res/layout/file.xml.

Это крайне неудобно и не очень хорошо масштабируется (я не могу себе представить, как упоминать каждый из 50 файлов в build script).

Итак, мой вопрос: есть ли способ автоматического использования текущего имени пакета в объявлении пространства имен? Или, по крайней мере, файлы макета modife (или файлы сборки?), Так что мне не придется заменять com.mycompany.myapp при каждом изменении имени пакета.

4b9b3361

Ответ 1

Оказывается, для этого есть постфикс: res-auto.

Итак, все, что вам нужно сделать, это написать

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

Это будет автоматически использовать текущее имя пакета.