我希望使用以下名称格式(带时间戳)构建.apk
。
我该如何设置?
格式:{app_name}{yyyymmddhis}.apk
现在,它已使用名称{app_name}-{release}.apk
答案 0 :(得分:26)
在build.gradle
文件中,您应该像这样更改/添加buildTypes
:
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.all { variant ->
def file = variant.outputFile
def date = new Date();
def formattedDate = date.format('yyyyMMddHHmmss')
variant.outputFile = new File(
file.parent,
file.name.replace("-release", "-" + formattedDate)
)
}
}
}
======使用Android Studio 1.0编辑======
如果您使用的是Android Studio 1.0,则会出现如下错误:
Error:(78, 0) Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@67e7625f.
您应该将build.Types
部分更改为:
buildTypes {
release {
signingConfig signingConfigs.releaseConfig
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)
)
}
}
}
}
答案 1 :(得分:9)
作为旁注,我真的很想知道人们在哪里获得gradle构建对象的对象结构。
为了构建这个,我使用了一些试验和错误,一些谷歌搜索和this(已过时)
android {
...
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def flavor = "default";
if (variant.productFlavors.size() > 0)
flavor = variant.productFlavors.get(0);
def initials = "DefaultFlavor";
if (flavor.name == "flavor1")
initials = "F1";
else if (flavor.name == "flavor2")
initials = "F2";
def build = "Debug";
if (variant.buildType.name == "release")
build = "Release"
def finalName = variant.versionCode + "-" + initials + "-" + build + "-v" + flavor.versionName + "-MyAppName.apk";
output.outputFile = new File(output.outputFile.parent, finalName)
}
}
}
...
}
好的,作为旁注,如果您想确定libs项目的名称是一个快速脚本,请确保将其放在每个库gradle构建文件中。
android {
...
defaultConfig {
minSdkVersion 10
targetSdkVersion 16
versionCode 1
versionName "1.0.4"
project.version = versionName
}
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
def fileName = "${archivesBaseName}-v${version}.aar"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
...
}
答案 2 :(得分:0)
你应该改变这样的事情。动态地做。
project.archivesBaseName = {app_name}{yyyymmddhis};
但我已经读到这将被弃用。
不推荐按需创建属性(a.k.a.动态属性),并计划在Gradle 2.0中删除。不推荐使用的动态属性:“root project'myapp'”上的“archivesBaseName”,值:“AnotherName”。