“app-release.apk”如何改变这个默认生成的apk名称
每当我在android studio中生成一个签名的apk,默认情况下,它的名称为app-release.apk …
我们可以做任何设置,以便它应该提示并问我需要分配给apk的名字(它在eclipse中的方式)
我所做的是 – 在生成后重命名apk。 这不会给出任何错误,但有没有真正的方法,以便我可以做任何设置更改以获得提示。
注意::
同时生成apk安卓工作室给我一个提示select的位置(只)
是的,我们可以改变,但更多的关注
现在在你的项目的build.gradle中添加这个,同时确保你已经检查了你的项目的版本变种 ,比如release or Debug
所以在这里我已经把我的构build版本设置为release
但是你也可以selectDebug。
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") }
在build.gradle中使用Set属性方法, 不要忘记在运行项目之前同步gradle希望它会解决你的问题:)
一个新的方法来处理这个最近由谷歌更新添加您现在可以重新命名您的构build根据口味或Variant输出/ / 下面的来源是从开发人员的Android文档 更多详细信息请按照上述文档链接
使用Variant API来操作变体输出会被新的插件破坏。 它仍然适用于简单的任务,例如在构build时更改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" } }
我修改@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
我正在寻找一个更复杂的apk文件名重命名选项,我写了这个解决scheme,用以下数据重命名apk:
- 味道
- build立types
- 版
- date
你会得到这样一个apk: myProject_dev_debug_1.3.6_131016_1047.apk 。
你可以在这里find完整的答案 。 希望能帮助到你!
在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.each { 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" output.outputFile = new File(output.outputFile.parent, newApkName) } } }
你可能会得到最新的Android Gradle插件( 3.0 )的错误:
无法设置只读属性“outputFile”的值
根据迁移指南 ,我们现在应该采用以下方法:
applicationVariants.all { variant -> variant.outputs.all { outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk" } }
注2主要变化在这里:
- 现在
all
使用,而不是each
迭代variables输出。 -
outputFileName
属性而不是变更文件引用。
不重命名,但也许正确地生成名称将有所帮助? 用Gradle更改apk名称
我基于@Fer的答案写了更多的通用解决scheme。
它也应该适用于applicationId
, versionName
, versionCode
flavor和基于types的configuration。
在build.gradle中:
android { ... applicationVariants.all { variant -> variant.outputs.each { output -> def appId = variant.applicationId def versionName = variant.versionName def versionCode = variant.versionCode def flavorName = variant.flavorName // eg free def buildType = variant.buildType // eg debug def variantName = variant.name // eg freeDebug def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk'; output.outputFile = new File(output.outputFile.parentFile, apkName) } } }
示例apk名称: com.example.app_freeDebug_1.0_1.apk
欲了解更多信息,请参阅variablesvariables的javadoc: ApkVariant
这是一个更短的方法:
defaultConfig { ... applicationId "com.blahblah.example" versionCode 1 versionName "1.0" setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")") }
它给你命名com.blahblah.example-v1(1.0)-debug.apk(在debugging模式下)
Android Studio默认通过构buildtypes名称添加versionNameSuffix,如果你想覆盖这个,做下一步:
buildTypes { debug { ... versionNameSuffix "-MyNiceDebugModeName" } release { ... } }
以debugging模式输出:com.blahblah.example-v1(1.0)-MyNiceDebugModeName.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' } }