AndroidStudio中修改打包生成的apk名称

本文详细介绍如何在Android项目的build.gradle文件中配置自定义APK文件名,包括版本号和打包时间戳,确保生成的APK文件名既规范又包含关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言 : 之前总结了 Android同一套代码打多个APP包并能够在同一个手机上安装运行的代码 (点击可跳页查看) , 打包以后生成的名字想要更完善 , 想在打包时自动生成带版本号的apk名称 .

需求 :

  • 打包出的名字例如 :
    • appname_v1.0.0_debug.apk
    • appname_v1.0.0_release.apk

实现 :

  • 在app文件夹下的build.gradle里加 :
// 加在 android { ...... } 里
android.applicationVariants.all {
    variant ->
        variant.outputs.all {
            //这里修改apk文件名
            outputFileName = "${productFlavors[0].name}_v${defaultConfig.versionName}_${buildType.name}.apk"
        }
}
  • 如果要加时间
    • 例如 : app1_v1.0.0_debug_181018.apk (打包时间为2018年10月18号)
android.applicationVariants.all {
    variant ->
        variant.outputs.all {
            //这里修改apk文件名
            outputFileName = "${productFlavors[0].name}_v${defaultConfig.versionName}_${buildType.name}_${releaseTime()}.apk"
        }
}
def releaseTime() {
    return new Date().format("yyMMdd", TimeZone.getTimeZone("UTC"))
}
  • 完整build.gradle代码 :
apply plugin: 'com.android.application'

android {

    compileSdkVersion 27

    defaultConfig {
        applicationId "com.example.app2"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0.0"
        //版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
        flavorDimensions "versionCode"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        // app1
        app1 {
            // 设置applicationId(这里很重要,两个相同applicationId的apk不同同时安装在同一台Android手机中)
            applicationId "com.example.app2"
            // 自动生成@string/app_name为demo
            resValue "string", "app_name", "app111"
            // 定义app_icon字段,在AndroidManifest.xml文件中用到
            manifestPlaceholders = [app_icon: "@mipmap/ic_launcher"]
        }
        // app2
        app2 {
            // 解释同app1
            applicationId "com.example.app3"
            resValue "string", "app_name", "app222"
            manifestPlaceholders = [app_icon: "@mipmap/ic_launcher1"]
        }
    }

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }

    android.applicationVariants.all {
        variant ->
            variant.outputs.all {
                //这里修改apk文件名
                outputFileName = "${productFlavors[0].name}_v${defaultConfig.versionName}_${buildType.name}_${releaseTime()}.apk"
            }
    }
}

static def releaseTime() {
    return new Date().format("yyMMdd", TimeZone.getTimeZone("UTC"))
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

完整可运行的demo下载:

https://download.youkuaiyun.com/download/qq_28261207/12682798

### 修改 APK 输出文件名 为了在 Android Studio 中使用 Kotlin 脚本 (KTS) 来修改生成APK 文件名,可以在 `build.gradle.kts` 文件中定义自定义逻辑。通过编写 Gradle 任务来实现这一目标。 #### 定义时间戳函数 首先,在项目的根目录下的 `buildSrc/src/main/kotlin/utils/Utils.kt` 创建一个工具类用于获取当前的时间戳: ```kotlin package utils import java.text.SimpleDateFormat import java.util.* object Utils { fun getCurrentTimestamp(): String { val sdf = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA) return sdf.format(Date()) } } ``` 此代码片段展示了如何创建一个静态方法以返回格式化的日期字符串[^4]。 #### 配置 build.gradle.kts 接着,在模块级别的 `build.gradle.kts` 文件内应用该功能,并设置输出 APK名称规则: ```kotlin plugins { id("com.android.application") kotlin("android") } android { defaultConfig { applicationId = "com.example.hellov6" minSdkVersion(21) targetSdkVersion(30) setProperty("archivesBaseName", "${project.name}-${defaultConfig.versionName}") // 使用之前定义好的工具类中的方法来自动生成带有时间戳的名字 applicationVariants.all { variant -> variant.outputs.forEach { output -> if (!output.outputFile.absolutePath.endsWith(".apk")) return@forEach val formattedDate = utils.Utils.getCurrentTimestamp() val newName = "${ project.name}-$formattedDate-${variant.flavorName}-${variant.buildType.name}.apk" output.outputFileName = newName } } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } } ``` 这段配置说明了怎样利用前面提到的时间戳函数动态更改最终打包出来的 APK 文件名为包含项目名、版本号以及编译时刻的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值