4

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

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

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

import com.mysite.myapp.R;

IE。

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

对于蚂蚁正则表达式,我该怎么说?我写的匹配和替换只是猜测

4

2 回答 2

2

您需要在 .R 之前对旧包名称字符进行分组

如果你知道包名

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

如果您现在知道包名称,但如果您从不同的包导入 R,请准备好因错误导入而失败

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

替换为

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

    <fileset dir="src">
        <include name="**/*.java"/>
    </fileset>
于 2012-10-05T19:26:13.907 回答
1
<replaceregexp
   match="import .+?\.R;"
   replace="import ${current.package}.R;"
   flags="g"
> 
...

如果您在一行中有两个导入,则需要where+?以便它可以工作,并且g需要,因此不仅每个文件的一个导入被替换。尽管目前每个文件只有一个,因为您将所有文件都替换为相同的字符串,但这是普遍正确的正则表达式...

于 2012-10-05T19:28:46.180 回答