Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Xml命名空间声明:自动替换包名称_Android_Xml_Android Layout_Ant - Fatal编程技术网

Android 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的值。由于所有这些

我有一个android项目,有多个构建目标(使用ant)。出于测试目的,这些构建目标都有不同的包名(因此,对于发布构建,我的包名是com.mycompany.myapp;对于测试构建,我的包名是com.mycompany.myapp.test)

除了布局文件中的自定义xml名称空间之外,这在大多数情况下都很有效。 因此:


将在包名替换为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" />