如果你还在 手动
clean
->build
->上传apk到OSS
->执行app更新操作...
*本文 不含三方加固 等操作!!!
已经厌倦了每次手动发布版本, 请接着往下看!
Git
拉取最新代码Gradle
编译打包安卓项目Apk
上传至OSS服务器Sql
更新app (app版本号等信息存库, 不是读取xml文件)Shell
脚本mysql
并正常运行)ACCESS_KEY_ID
和 ACCESS_KEY_SECRET
)yum install git
git --version
oa-app
) 然后cd进入 oa-app
文件夹mkdir oa-app
git
账号密码全局保存一下, 防止每次都需要输入 (懒得配置的直接看步骤2)//全局保存
git config --global credential.helper store
//清除重置
git config --system --unset credential.helper
git
项目到服务器git clone https://gitee.com/xxxxx.git //填写自己的git项目地址
git remote rm origin
git remote add origin [email protected]:xxxxx.git
git remote -v
//如果本地新建了一个分支 branch_name,但是在远程没有
git branch --set-upstream-to=origin/master master
//如果远程新建了一个分支,本地没有该分支
git checkout --track origin/branch_name
git pull
等命令可能会提示无权限, 需要在 git项目管理页面
生成 sshkey
ssh-keygen -t rsa -C "xxxxxx.com"
/root/.ssh/id_rsa.pub
文件内容拷贝到 git ssh公钥处
保存下载并安装 linux版的sdkmanager
管理工具 https://developer.android.google.cn/studio 最下面有个 Command line tools only
点此下载后上传到服务器 或者
或者 回到 oa-app
项目文件夹下:
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip
命令 先下载 yum install -y unzip zip
unzip sdk-tools-linux-4333796.zip //解压后是tools文件夹
tools
目录结构:
bin/sdkmanager
来下载 sdk
, 所以我们先配置一下环境变量vim /etc/profile
在最后添加
#android
export ANDROID_HOME=/root/oa-app
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH
wq
保存退出并刷新生效一下
source /etc/profile
build-tools
版本和 sdk
版本下载对应的版本, 比如我这里使用的是 api 25
//查看打印出版本号确认是否配置成功
sdkmanager --version
//下载build-tools
sdkmanager "build-tools;27.0.3"
//下载platform
sdkmanager "platform-tools" "platforms;android-25"
中间会提示Accept? (y/N): y 回车
oa-app
文件夹下, 查看已安装的和可用的 sdk
列表sdkmanager --list
Gradle
到 oa-app
项目文件夹下, 根据自己项目 gradle-wapper
下的distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
下载相应的gradle
版本//下载 我这里是 4.10.1
wget https://downloads.gradle.org/distributions/gradle-4.10.1-all.zip
//解压
unzip gradle-4.10.1-all.zip
gradle
环境变量vim /etc/profile
//文件最后继续添加
#gradle
export GRADLE_HOME=/root/oa-app/gradle-4.10.1
export PATH=${GRADLE_HOME}/bin:$PATH
//保存退出并刷新
source /etc/profile
//查看配置是否成功
gradle -v
app
项目中 local.properties
配置刚才服务器上的 sdk
路径项目
所在目录//先clean
gradle clean
//再build
gradle assembleRelease
第一次会下载依赖什么的, 比较慢耐心等待…
最后提示 BUILD SUCCESSFUL
打包成功, 默认 apk
在 /app/build/outputs/
下
/root/oa-app/
下的目录结构: ( OA
为as项目 ,刚才下载的一些工具已经删掉了)ossutil
工具wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/50452/cn_zh/1524643963683/ossutil64
ossutil64
赋予可执行权限chmod +x ossutil64
./ossutil64 help ls -L ch
ACCESS_KEY_ID
和 ACCESS_KEY_SECRET
./ossutil64 config -e oss.aliyuncs.com -i ak -k sk
bucket
列表./ossutil64 ls
//根据自己路径创建, 我保存在office-auto/app/apk/文件夹下
oss://office-auto/app/apk
ak
和 sk
endPoint
等参数vim /root/.ossutilconfig
查看OSS可用地域endPoint
apk
是否可以上传成功, 上传后也可以到OSS后台管理查看find /root/oa-app/OA/app/build/outputs -name '*.apk' -exec ./ossutil64 cp -f '{}' oss://office-auto/app/apk/ \;
apk
文件名variant.outputs.all { output ->
outputFileName = "${variant.name.replace("Release", "")}${defaultConfig.versionName}.apk"
}
由于我是多渠道打包并在 build.gradle
中修改了输出的 目录名字
和 apk文件名
这里就不再修改了, 直接执行上传
shell
脚本解析 output.json
文件获取 versionCode
和 versionName
,当然还有 apk
大小//方法1: 获取指定文件大小 人性化格式
du -sh /root/oa-app/OA/app/build/outputs/apk/app-release.apk | awk '{print $1}'
>> 13M
//方法2: 查询获取文件大小 字节
find oa-app/OA/app/build/outputs -name '*.apk' -exec stat -c '%s' '{}' \;
>> 12816027
//通过awk命令截取versionCode
cat /root/oa-app/OA/app/build/outputs/apk/output.json | awk -F "[:]" '/:/{print $7}' | awk -F "[,]" '/,/{print $1}'
>> 192
//通过awk命令截取versionName
cat /root/oa-app/OA/app/build/outputs/apk/ggxq/release/output.json | awk -F "[:]" '/:/{print $8}' | awk -F "[,]" '/,/{print $1}' | awk -F "[\"]" '/\"/{print $2}'
>> 1.9.2
insert_sql
语句根据自己的
app更新表
来写sql语句
参数
update_content
更新内容可以使用read
命令输入
# 数据库
hostname="xx.xx.xx.xx"
port="xx"
username="xx"
password="xxxx"
dbname="xx"
tablename="t_xxxx"
# id 我这里是时间戳拼接的32位字符串
current_id=`date +%Y%m%d%H%M%SAAAAAAAAAAAAAAAAAA`
# create_time
create_time=`date +"%Y-%m-%d %H:%M:%S"`
# 拼接sql (根据自己的表结构写)
insert_sql="insert into ${tablename} values('${current_id}',${version_code},'${version_name}','${apk_size}','${update_content}',1,0,'${create_time}','',NULL,NULL,NULL)"
# ECS上的mysql
mysql -h${hostname} -P${port} -u${username} -p${password} ${dbname} -e "${insert_sql}"
# ECS服务器连接RDS数据库: mysql -h RDS的内网地址 -u RDS用户名 -p密码 要进入的数据库 -e "要执行的sql语句"
#mysql -h${hostname} -u${username} -p${password} ${dbname} -e "${insert_sql}"
RDS配置注意:
RDS
内网地址ECS
实例查看 ECS
的vpc
路由器,确保两者用的是同一个路由器RDS
添加白名单分组,把你的 ECS
服务器的 ip
加入到白名单中Shell
脚本在
/root
目录下新建updateApp.sh
文件并编写shell
脚本
//新建文件
touch updateApp.sh
//编辑
vim updateApp.sh (下面有下载地址)
//赋予可执行权限
chmod +x updateApp.sh
./updateApp.sh
附件: