Android Xml命名空间声明:自动替换包名称
我有一个android项目,有多个构建目标(使用ant)。出于测试目的,这些构建目标都有不同的包名(因此,对于发布构建,我的包名是com.mycompany.myapp;对于测试构建,我的包名是com.mycompany.myapp.test) 除了布局文件中的自定义xml名称空间之外,这在大多数情况下都很有效。 因此:Android Xml命名空间声明:自动替换包名称,android,xml,android-layout,ant,Android,Xml,Android Layout,Ant,我有一个android项目,有多个构建目标(使用ant)。出于测试目的,这些构建目标都有不同的包名(因此,对于发布构建,我的包名是com.mycompany.myapp;对于测试构建,我的包名是com.mycompany.myapp.test) 除了布局文件中的自定义xml名称空间之外,这在大多数情况下都很有效。 因此: 将在包名替换为com.mycompany.myapp.test后立即停止工作。 因此,每次在预构建期间,我都必须替换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。结果是有一个后缀:res auto 所以你需要做的就是写
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto" />
这将自动使用当前包名。参考:(ADT 17.0.0节)。“添加了对库中具有自定义属性的自定义视图的支持。使用自定义属性的布局必须使用命名空间URI,而不是包含应用程序包名的URI。此URI在生成时将替换为特定于应用程序的URI。”即使我的项目使用了一个保存自定义视图的库,它还能工作吗?安卓Studio和Gradle包含在Alexey的“what not”中。有效。确认它与IntelliJ也有效。为什么Android文档在教程中没有明确说明它是什么,这是一个谜——这就是我在这里学到的东西。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto" />