【Shell脚本】服务端自动集成三方AAR生成APK小记

248 阅读1分钟

背景: 项目中的一个模块集成了三方的一个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 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"

命令输入 . rebuild.sh -p projectName -b branchName

local.properties 文件是本地SDK配置路径,在服务器上应该用不到