我的需求:
自動化打包前,修改版本號
思路如下:
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"