背景: 项目中的一个模块集成了三方的一个aar包,彼此都是黑盒,
每次三方验证都需要本地手动集成编译,再提供版本给三方;
效率低.碰上对方反复修改,不胜其扰.
方案
1.单独在服务器上建一个git仓库, 新建各分支对应模块分支;
2.仓库监听aar变化, 如果有提交, 启动编译脚本 (带上项目名称+分支名称)
3.编译输出在仓库当前路径,并主动merge,三方直接pull即可拿到最新的成果物
主要脚本如下
#!/bin/bash
//This is rebuild apk script for aar update.
#项目
ProjectName=""
#分支
BranchName=""
echo 'Step1 get projectName && branchName '
while getopts ":p:b:" OPT
do
case $OPT in
p)
ProjectName="$OPTARG"
echo $OPTIND
echo '项目名称:'${ProjectName}
;;
b)
BranchName="$OPTARG"
echo '分支名称:'${BranchName}
;;
?)
echo "error"
exit 1
;;
esac
done
echo '项目名称:' $ProjectName
echo '分支名称:' $BranchName
echo ' Start Complie ... '
echo ' Step2 clone Radio code ... '
git clone -b ${BranchName} "ssh://xxx@ip:port/path/android-prj/vendor/packages/apps/${ProjectName}"
cp local.properties ./${ProjectName}/
echo ' Step3 get the name of origin aar ... '
originName=""
cd ./${ProjectName}/app/libs/
for originFile in $(ls)
do
if [ "${originFile##*.}" = "aar" ]; then
originName=$originFile
fi
done
echo "origin aar file name = ${ProjectName}/app/libs/$originName"
echo "Step4 update new AAR "
cd ../../../
Current_Path='pwd'
$Current_Path
for uploadFile in $(ls)
do
if [ "${uploadFile##*.}" = "aar" ]; then
mv ${uploadFile} "${ProjectName}/app/libs/${originName}"
fi
done
echo "Step5 start build new APK"
//gradle 编译apk需要 用到 本地sdk 路径 需要本地预先配置, 或者使用 mk编译
cp local.properties ${ProjectName}/
cd ${ProjectName}
#重新编译 debug & release
gradle clean
gradle assembleRelease
#拷贝apk到指定目录
echo "step6 copy APK"
pwd
#cd "../$ProjectName/app/build/outputs/apk/release"
cd "../$ProjectName/app/build/outputs"
#for apkFile in $(ls)
#do
// if [ "${apkFile##*.}" = "apk" ]; then
// echo "===$apkFile==="
// mv ${apkFile} "../../../../../../xxxx.apk"
// fi
//done
cp -r apk ../../../../
cd ../../../../
rm -rf ${ProjectName}
echo " Over"
local.properties 文件是本地SDK配置路径,在服务器上应该用不到
网友评论