当前位置: 首页 > 知识库问答 >
问题:

"app-release.apk"如何更改这个默认生成的apk名称

曹鸿风
2023-03-14

每当我在Android Studio中生成签名apk时,默认情况下,它会将名称app-release.apk....

我们是否可以进行任何设置,以便它能够提示并询问需要分配给apk的名称(就像它在eclipse中所做的那样)

我要做的是——在生成apk后重命名它。这不会给出任何错误,但有没有真正的方法可以让我更改设置以获得提示。

注:

共有3个答案

越麒
2023-03-14

(为配合Android Studio 3.0和Gradle 4进行编辑)

我正在寻找一个更复杂的apk文件名重命名选项,我编写了这个解决方案,用以下数据重命名apk:

  • 风味
  • 构建类型
  • 版本
  • 日期

你会得到这样一个apk:myProject_dev_debug_1.3.6_131016_1047。阿普克。

你可以在这里找到完整的答案。希望有帮助!

在build.gradle:

android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
        debug {
            minifyEnabled false
        }
    }

    productFlavors {
        prod {
            applicationId "com.feraguiba.myproject"
            versionCode 3
            versionName "1.2.0"
        }
        dev {
            applicationId "com.feraguiba.myproject.dev"
            versionCode 15
            versionName "1.3.6"
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def project = "myProject"
            def SEP = "_"
            def flavor = variant.productFlavors[0].name
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def version = variant.versionName
            def date = new Date();
            def formattedDate = date.format('ddMMyy_HHmm')

            def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"

            outputFileName = new File(newApkName)
        }
    }
}
云俊美
2023-03-14

最新的android gradle插件(3.0)可能会出现错误:

无法设置只读属性输出文件的值

根据迁移指南,我们现在应该使用以下方法:

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
    }
}

注2:此处的主要变化:

  1. 现在使用all而不是each来迭代变量输出
柳羽
2023-03-14

是的,我们可以改变这一点,但需要更多的关注

现在将其添加到构建中。在你的项目中升级,同时确保你已经检查了项目的构建变量,比如release或Debug,所以我在这里将我的构建变量设置为release,但是你也可以选择Debug

    buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig getSigningConfig()
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def date = new Date();
                        def formattedDate = date.format('yyyyMMddHHmmss')
                        output.outputFile = new File(output.outputFile.parent,
                                output.outputFile.name.replace("-release", "-" + formattedDate)
    //for Debug use output.outputFile = new File(output.outputFile.parent,
   //                             output.outputFile.name.replace("-debug", "-" + formattedDate)
                        )
                    }
                }
            }
        }

你可以这样用不同的方法来做

 defaultConfig {
        applicationId "com.myapp.status"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        setProperty("archivesBaseName", "COMU-$versionName")
    }

在构建中使用Set属性方法。gradle,在运行项目之前不要忘记同步gradle,希望它能解决您的问题:)

处理此问题的新方法最近由谷歌更新添加您现在可以根据味道或变体输出重命名您的构建//下面的来源来自开发人员android留档有关更多详细信息,请遵循上面的留档链接
使用变体API来操作变体输出是用新插件打破。它仍然适用于简单的任务,例如在构建期间更改APK名称,如下所示:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

改名。这是大卫·梅登雅克很好的回答

tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) {
        def renameTaskName = "rename${task.name.capitalize()}Aab"
        def flavor = task.name.substring("bundle".length()).uncapitalize()
        tasks.create(renameTaskName, Copy) {
            def path = "${buildDir}/outputs/bundle/${flavor}/"
            from(path)
            include "app.aab"
            destinationDir file("${buildDir}/outputs/renamedBundle/")
            rename "app.aab", "${flavor}.aab"
        }

        task.finalizedBy(renameTaskName)
    }
//@credit to David Medenjak for this block of code
}

是否需要上述代码

我在最新版本的android studio 3.3.1中看到了什么

的重命名。aab bundle由前面的代码完成,根本不需要任何任务重命名。

希望它能帮助你们。:)

 类似资料:
  • 每当我在Android Studio中生成一个签名apk,默认情况下它给出的名称是app-release.apk... 我们是否可以做任何设置,以便它应该提示并询问我需要分配给apk的名称(在eclipse中这样做) 我所做的是-在apk生成后重命名它。这不会给出任何错误,但有没有任何真正的方式,使我可以做任何设置的改变,以获得提示。

  • 每次我用Android Studio(1.02)运行一个项目时,它都会生成一个未签名的apk,该apk位于..\build\outputs\apk文件夹中,默认情况下获得名称“app-debug.apk”

  • 目前,我正在将新的JPA实体映射到旧的数据库。数据库中的列名用下划线分隔,如'my_column_name'。 问题是JPA默认使用with camel case。 我知道可以添加@column(Name=“..”)或@JoinColumn(Name=“...”)属性-但这意味着我必须将它添加到所有实体中的每个属性中。 是否可以更改JPA的默认行为,使用'my_column_name'而不是'my

  • 当启动一个流浪者盒子时,“默认”这个名字来自哪里? 有没有办法设定这个?

  • 问题内容: 我正在使用JAXWS为正在构建的Java应用程序生成WebService客户端。 当JAXWS构建其XML以用于SOAP协议时,它将生成以下名称空间前缀: 我的问题是,除非 我的 XML代理人(XML namepspace前缀为),否则我的Counterpart(一家大型汇款公司)将管理我的客户端连接到的服务器,拒绝接受WebService调用( 请不要问我为什么 )。像这样: 所以我

  • 问题内容: 尝试更改列的数据类型并设置新的默认值时遇到以下错误: 错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’VARCHAR(255)NOT NULL SET DEFAULT’{}’‘附近使用正确的语法 问题答案: 同样的第二种可能性(感谢juergen_d):