如何为AndroidManifest.xml的application标签添加指定配置属性?
用XMLStarlet给AndroidManifest.xml的application标签添加属性
需求说明
现有AndroidManifest.xml内容如下:
<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="xxxxxxxx" android:versionName="xxxxx" package="xxxxxx" xmlns:android="xxxxxxxxxxxxxx"> <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"> </application> <uses-feature android:name="android.hardware.camera.front" android:required="false" /> </manifest>
需要给<application>标签添加以下两个属性:
android:networkSecurityConfig="@xml/network_security_config" android:requestLegacyExternalStorage="true"
最终要得到的文件格式:
<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="xxxxxxxx" android:versionName="xxxxx" package="xxxxxx" xmlns:android="xxxxxxxxxxxxxx"> <application android:networkSecurityConfig="@xml/network_security_config" android:requestLegacyExternalStorage="true" android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"> </application> <uses-feature android:name="android.hardware.camera.front" android:required="false" /> </manifest>
之前用sed命令尝试失败,原因在于sed是基于文本匹配的工具,XML标签的属性顺序、换行、缩进等结构化特征都会导致匹配逻辑失效,而且XML作为结构化文档,用纯文本工具处理容易破坏格式或出现匹配错误。
XMLStarlet实现步骤
1. 安装XMLStarlet
- Debian/Ubuntu系:
sudo apt install xmlstarlet - macOS:
brew install xmlstarlet - Windows:下载官方压缩包解压后配置环境变量即可
2. 执行修改命令
直接修改原文件(原地编辑):
xmlstarlet ed -P -S -L \ --insert '/manifest/application' --type attr -n android:networkSecurityConfig -v "@xml/network_security_config" \ --insert '/manifest/application' --type attr -n android:requestLegacyExternalStorage -v "true" \ AndroidManifest.xml
如果不想修改原文件,可将结果输出到新文件:
xmlstarlet ed -P -S \ --insert '/manifest/application' --type attr -n android:networkSecurityConfig -v "@xml/network_security_config" \ --insert '/manifest/application' --type attr -n android:requestLegacyExternalStorage -v "true" \ AndroidManifest.xml > new_AndroidManifest.xml
命令参数解释
ed:进入XML编辑模式-P:保留原XML的格式(缩进、换行)-S:保留原文件的空格布局-L:直接修改原文件(不加此参数则输出到标准输出)--insert:指定要插入属性的节点路径(/manifest/application对应根节点下的application标签)--type attr:指定插入的是属性类型-n:设置属性名称-v:设置属性值
执行后查看文件,即可看到两个属性已成功添加到<application>标签中,符合预期格式。
内容的提问来源于stack exchange,提问作者Hellboy
相关产品推荐
相关产品推荐

