Android 打包VersionCode自增、APK文件名修改、上传蒲公英
2017-07-29 11:47
543 查看
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方法
待改进
参看
[]http://blog.csdn.net/kevinscsdn/article/details/53582096]
[]http://www.jianshu.com/p/447b2cbc8fb2]
[]http://www.runoob.com/linux/linux-shell.html]
END
相关文章推荐
- Android自动打包,加固/上传蒲公英/修改数据库等Python版
- android Gradle打包修改生成的apk文件名称
- Android Studio编译输出apk文件修改文件名
- Android Studio编译输出apk文件修改文件名
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- cocos2d-x-3.12 打包android apk时 怎么修改已经配置好的setup.py参数 和解决 XX不是一个有效的 Android 目标平台 错误
- Android反编译apk,修改资源,打包,签名全过程
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- 【Android】app打包成apk文件以后,如何查看VersionCode、VersionName等版本信息
- Android Gradle 多版本多APK打包,修改生成APK名称
- Android CyanogenMod修改debuggable和secure属性内核root、打包apk到system.img中
- Android Gradle 多版本多APK打包,修改生成APK名称 标签: androidgradle多版本打包 2017-04-01 15:16 1113人阅读 评论(0) 收藏 举报 分类:
- 游走Android系列之APK文件的反编译、修改和重新编译打包
- Android Studio编译输出apk文件修改文件名
- Android 为生成的apk文件名加上时间,修改java类中的代码
- 【android】APK文件解包修改重打包签名操作详解
- Android打包一个Apk后,如何查看它的VersionCode、VersionName 等等。
- android apk进行反编译,修改manifest并重新打包成apk
- Jenkins持续化构建Android项目(四)-上传apk到蒲公英(by 星空武哥)