Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xml namespace declaration: auto-substitute package name

I have an android project with multiple build targets (using ant). For testing purposes, those build targets all have different package names (so my package name is com.mycompany.myapp for release build and com.mycompany.myapp.test for test build).

This works well for the most part, except for when it comes to custom xml namespaces in layout files. So this:

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

will stop working as soon as package name is replaced with com.mycompany.myapp.test.
Because of that, I have to replace com.mycompany.myapp value each time during prebuilt. And since all this files should be in vcs, and should not conflict every time one person switches configuration and them merges, I had to move layout files into specific config folder, where they would look like:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:custom="http://schemas.android.com/apk/res/@CONFIG.PACKAGENAME@" /> 

Now this files are stored in vcs, and @CONFIG.PACKAGENAME@ is replaced during prebuilt and then the file is copied from ./config/file.xml to ./res/layout/file.xml.

This is extremely inconvinient and doesn't really scale well (I can't imagine mentioning every one of like 50 files in build script).

So my question is: is there a way to automatically use current package name in namespace declaration? Or at least modife layout files (or build files?) so that I wont have to replace com.mycompany.myapp every time I change package name.

like image 249
Alexey Avatar asked May 04 '12 11:05

Alexey


People also ask

What is the correct way to declaring an XML namespace?

XML Namespaces - The xmlns Attribute When using prefixes in XML, a namespace for the prefix must be defined. The namespace can be defined by an xmlns attribute in the start tag of an element. The namespace declaration has the following syntax. xmlns:prefix="URI".

What is namespace declaration in XML?

An XML namespace is a collection of names that can be used as element or attribute names in an XML document. The namespace qualifies element names uniquely on the Web in order to avoid conflicts between elements with the same name.

What is an XML namespace A set of names?

[Definition:] An XML namespace is a collection of names, identified by a URI reference [RFC2396], which are used in XML documents as element types and attribute names.


1 Answers

Turns out that there is a postfix for that: res-auto.

So all you need to do is write

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

This will automatically use current package name.

like image 79
Alexey Avatar answered Oct 05 '22 13:10

Alexey