Commit 9a19475f by app.developer

修改和优化初始化代码

parents
参考:[Android 项目 自动打包+上传蒲公英+推送到钉钉群]
https://github.com/yehot/iOS-AutoPackage
## 一、打包要求
1. 自动打包;
2. 打出的 `apk` 包上传到蒲公英;
3. 上传成功后,通知到钉钉开发群;
### 依赖:
1.
2.
3. 蒲公英和钉钉提供的 `webhook`
4. `PlistBuddy` 解析 `plist` 文件(Mac 系统自带);
## 二、使用说明:
使用此脚本的的话,需要修改`android_package.sh`
1. `PGY_API_KEY` 对应 `蒲公英 API KEY`
2. `PGY_USER_KEY` 对应 `蒲公英 API KEY`
3. `DD_HOST_URL` 对应 `https://oapi.dingtalk.com/robot/send?access_token=ABCD``ABCD`
4. `DD_ICON_URL` 对应 `https://appicon.pgyer.com/image/view/app_icons/abcd/120Y``abcd/120Y`
5. `DD_DOWN_URL` 对应 `http://www.pgyer.com/abcd``abcd`
```shell
# 执行打包:
sh [path/to]/android_package.sh PRD release yes
```
参数1:PRD 对应工程的环境文件,参数2:签名类型,参数3:yes 代表使用钉钉通知,参数3:no 不使用钉钉通知
## 三、Tips:
```shell
# gradle 安装:
brew install gradle
# 配置环境变量
touch ~/.bash_profile
open ~/.bash_profile
export ANDROID_HOME=/Users/$USER/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
export PATH=${PATH}:${ANDROID_HOME}/build-tools/28.0.3
source ~/.bash_profile
```
# PRD or DEV or UAT,与环境文件对应
BUILD_ENV=$(echo $1 | tr '[a-z]' '[A-Z]')
BUILD_TYPE="$(echo ${2:0:1} | tr '[a-z]' '[A-Z]')$(echo ${2:1} | tr '[A-Z]' '[a-z]')"
# yes or no
DD_MESSAGE=$(echo $3 | tr '[A-Z]' '[a-z]')
if [ ! -n "${BUILD_ENV}" ] ;then
echo "入参 'BUILD_ENV' 有误!"
exit 1
fi
if [ ! -n "${BUILD_TYPE}" ] ;then
echo "入参 'BUILD_TYPE' 有误!"
exit 1
fi
if [ ! -n "${DD_MESSAGE}" ] ;then
echo "入参 'DD_MESSAGE' 有误!"
exit 1
fi
# 代码分支
CODE_BRANCH="master"
# 代码仓库
CODE_SOURCE="http://ex_duanzhiyong:duanzhiyong123!@139.224.95.88/project_app/jxcxapp_Android.git"
# 脚本仓库
SCRIPT_SOURCE="http://112.124.100.131/app/Android-AutoPackage.git"
# 蒲公英 API KEY #
PGY_API_KEY="48a939fb3653e8a82031cc457e909bd8"
# 蒲公英 USER KEY #
PGY_USER_KEY="fb8d425857bad5bd3b4fb40c1c84d526"
# 钉钉 机器人 webhook 链接的 access_token 参数值 #
DD_HOST_URL="a2793d02cc9f60cfa29ab69a2f227bfb0153e4010b12e891616e59d99228f0bb"
# 蒲公英 APP 图标 #
DD_ICON_URL="8e2247d2f4b2c26b0950cbab75a2f0d7/120"
# 蒲公英 APP 关键字 #
DD_DOWN_URL="GLFO"
# 不要改 #
WORKSPACE="/Users/${USER}/AutoPackage/Android/CODE"
# 不要改 #
SCRIPT_PATH="/Users/${USER}/AutoPackage/Android/SCRIPT"
rm -rf ${WORKSPACE}
rm -rf ${SCRIPT_PATH}
git clone -b ${CODE_BRANCH} ${CODE_SOURCE} ${WORKSPACE}
git clone ${SCRIPT_SOURCE} ${SCRIPT_PATH}
cp -r ${SCRIPT_PATH}/apk_script ${WORKSPACE}
# 修改环境文件
cp -r ${WORKSPACE}/app/src/main/res/values/ccbpi_env/${BUILD_ENV}.xml ${WORKSPACE}/app/src/main/res/values/ccbpi.xml
sh ${WORKSPACE}/apk_script/auto_package_apk.sh ${BUILD_ENV} ${BUILD_TYPE} ${PGY_API_KEY} ${PGY_USER_KEY} ${DD_HOST_URL} ${DD_ICON_URL} ${DD_DOWN_URL} ${DD_MESSAGE}
BUILD_ENV=$1
BUILD_TYPE=$2
PGY_API_KEY=$3
PGY_USER_KEY=$4
DD_HOST_URL=$5
DD_ICON_URL=$6
DD_DOWN_URL=$7
DD_MESSAGE=$8
COLOR_Cyan='\033[0;36m'
COLOR_Red='\033[41;37m'
COLOR_Default='\033[0;m'
function echo_log() {
echo "${COLOR_Cyan}$1${COLOR_Default}"
}
function echo_error() {
echo "${COLOR_Red}$1${COLOR_Default}"
}
# 计时
SECONDS=0
PROJECT_DIR=$(dirname $(cd "$(dirname "$0")"; pwd))
echo_log "============ config list =============="
echo_log "1 build configuration = ${BUILD_ENV} ${BUILD_TYPE}"
echo_log "2 workspace path = ${PROJECT_DIR}"
echo_log "======================================="
# 打包命令
cd ${PROJECT_DIR}
gradle clean && gradle assemble${BUILD_TYPE}
APK_PATH=($(find $(dirname $(cd "$(dirname "$0")"; pwd))/app/build -name *.apk))
APK_INFO=$(aapt d badging $APK_PATH | grep package)
APK_INFO=(${APK_INFO/ / })
VERSION=(${APK_INFO[2]/=/ })
BUILD_NUMBER=${VERSION[1]//\'/}
echo_log "===== 打包耗时:${SECONDS}s ====="
# 上传到蒲公英 (以上调试完成后,再打开以下注释)
if [ "yes" == "$DD_MESSAGE" ]; then
sh ${PROJECT_DIR}/apk_script/auto_upload_pgy.sh ${APK_PATH} ${BUILD_ENV} ${BUILD_NUMBER} ${PGY_API_KEY} ${PGY_USER_KEY} ${DD_HOST_URL} ${DD_ICON_URL} ${DD_DOWN_URL}
else
sh ${PROJECT_DIR}/apk_script/auto_upload_pgy.sh ${APK_PATH} ${BUILD_ENV} ${BUILD_NUMBER} ${PGY_API_KEY} ${PGY_USER_KEY}
fi
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import urllib2
import json
import sys
def get_app_version():
return sys.argv[1]
pass
def get_app_name():
return sys.argv[2]
pass
def get_app_env():
return sys.argv[3]
pass
def get_dd_icon():
return sys.argv[4]
pass
def get_dd_url():
return sys.argv[5]
pass
def get_dd_host():
return sys.argv[6]
pass
def get_pgy_pwd():
return sys.argv[7]
pass
def get_request_params_str():
app_env = get_app_env()
app_pwd = get_pgy_pwd()
message = app_env + " 已更新" + " 密码:" + app_pwd
print message
app_version = get_app_version()
app_name = get_app_name()
title = "Android " + app_name + " " + app_env + " " + app_version
dd_icon = "https://appicon.pgyer.com/image/view/app_icons/" + get_dd_icon()
dd_url = "https://www.pgyer.com/" + get_dd_url()
params = {
"msgtype": "link",
"link": {
"title": title,
"text": message,
"picUrl": dd_icon,
"messageUrl": dd_url
}
}
return json.dumps(params) #python obj to json(str)
pass
def send_ding_talk_request():
# NOTE: host_url 来自钉钉群的设置
#host_url = "https://oapi.dingtalk.com/robot/send?access_token=fdbcec56ec4e6066a6ebb76b5c5cb0ba017d3db67adb7d04cdda9d25beea2d56"
host_url = "https://oapi.dingtalk.com/robot/send?access_token=" + get_dd_host()
req = urllib2.Request(host_url)
req.add_header('Content-Type', 'application/json')
params_str = get_request_params_str()
# print params_str
response = urllib2.urlopen(req, params_str)
# print response.read()
pass
send_ding_talk_request()
#!/bin/bash
# 上传 ipa 到蒲公英
# echo util
readonly COLOR_Cyan='\033[0;36m'
readonly COLOR_Red='\033[41;37m'
readonly COLOR_Default='\033[0;m'
function echo_log() {
echo "${COLOR_Cyan}$1${COLOR_Default}"
}
function echo_error() {
echo "${COLOR_Red}$1${COLOR_Default}"
}
echo_log "===== 打包完成,开始上传到蒲公英 ====="
NOW=$(date +"%Y_%m_%d_%H_%M_%S")
EBIZ_APK_PATH=$1
EBIZ_ENV=$2
EBIZ_APP_Build_Version=$3
PGY_API_KEY=$4
PGY_USER_KEY=$5
DD_HOST_URL=$6
DD_ICON_URL=$7
DD_DOWN_URL=$8
CURRENT_DIR=$(cd "$(dirname "$0")"; pwd)
PROJECT_PATH=$(dirname $(cd "$(dirname "$0")"; pwd))
if [ ! -n "${NOW}" ] ;then
echo_error "auto-upload 入参 'now' 有误!"
exit 1
else
echo "构建时间: ${NOW}"
fi
if [ ! -n "${EBIZ_APK_PATH}" ] ;then
echo_error "auto-upload 入参 'ipa_path' 有误!"
exit 1
else
if [ ! -f "${EBIZ_APK_PATH}" ]; then
echo_error "${EBIZ_APK_PATH} 文件不存在"
exit 1
fi
echo_log "apk 文件 path 为 ${EBIZ_APK_PATH}"
fi
readonly PGY_UPLOAD_SERVER="https://qiniu-storage.pgyer.com/apiv1/app/upload"
# 接收键盘输入
readonly PGY_password="$(($RANDOM%9999+1111))"
readonly PGY_upload_log="${EBIZ_ENV}_${NOW}"
# 上传到蒲公英,并接收 Response
PGY_RESPONSE=`curl -F "file=@/${EBIZ_APK_PATH}" -F "uKey=${PGY_USER_KEY}" -F "_api_key=${PGY_API_KEY}" -F installType=2 -F password="${PGY_password}" -F "updateDescription=${PGY_upload_log}" ${PGY_UPLOAD_SERVER}`
if [ "$?" -ne "0" ]; then
echo_error "upload error"
exit 1
fi
# 推送到钉钉机器人时显示打包的版本号
APK_INFO=$(aapt d badging $EBIZ_APK_PATH | grep package)
APK_INFO=(${APK_INFO/ / })
VERSION=(${APK_INFO[3]/=/ })
VERSION=${VERSION[1]//\'/}
APK_INFO=$(aapt d badging $EBIZ_APK_PATH | grep application-label:)
APK_INFO=(${APK_INFO/:/ })
EBIZ_APP_Name=${APK_INFO[1]//\'/}
EBIZ_Version="${VERSION}(${EBIZ_APP_Build_Version})"
echo_log ${EBIZ_APP_Name}
echo_log ${EBIZ_Version}
echo_log ${PGY_password}
# (以上调试完成后,再打开以下注释)
if [ $# -eq 8 ]; then
python ${CURRENT_DIR}/auto_push_ding_talk.py ${EBIZ_Version} ${EBIZ_APP_Name} ${EBIZ_ENV} ${DD_ICON_URL} ${DD_DOWN_URL} ${DD_HOST_URL} ${PGY_password}
fi
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment