gradle 方便 打包 备份apk 以及mapping文件

最近在给测试打包的过程中, 总是感觉略显麻烦,
需要以下步骤:
1. 执行 ./gradlew clean assembleGoogleRelease 打包名
2. 本地备份 相应的Apk 以及相应的mapping 文件
3. 发送给测试

1 2 步骤感觉很是麻烦, 需要把打好的包 以及mapping文件手动copy 一份到自己的磁盘中, 同时还要修改相应的文件名称很是麻烦,想说能不通过一些 脚本, 把这两步合并起来

对了需要说明的是我们打出来的APK 是已经符 我们公司制定命名规范 如下:
ZUILocker_v1.8.8_10_27_19_30.apk
ZUILocker 是英语名称
v1.8.8 表示版本号
10_27_19_30 表示 10月27日19时30分打的包

要实现以上命名规范只需要在 build.gradle 中加入如下配置

buildTypes {
    release {
        debuggable false
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release

        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('release.apk')) {
                    def timeStamp = new Date().format('MM_dd_HH_mm');
                    def fileName = "ZUILocker_v${defaultConfig.versionName}"+"_" + timeStamp + ".apk";
                    output.outputFile = file("${outputFile.parent}/${fileName}")
                }
            }
        }
    }
    debug {
        debuggable true
        versionNameSuffix ".dev"
    }
}



入如上的配置 在执行./gradlew assembleGoogleRelease 时就会打出相应的符合命名规范的包名


ok 接下来说 上面1,2 步骤 通过脚本合并的问题 我写的脚本文件如下

#!/bin/sh
echo "hello shell"

appName="ZUILocker"

./gradlew clean assembleGoogleRelease

# 获取当前达到的包 ,应为安装命名规范来, 所以最新的达到的包是在最后面
for file in `ls -d app/build/outputs/apk/${appName}*`;
do
echo $file
done

# 获取Apk 的名字 这里是ZUILocker
echo ${file}
apkName=${file%%_*}
apkName=${apkName##*/}
echo "apkName = "${apkName}

# 更名名称解析处版本号
version=${file#*_}
version=${version%%_*}
echo "version = "${version}

# 获取mapping对应的文件名
cpMappingName=${file##*/}
cpMappingName=${cpMappingName%.*}
echo "cpMappingName = "${cpMappingName}

# 这里写死了 mapping文件的路径
mapping="app/build/outputs/mapping/google/release/mapping.txt"
echo "mapping = "${mapping}

# 备份apk mapping文件的地址
cpDir="/Users/${USER}/Documents/ZuiPackage/"${apkName}"/"${version}

# 创建备份地址
if [ -d ${cpDir} ]
then
echo have dir
else
  mkdir -p ${cpDir}
fi

# 复制 apk 以及mapping文件
echo "cpDir = "${cpDir}
cp ${file} ${cpDir}
cp ${mapping} ${cpDir}"/"${cpMappingName}"_"mapping.txt

# 打开finder 方便把apk 发给测试
cd app/build/outputs/apk/
open .

使用以上脚本确实方便了很多在这里分享给大家.
shell 不是很熟悉 所以以上脚本有些地方还有待改善

你可能感兴趣的:(android,gradle)