我有一个具有多个构建目标(使用ant)的android项目。出于测试目的,这些构建目标均具有不同的程序包名称(因此,对于发布版本,我的程序包名称是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中,并且每次有人切换配置并将它们合并时都不应冲突,因此我不得不将布局文件移动到特定的config文件夹中,它们看起来像:
<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个文件中的每个文件)。
所以我的问题是:有没有一种方法可以在 namespace 声明中自动使用当前包名称?或者至少是modife布局文件(或构建文件?),这样我每次更改程序包名称时都不必替换com.mycompany.myapp。
最佳答案
原来有一个后缀:res-auto。
所以你要做的就是写
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto" />
这将自动使用当前程序包名称。
关于android - XML命名空间声明: auto-substitute package name,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10448006/