本文共 1815 字,大约阅读时间需要 6 分钟。
ant 中的 replaceregexp 正则表达式替换,可以在我们对项目构建的时候,替换处理各种格式的文件内容。
有如下 AndroidManifest.xml 文件:
现在有需求:
1) 需要替换 application 中的 android:name 属性的内容为 com.shanhy.example.packers.ShellApplication
2) 并且在 application 节点后面添加一段代码 <meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.shanhy.example.packers.MyApplication" /> 其中属性 value 的值为 application 的 android:name 属性替换之前的值。
实现脚本如下:
<!--处理AndroidManifest.xml文件-->
<target name="modify-manifest" depends="clean-resource,copy-resource"> <loadfile property="manifest.content" srcFile="${basedir}/AndroidManifest.xml" failοnerrοr="true"/> <!-- 提取实际运行程序的applicationName --> <propertyregex property="manifest.application.name" input="${manifest.content}" regexp="<application([^..]*)android:name="(\S*)"([^..]*)>" select="\2" casesensitive="true" /> <echo>${manifest.application.name} >>>> ${shellApplication}</echo> <!-- 修改application节点的android:name属性--> <replaceregexp flags="g" byline="false"> <regexp pattern="<application([^..]*)android:name="(\S*)"([^..]*)>" /> <substitution expression="<application\1android:name="${shellApplication}"\3>" /> <fileset dir="${basedir}" includes="AndroidManifest.xml" /> </replaceregexp> <!-- 在application节点下增加meta-data标签 --> <replaceregexp flags="g" byline="false"> <regexp pattern="<application([^>]*)>" /> <substitution expression="<application\1> 		<meta-data android:name="APPLICATION_CLASS_NAME" android:value="${manifest.application.name}" /> " /> <fileset dir="${basedir}" includes="AndroidManifest.xml" /> </replaceregexp> </target>-----------------------------
(完)
转载地址:http://reial.baihongyu.com/