[Shell]通过shell修改build.gradle配置文件
我的需求:
自动化打包前,修改版本号
思路如下:
1.获取要修改字符串在build.gradle配置文件的所在行
2.整行删除旧字符串
3.新将新字符串写入配置文件
技术点:
- sed读写配置文件
- 获取指定字符串所在行
- 将字符串写入配置文件指定位置(指定行)
- 拼接字符串,字符串包含特殊符号,双隐号,单隐号,转义符号的使用
build.gradle配置文件内容如下:
defaultConfig {
applicationId "com.wawj.app.t"
// applicationId "com.wawj.app.tt"
minSdkVersion 16
targetSdkVersion 26
versionCode 20191226
versionName "8.8.8" #要修改的字符串
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunn$
multiDexEnabled true
// resConfigs "en", "de", "fr", "it"git
// resConfigs "nodpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"
ndk {
//极光推送--选择要添加的对应cpu类型的.so库
abiFilters 'xx', 'xx-xxxa', 'xxx'
}
脚本如下:
cd AppFrameWork/app/ #build.gradle配置文件所在目录
VERSION=" versionName \"$Version\"" #拼接修改后的字符串
#获取行数,并保存到变量
line=$(sed -n '/versionName/=' build.gradle) #获取要修改的字符串所在行,并将它保存到变量line
echo "版本号所在行$line"
#插入内容的位置
newline=$(expr $line - 1)#计算要插入行的的行号,因后面使用 追加(注意不是插入)的方式将要修改的字符串 追加所在行,所以里这里要将line-1,写入字符串的位置才是准确的
#删除指定行
sed -i "$line d" build.gradle
#在指定行追加要字符串,并保存修改( -i表示保存修改)
sed -i "$newline a\\$VERSION" build.gradle
echo "修改的版本号是$VERSION"