Android &引用;应用程序发布.apk“;如何更改此默认生成的apk名称
每当我在Android Studio中生成一个签名的apk时,默认情况下它的名称为app release.apk 我们是否可以进行任何设置,以便它能够提示并询问需要分配给apk的名称(就像它在eclipse中所做的那样) 我要做的是-在生成apk后重命名它。 这不会给出任何错误,但是否有任何真正的方法,以便我可以对设置进行任何更改以获得提示 注::Android &引用;应用程序发布.apk“;如何更改此默认生成的apk名称,android,android-studio,Android,Android Studio,每当我在Android Studio中生成一个签名的apk时,默认情况下它的名称为app release.apk 我们是否可以进行任何设置,以便它能够提示并询问需要分配给apk的名称(就像它在eclipse中所做的那样) 我要做的是-在生成apk后重命名它。 这不会给出任何错误,但是否有任何真正的方法,以便我可以对设置进行任何更改以获得提示 注:: 生成apk时,android studio会提示我选择位置(仅限)不重命名它,但首先正确生成名称可能会有所帮助 是的,我们可以改变这一点,但需要更多
生成apk时,android studio会提示我选择位置(仅限)不重命名它,但首先正确生成名称可能会有所帮助 是的,我们可以改变这一点,但需要更多的关注 现在将此添加到项目中的build.gradle中,同时确保已检查项目的build variant,如
发布或调试
因此,这里我将构建变量设置为release
,但您也可以选择Debug。
你可以这样用不同的方法来做 在build.gradle中使用Set属性方法 在运行项目之前,不要忘记同步gradle 希望它能解决您的问题:) google update最近增加了一种新的处理方法 您现在可以根据味道或变体输出重命名构建 有关更多详细信息,请参见上述文档链接
使用variantapi操作变量输出的新插件被破坏了。它仍然适用于简单任务,例如在构建期间更改APK名称,如下所示: 重命名.aab包 这很好 是否需要上述代码 我在最新版本的android studio 3.3.1中观察到的内容 .aab bundle的重命名由前面的代码完成,根本不需要任何任务重命名
希望这对你们有帮助。:) 我修改了@Abhishek Chaubey答案以更改整个文件名:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
project.ext { appName = 'MyAppName' }
def formattedDate = new Date().format('yyyyMMddHHmmss')
def newName = output.outputFile.name
newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
newName = newName.replace("-release", "-release" + formattedDate)
//noinspection GroovyAssignabilityCheck
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
debug {
}
}
这将生成一个文件名,如:MyAppName-release20150519121617.apk
(编辑以与Android Studio 3.0和Gradle 4配合使用)
我正在寻找一个更复杂的apk文件名重命名选项,我编写了这个解决方案,用以下数据重命名apk:
- 风味
- 构建类型
- 版本
- 日期
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)
}
}
}
android {
...
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appId = variant.applicationId
def versionName = variant.versionName
def versionCode = variant.versionCode
def flavorName = variant.flavorName // e. g. free
def buildType = variant.buildType // e. g. debug
def variantName = variant.name // e. g. freeDebug
def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
output.outputFile = new File(output.outputFile.parentFile, apkName)
}
}
}
我根据@Fer-answer编写了更通用的解决方案 它还应该与
applicationId
、versionName
、versionCode
的基于风格和构建类型的配置一起使用
在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)
}
}
}
android {
...
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appId = variant.applicationId
def versionName = variant.versionName
def versionCode = variant.versionCode
def flavorName = variant.flavorName // e. g. free
def buildType = variant.buildType // e. g. debug
def variantName = variant.name // e. g. freeDebug
def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
output.outputFile = new File(output.outputFile.parentFile, apkName)
}
}
}
示例apk名称:com.Example.app\u freeDebug\u 1.0\u 1.apk
有关
变量的更多信息,请参阅和接口定义 我认为这会有帮助
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
project.ext { appName = 'MyAppName' }
def formattedDate = new Date().format('yyyyMMddHHmmss')
def newName = output.outputFile.name
newName = newName.replace("app-", "$project.ext.appName-")
newName = newName.replace("-release", "-release" + formattedDate)
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
}
productFlavors {
flavor1 {
}
flavor2 {
proguardFile 'flavor2-rules.pro'
}
}
最新的android gradle插件(3.0)可能会出现错误:
无法设置只读属性“outputFile”的值
根据中国的经验,我们现在应该采用以下方法:
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
}
}
注2:此处的主要变化:
现在使用all
而不是each
来迭代变量输出
使用outputFileName
属性,而不是修改文件引用
这里有一个更短的方法:
defaultConfig {
...
applicationId "com.blahblah.example"
versionCode 1
versionName "1.0"
setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
//or so
archivesBaseName = "$applicationId-v$versionCode($versionName)"
}
它为您命名为com.blahblah.example-v1(1.0)-debug.apk(在调试模式下)
默认情况下,Android Studio按生成类型名称添加versionNameSuffix,如果要覆盖此项,请执行下一步:
buildTypes {
debug {
...
versionNameSuffix "-MyNiceDebugModeName"
}
release {
...
}
}
调试模式下的输出:com.blahblah.example-v1(1.0)-MyNiceDebugModeName.apk首先将模块从应用程序重命名为,即SurveyApp
其次,将其添加到项目顶级(根项目)渐变中。它与Gradle 3.0一起工作
//rename apk for all sub projects
subprojects {
afterEvaluate { project ->
if (project.hasProperty("android")) {
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${project.name}-${variant.name}-${variant.versionName}.apk"
}
}
}
}
}
我的解决方案也可能对某人有所帮助。
在IntelliJ 2017.3.2上测试并使用Gradle 4.4
场景:
我的应用程序中有两种风格,因此我希望每个版本都根据每种风格进行适当命名
下面的代码将放入您的模块gradle生成文件中,该文件位于:
{app root}/app/build.gradle
要添加到android{}
块的渐变代码:
android {
// ...
defaultConfig {
versionCode 10
versionName "1.2.3_build5"
}
buildTypes {
// ...
release {
// ...
applicationVariants.all {
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(output.outputFile.name, variant.flavorName + "-" + defaultConfig.versionName + "_v" + defaultConfig.versionCode + ".apk"))
}
}
}
}
productFlavors {
myspicyflavor {
applicationIdSuffix ".MySpicyFlavor"
signingConfig signingConfigs.debug
}
mystandardflavor {
applicationIdSuffix ".MyStandardFlavor"
signingConfig signingConfigs.config
}
}
}
上面提供了在{app root}/app/
中找到的以下APK:
myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.apk
希望它能对某人有用
有关更多信息,请参阅问题中提到的其他答案在build.gradle(模块:app)中添加以下代码
发布版本名将是您的应用程序名2018-03-31 12-34添加android.applicationVariants。所有的都会像下面那样在您的应用程序级别中屏蔽
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions {
disable 'MissingTranslation'
}
signingConfig signingConfigs.release
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
}
}
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '_debug'
}
}
可于2019/03/25下载
applicationVariants.all { variant ->
variant.outputs.all { output ->
def reversion = "118"
def date = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
def versionName = defaultConfig.versionName
outputFileName = "MyApp_${versionName}_${date}_${reversion}.apk"
}
}
对于较新的android studio Gradle
AppName是您想要的应用程序名称,请将其替换
variantName将是默认选择的变体或风味
日期将是今天的日期,因此需要进行任何更改,只需将其粘贴
applicationVariants.all { variant ->
variant.outputs.all {
def variantName = variant.name
def versionName = variant.versionName
def formattedDate = new Date().format('dd-MM-YYYY')
outputFileName = "AppName_${variantName}_D_${formattedDate}_V_${versionName}.apk"
}
}
输出:
AppName\u release\u D\u 26-04-2021\u V\u 1.2.apk1.将构建变量更改为release 2.从菜单栏选择构建->生成签名apk。通过这种方式,我生成了带符号的apkAll,这里的答案是不正确的。。使用其中任何一个都会出现此问题。。。问题是studio缓存apk工件的名称,并继续使用缓存的名称,而不是使用新生成的名称!因此,在FormattedDate的类似“Abhishek Chaubey”的安装中使用字符串。是否可以添加versionName
?@AbhishekChaubey在更改apk n后,我无法再通过Android Studio运行代码
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions {
disable 'MissingTranslation'
}
signingConfig signingConfigs.release
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
}
}
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '_debug'
}
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def reversion = "118"
def date = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
def versionName = defaultConfig.versionName
outputFileName = "MyApp_${versionName}_${date}_${reversion}.apk"
}
}
applicationVariants.all { variant ->
variant.outputs.all {
def variantName = variant.name
def versionName = variant.versionName
def formattedDate = new Date().format('dd-MM-YYYY')
outputFileName = "AppName_${variantName}_D_${formattedDate}_V_${versionName}.apk"
}
}