android 修改上传数据格式文件,Android 打包VersionCode自增、APK文件名修改、上传蒲公英...

Android 打包VersionCode自增、APK文件名修改、上传蒲公英

一、VersionCode自增

实现思路:

在properties文件中记录VersionCode,每次打包时读取并自增写入

1. 新建properties文件

比如:auto_add_version_code.properties,存放在gradle.properties同级目录

#就写一个version_code就行

VERSION_CODE=1

2. 修改app/build.gradle文件

...

ext { // 定义当前gradle文件的全局变量

isRelease = checkRelease()

}

// 通过taskName判断当前操作是否是在打release包,只需执行一次

def checkRelease() {

def runTasks = gradle.startParameter.taskNames

for (String task : runTasks) {

// 这里认为执行“assemble”和非“debug”的任务就是执行“release”的任务

if (task.contains("assemble") && !task.contains("Debug")) {

return true

}

}

return false

}

// 自增 version code

def autoAddVersionCode() {

def propFile = file('../auto_add_version_code.properties')

def Properties props = new Properties()

props.load(new FileInputStream(propFile))

// 读取gradle.properties文件中定义的VERSION_CODE属性

def code = props['VERSION_CODE'].toInteger()

if (checkRelease()) {

code++

props['VERSION_CODE'] = code.toString()

// 将最新的versionCode写入gradle.properties文件中

props.store(propFile.newWriter(), null)

}

return code

}

android {

...

defaultConfig {

...

versionCode autoAddVersionCode()

versionName "1.0.0"

...

}

...

}

测试:

通过 android studio Build Generate Signed APK 打包,versionCode自增;

通过 ./gradlew 打包,versionCode没有自增,需要修改checkRelease方法

二、APK文件名修改

1. 修改app/build.gradle文件

android {

...

defaultConfig {

...

}

...

// 打包输出apk文件名称

android.applicationVariants.all { variant ->

// 仅修改正式包

if ("release" == variant.buildType.name) {

variant.outputs.each { output ->

output.outputFile = new File(output.outputFile.parent, "应用名称v" + defaultConfig.versionName + "_build" + defaultConfig.versionCode + "_" + buildType.name + ".apk");

}

}

}

}

三、打包后上传蒲公英

实现思路:

通过shell脚本调用蒲公英api上传

1. 新建shell脚本

比如:uploadApk.sh,存放在app/build.gradle同级目录

#!/bin/sh

#MAIN_MODULE指AndroidStudio工程目录下面主module

#打包用地址

MAIN_MODULE="."

#单独测试用地址

#MAIN_MODULE="./app"

#蒲公英API账号

PGYER_USER_KEY="登录你的蒲公英账号查看[https://www.pgyer.com/doc/api#uploadApp]"

PGYER_API_KEY="登录你的蒲公英账号查看[https://www.pgyer.com/doc/api#uploadApp]"

#APK路径

APK_PATH="${MAIN_MODULE}/build/outputs/apk"

echo "=============================================="

#echo "current path: `pwd`"

#echo "APK_PATH=${APK_PATH}"

APK_LIST=`ls -t ${APK_PATH}`

#echo "${APK_LIST}"

#查找 最新的apk包

for APK_FILE in ${APK_LIST}; do

APK_NAME=${APK_FILE}

#echo "$APK_FILE"

break;

done

if [ -n "$APK_NAME" ]; then # 判断是否为空

echo "上传 $APK_FILE 到蒲公英"

#上传至蒲公英 updateDescription(版本描述)

RESULT=$(curl -F "file=@${APK_PATH}/${APK_NAME}" -F "uKey=${PGYER_USER_KEY}" -F "_api_key=${PGYER_API_KEY}" http://www.pgyer.com/apiv1/app/upload)

echo "蒲公英返回 $RESULT"

# 发邮件

echo "${RESULT}" | mail -s "${APK_NAME}已更新到蒲公英" you_mail@qq.com

fi

单独测试该脚本,可能需要变更权限

chmod +x uploadApk.sh

执行

app/uploadApk.sh

2. 修改app/build.gradle文件

...

ext { // 定义当前gradle文件的全局变量

isRelease = checkRelease()

}

// 通过taskName判断当前操作是否是在打release包,只需执行一次

def checkRelease() {

def runTasks = gradle.startParameter.taskNames

for (String task : runTasks) {

// 这里认为执行“assemble”和非“debug”的任务就是执行“release”的任务

if (task.contains("assemble") && !task.contains("Debug")) {

return true

}

}

return false

}

// 自增 version code

def autoAddVersionCode() {

def propFile = file('../auto_add_version_code.properties')

def Properties props = new Properties()

props.load(new FileInputStream(propFile))

// 读取gradle.properties文件中定义的VERSION_CODE属性

def code = props['VERSION_CODE'].toInteger()

if (checkRelease()) {

code++

props['VERSION_CODE'] = code.toString()

// 将最新的versionCode写入gradle.properties文件中

props.store(propFile.newWriter(), null)

}

return code

}

android {

...

defaultConfig {

...

versionCode autoAddVersionCode()

versionName "1.0.0"

...

}

//签名

signingConfigs {

debug {

...

}

release {

...

}

}

buildTypes {

release {

// 混淆

minifyEnabled true

// Zipalign优化

zipAlignEnabled true

// 移除无用的resource文件

shrinkResources true

// 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

// 打包输出apk文件名称

android.applicationVariants.all { variant ->

// 仅修改正式包

if ("release" == variant.buildType.name) {

variant.outputs.each { output ->

output.outputFile = new File(output.outputFile.parent, "应用名称v" + defaultConfig.versionName + "_build" + defaultConfig.versionCode + "_" + buildType.name + ".apk");

}

}

}

...

}

...

//上传到蒲公英task

task myUploadApkTask(type: Exec) {

commandLine 'sh','-c','./uploadApk.sh'

}

// 编译打包

task myBuild(){

dependsOn 'assembleRelease'

dependsOn 'myUploadApkTask'

}

测试:

使用 ./gradlew myBuild 打包

// TODO

这里将打包VersionCode自增、APK文件名修改、上传蒲公英糅合在一起,

使用 ./gradlew myBuild 打包,code不能自增,需要修改checkRelease方法

待改进

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值