问与答 android-Xml名称空间声明:自动替换包nam

cornelius · 2020-03-06 13:57:14 · 热度: 5

我有一个具有多个构建目标(使用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个文件中的每个文件)。

所以我的问题是:有没有一种方法可以在名称空间声明中自动使用当前包名称? 或者至少是modife布局文件(或构建文件?),这样我每次更改程序包名称时都不必替换com.mycompany.myapp。

共收到 1 条回复
laurence #1 · 2020-03-06 13:57:15

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

所以你要做的就是写

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册