用于android包名的ant regex

时间:2012-10-05 19:13:37

标签: android regex ant build-process

在我的android项目中,我所有的.java视图文件都根据当前包的名称导入R文件。当我在Android Manifest中更改我的包名称时(动态,不通过Eclipse或任何其他IDE重构),我需要将所有java文件的引用指向生成的新R文件

我正在通过Ant制作一个构建脚本,但我不确定正则表达式约定是什么样的

需要替换的字符串如下所示:

import com.mysite.myapp.R;

import com.sushiroll.california.R

这就是我在ant构建脚本中的内容

<replaceregexp file="src/*"
           match="import*.R"
           replace="import ${current.package}.R"
           byline="true">
        <fileset dir="src/.">
            <include name="*.java"/>
        </fileset>
</replaceregexp>

我希望匹配所有表示import并以.R

结尾的字符串

并将其替换为import $current.package}.R

我怎么称之为ant正则表达式呢?我写的匹配和替换只是猜测

2 个答案:

答案 0 :(得分:2)

您需要在.R

之前对旧的包名称字符进行分组

如果您知道包名称

    match="import com\.mysite\.myapp\.R;"

如果你现在知道包名,但是如果你从不同的包中导入R,那么准备好为错误的导入失败

    match="import (.*).R;"

替换为

replace="import ${current.package}.R;"

    <fileset dir="src">
        <include name="**/*.java"/>
    </fileset>

答案 1 :(得分:1)

<replaceregexp
   match="import .+?\.R;"
   replace="import ${current.package}.R;"
   flags="g"
> 
...

如果需要+?,那么如果您在一行中有两个导入,并且需要g,那么不仅每个文件的一个导入被替换。虽然目前每个文件只有一个,因为你用相同的字符串替换所有文件,这是普遍正确的正则表达式...