Android Studio 一行命令實現打包併發布到fir.im

fir.im簡介

測試人員打開一個短鏈,便可直接下載內測程序,
免費 App 託管平臺 
fir.im 要幫開發者簡化內測過程
複製代碼

如今工做流程

#一行命令就完成了原先開發須要作的工做
sh bu.sh  "這個版本改了啥"
複製代碼

原先工做流程

1.開發同窗:手動打包或者執行./gradlew clean assembleRelease
2.開發同窗:進入fir.im上傳測試apk(支持網頁,api接口等方式上傳)
3.測試同窗:找到對應的文件下載測試
複製代碼

實現過程

編譯腳本

1.前置準備 app的build.gradle中

```
buildTypes {
    release {
        .....
        applicationVariants.all { variant ->
            variant.outputs.all {
             //outputFileName 是打包生成的apk文件名,
             //這裏versionName和versionCode用_分割,後續方便腳本使用
                outputFileName = "${variant.productFlavors[0].name}_${defaultConfig.versionName}_${defaultConfig.versionCode}_release.apk"
            }
        }
    }
}
```
複製代碼

2.在工程目錄下新建buid和上傳腳本

#bu.sh
 #!/usr/bin/env bash
##使用方法Terminal在工程目錄下 sh bu.sh "這個版本改了啥"
declare -a apks
declare changelog

#入參${1} changelog 必需要有
if [ $# -eq 1 ]
then
    chmod +x gradlew
    ./gradlew clean assembleRelease
    changelog=${1}
else
    echo ""
    echo "Usage: $0 release_version"
    echo ""
    echo ""
    exit 1
fi

#查找當前目錄下的全部apk文件,並加入到apks數組中
#${1} 當前目錄
function findApk(){
    for i in `ls ${1}`
    do
        if [ -d "${1}/${i}" ]
        then
            echo "${i}是目錄"
            # 若是是目錄 ,則繼續遍歷
            findApk ${1}/${i}
        elif [[ ${i} =~ ".apk" ]]
        then
            apks=(${apks[@]} "${1}/${i}")
            echo "${i}是apk文件"
        fi
    done
}
#上傳apk文件到fir.im
#${1} apk文件路徑
function uploadApk2Fir(){
    apkPath=${1}
    #這裏要注意的是編譯生成的文件名中versionName和versionCode要用_分割
    array=(${apkPath//_/ })
    size=${#array[@]}
    versionName=${array[$size-3]}
    versionCode=${array[$size-2]}
    #upload.sh 在另一個shell文件中單獨編寫
    sh upload.sh ${apkPath} ${versionName} ${versionCode}  ${changelog}
}

#dir=app/build/outputs/apk build後生成apk的文件目錄
findApk app/build/outputs/apk
if [ ${#apks[@]} -ne 1 ]
    then
        #這裏注意的是,咱們但願一次打包只出現一個測試包,要否則選哪一個
        echo "有多個apk文件,不知道上傳哪一個"
    else
        echo "準備上傳:"${apks[0]}
        uploadApk2Fir  ${apks[0]}
fi
 
複製代碼

上傳腳本

#!/usr/bin/env bash
#sh upload.sh app/build/outputs/apk/ngmm_atestServer/release/ngmm_atestServer_4.4.1_35_release.apk 4.4.45 38 test2
#${1} 文件路徑
#${2} versionName
#${3} versionCode
#${4} changelog

#1.獲取 upload key 和token url
#這裏用到了 jq 使用參考:https://blog.csdn.net/offbye/article/details/38379195
resultFile=fir_get_upload_token_result.json
value=`
curl -X "POST" "http://api.fir.im/apps" \
     -H "Content-Type: application/json" \
     -d "{\"type\":\"android\", \"bundle_id\":\"your packagename\", \"api_token\":\"fir api token\"}"  > ${resultFile} `
upload_key=` jq .cert.binary.key ${resultFile} | sed 's/\"//g' `
upload_token=` jq .cert.binary.token ${resultFile} | sed 's/\"//g'`
upload_url=` jq .cert.binary.upload_url ${resultFile} | sed 's/\"//g' `
rm -rf ${resultFile}

curl   -F "key=${upload_key}"             \
       -F "token=${upload_token}"           \
       -F "file=@${1}"            \
       -F "x:name=appname"             \
       -F "x:version=${2}"         \
       -F "x:build=${3}"               \
       -F "x:changelog=${4}"       \
       ${upload_url}
複製代碼

ps:android

1.api token , 須要到fir.im上獲取shell

https://fir.im/docs/description
複製代碼

2.這裏用到了 jq 使用參考:json

https://blog.csdn.net/offbye/article/details/38379195
複製代碼
相關文章
相關標籤/搜索