精华内容
下载资源
问答
  • 1. VersionCode自增;2. APK文件名修改;3. shell脚本上传蒲公英;

    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

    展开全文
  • 修改生成apk文件名

    2020-07-16 10:44:16
    //修改生成的文件名 applicationVariants.all { variant -> def time = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date()) variant.outputs.all { def fileName = "AutoTest_" + defaultConfig....
    android{
    //修改生成的文件名
    applicationVariants.all { variant ->
        def time = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
        variant.outputs.all {
            def fileName =  "AutoTest_" + defaultConfig.versionName + "_" + time + ".apk"
            outputFileName = fileName
        }
    }

    }

    展开全文
  • 使用gradle实现批量修改生成的apk文件名

    在我们一次性打几十个渠道包的时候,如果我们想让打包完成的apk文件名按照我们想要的格式来命名,比如明确的apk的版本号,打包日期,那个渠道的包等等,这时就需要使用gradle的Variants属性来动态修改生成的apk文件名

    在app(module)目录下的build.gradle文件内加入如下代码:

    def buildTime() {
        def date = new Date()
        def formattedDate = date.format('yyyy-MM-dd', TimeZone.getTimeZone("UTC"))
        return formattedDate
    }
    
    android {
        ......
        buildTypes {
            release {
                ......
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // 输出apk名称为AppName_v1.0_2015-01-15_wandoujia.apk
                            def apkFile = "AppName_v${defaultConfig.versionName}_${buildTime()}" +
                                    "_${variant.productFlavors[0].name}.apk"
                            output.outputFile = new File(outputFile.parent, apkFile)
                        }
                    }
                }
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    以wandoujia渠道为例,上面代码最终打包生成的apk文件名是AppName_v1.0_2015-01-15_wandoujia.apk
    而且该用法可以和./gradlew assemableRelease命令结合使用,两者结合使用可以自动生成各个渠道的动态apk名

    接下来分析一下,由于Android的gradle任务比较复杂,为了让gradle能更灵活的控配置管理,Android提供了applicationVariants、libraryVariants以及testVariants三种Variants,他们分别适用于app、 library、app和library

    这里是循环处理每个applicationVariant,当他们的输出文件名以apk结尾并且buildType是release时,重新设置新的输出文件名,这样就达到了我们批量修改生成的文件名的目的

    参考:
    http://www.flysnow.org/2015/03/30/manage-your-android-project-with-gradle.html

                <link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/markdown_views-d4dade9c33.css">
    


    转自:http://blog.csdn.net/lj402159806/article/details/54957133
    展开全文
  • 一、简介 平时开发都知道,我们要上线的时候需要在...下面我们就来看看Android Studio是怎样来批量修改生成的apk文件名的。 二、代码实现 1、 Gradle 3.0以下版本 在app的build.gradle文件添加如下代码: androi...

    一、简介

    平时开发都知道,我们要上线的时候需要在Android studio打包apk文件,可是默认的打包名是app-release.apk或者app-debug.apk这样的名字,太没有辨识度了。

    下面我们就来看看Android Studio是怎样来批量修改生成的apk文件名的。

    二、代码实现

    1、 Gradle 3.0以下版本

    在app的build.gradle文件添加如下代码:

    android {
    	...
    
    	//签名
        signingConfigs{
            release{
                storeFile file("xxxx.jks")
                storePassword '123456'
                keyAlias 'xxxx'
                keyPassword '123456'
            }
            debug{
                storeFile file("xxxx.jks")
                storePassword '123456'
                keyAlias 'xxxx'
                keyPassword '123456'
            }
        }
        
    	productFlavors{
            google{
            	manifestPlaceholders = [
                        SDKChannel: "google",
                        app_name : "@string/app_name"
                ]
            }
            baidu{
            	manifestPlaceholders = [
                        SDKChannel: "baidu",
                        app_name : "@string/app_name"
                ]
            }
        }
    
    	buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                //整理优化apk文件的工具,它能提高系统和应用的运行效率,更快的读写apk中的资源,降低内存的使用
                zipAlignEnabled true
            }
            debug{
                signingConfig signingConfigs.debug
            }
        }
    
    	applicationVariants.all { variant ->
            variant.outputs.each{ output ->
                if(output.outputFile != null
                       && output.outputFile.name.endsWith('.apk')){
                    def apkFile = new File(
                            output.outputFile.getParent(),
                            "SDK_${variant.flavorName}_${variant.buildType.name}_V${variant.versionName}_${buildTime()}.apk"
                    )
                    output.outputFile = apkFile
                }
            }
        }
    }
    
    def buildTime(){
        def date = new Date()
        def formattedDate = date.format('yyyyMMddHHmm')
        return formattedDate
    }
    

    2、Gradle 3.0以上版本

    android {
    	...
    
    	//签名
        signingConfigs{
            release{
                storeFile file("xxxx.jks")
                storePassword '123456'
                keyAlias 'xxxx'
                keyPassword '123456'
            }
            debug{
                storeFile file("xxxx.jks")
                storePassword '123456'
                keyAlias 'xxxx'
                keyPassword '123456'
            }
        }
        
    	productFlavors{
            google{
            	manifestPlaceholders = [
                        SDKChannel: "google",
                        app_name : "@string/app_name"
                ]
            }
            baidu{
            	manifestPlaceholders = [
                        SDKChannel: "baidu",
                        app_name : "@string/app_name"
                ]
            }
        }
    
    	buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                //整理优化apk文件的工具,它能提高系统和应用的运行效率,更快的读写apk中的资源,降低内存的使用
                zipAlignEnabled true
            }
            debug{
                signingConfig signingConfigs.debug
            }
        }
    
    	android.applicationVariants.all {variant ->
            variant.outputs.all {
                //在这里修改apk文件名,引号内的字符串都可以随便定义
                outputFileName = "SDK_${variant.flavorName}_${variant.buildType.name}_V${variant.versionName}_${buildTime()}.apk"
            }
    	}
    }
    
    def buildTime(){
        def date = new Date()
        def formattedDate = date.format('yyyyMMddHHmm')
        return formattedDate
    }
    

    说明:

    • {variant.flavorName}:渠道名称;

    • {variant.buildType.name}:release或debug包;

    • {variant.versionName}:版本名称;

    • {buildTime()}:当前时间;

    打包结果如下:
    在这里插入图片描述

    展开全文
  • 修改打包的APK文件名

    千次阅读 2019-06-19 20:47:05
    有时打包的APK需要指定名字,比如需要APK带上release或者debug,带上版本号,带上打包日期等,虽然APK打包完后可以自己修改名称,但是还是有更好的方式的。 可以直接在主module中的gradle加入如下代码: android ...
  • 在一次性打十几个渠道包的时候,如果我们想让打包完生成的apk文件名按照我们想要的格式来命名,比如明确的apk的版本号,打包日前,那个渠道的包等,这时就需要使用gradle的Variants属性来动态修改生成的apk文件名在...
  • 需求2:修改生成的apk文件名 release { minifyEnabled false signingConfig signingConfigs.release buildConfigField( "boolean", "RC", "false" ) applicationVariants.all { variant -> variant....
  • Gradle 3.1 修改apk文件名和输出路径

    千次阅读 2018-04-03 10:02:45
    项目中需要自动化打包,定制apk输出文件名和路径,需要在build.gradle文件的android中增加如下配置:android.applicationVariants.all { variant -&gt; variant.outputs.all { variant....
  • 本文主要给大家介绍了关于Android在Gradle中更改APK文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。...
  • 指定生成的APK文件名

    2019-09-07 14:00:00
    一样是在build.gradle文件中修改,默认生成的release版apk名为app-release.apk。 在android内部defaultConfig同层下添加以不内容(outputFileName改成自己想要的apk名) android.applicationVariants.all { ...
  • Android Studio编译输出apk文件修改文件名新建一个Android工程,默认编译会生成一个叫app-debug.apk或者叫app-release.apk文件通过修改build.gradle,进而修改apk文件名apply plugin: 'com.android.application' ...
  • //自定义打包生成的apk文件名,当BuildType类型是“release”和“releaseTest”类型时才改变。 applicationVariants.all { variant -> if(variant.buildType.name.equals("release")||variant.buildType.name....
  • Android Studio默认打包输出apk文件名为app-release或者app-debug,不便分类,所以需要对输出配置进行修改,使输出的apk带有版本信息和日期
  • Android Studio默认编译会生成一个叫app-debug.apk或者叫app-release.apk文件,我们...修改build.gradle向android{......}添加代码 apply plugin: 'com.android.application' android { compileSdkVersion 26 ...
  • 可以按自己需求修改 afterEvaluate { android.applicationVariants.all { variants -> if (variants.getName().endsWith("Release") || variants.getName().endsWith("release")) { ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

apk文件名修改