android软件包名称的ant正则表达式

android软件包名称的ant正则表达式,android,regex,ant,build-process,Android,Regex,Ant,Build Process,在我的android项目中,我的所有.java视图文件都会根据当前包的名称导入R文件。当我在Android清单中更改包名时(动态地,而不是通过Eclipse或任何其他IDE进行重构),我需要修改所有java文件的引用,以指向生成的新R文件 我正在通过Ant制作一个构建脚本,但我不确定正则表达式约定会是什么样子 需要替换的字符串如下所示: 导入com.mysite.myapp.R 即 import com.sushiroll.california.R 这就是我在ant构建脚本中的内容 <re

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

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

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

导入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 regex我该怎么说呢?我编写的匹配和替换只是猜测

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

如果你知道包裹名称

    match="import com\.mysite\.myapp\.R;"
如果您现在确实知道包名,但如果您从不同的包导入R,请准备好因错误导入而失败

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

replace=“import${current.package}.R;”“

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


...

其中,
+?
是必需的,这样在一行中有两个导入时它就可以工作,而
g
是必需的,这样每个文件就不会只替换一个导入。虽然当前每个文件只有一个,因为您使用相同的字符串替换了所有文件,但这是一个普遍正确的regexp…

我通常会在此处查看,我强烈建议使用带有com.mysite.myapp.R的基本android库,该库将由具有com.sushiroll.california包名的应用程序使用。并且具有com.sushiroll.california包名称的应用程序将只包含一个启动活动。然后,您不需要处理所有文件来生成唯一的包名。仅此开始活动和声明此regexp不正确,因为它还将匹配
import foo.bar.whateverR
。这是因为它错过了最后一个点之前的\。还有
丢失,因此它也将与导入foo.R.bar匹配。但是。。。这与以前的错误相同(点、分号)。除了用具体的包名替换匹配的包模式外,如果原始海报需要,他甚至不需要regexp。@tabbykitten:没有
它也将匹配import foo.Rwhatever
<replaceregexp
   match="import .+?\.R;"
   replace="import ${current.package}.R;"
   flags="g"
> 
...