我有一个具有多个构建目标的 android 项目(使用 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/@CONFIG.PACKAGENAME@" />
现在这些文件存储在 vcs 中,并在预构建期间替换 @CONFIG.PACKAGENAME@,然后将文件从 ./config/file.xml 复制到 ./res/layout/file.xml。
这非常不方便,并且不能很好地扩展(我无法想象在构建脚本中提到 50 个文件中的每一个)。
所以我的问题是:有没有办法在命名空间声明中自动使用当前包名?或者至少修改布局文件(或构建文件?),这样我每次更改包名称时都不必替换 com.mycompany.myapp 。