Xml命名空间声明:自动replace包名

我有一个Android项目与多个生成目标(使用ant)。 为了testing的目的,这些构build目标都有不同的包名称(所以我的包名称是com.mycompany.myapp用于发布版本,com.mycompany.myapp.test用于testing版本)。

除了当涉及到布局文件中的自定义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.testreplace就会停止工作。
因此,我必须在预编译期间每次replacecom.mycompany.myapp值。 而且由于所有这些文件都应该在vcs中,并且不应该每当一个人切换configuration并且它们合并时都发生冲突,所以我必须将布局文件移动到特定的configuration文件夹中,它们看起来像:

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

现在这些文件存储在vcs中,@ CONFIG.PACKAGENAME @在预编译过程中被replace,然后将文件从./config/file.xml复制到./res/layout/file.xml。

这是非常不方便的,并不能很好地扩展(我不能想象在构build脚本中提到每个像50个文件)。

所以我的问题是:是否有一种方法来自动使用名称空间声明中的当前包名称? 或者至less是修改布局文件(或生成文件?),以便我不必每次更改包名称时都要replacecom.mycompany.myapp。

原来那里有一个后缀:res-auto。

所以你所要做的就是写

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

这将自动使用当前包名称。