Android: 添加 date/time 到 gradle 输出 apk 文件名
Android: add date/time to gradle output apk filename
如何将date/time戳添加到GradleAndroid输出文件名?
应该是 project_v0.5.0_201503110212_public.apk
已经看过
- how append date build to versionNameSuffix on gradle
- How to pass arguments from command line to gradle
我假设您希望它采用您指定的格式,所以这是一种可能的解决方案。
在您的 gradle 文件中,您可以定义一个新函数来获取您想要的日期时间字符串:
import java.text.DateFormat
import java.text.SimpleDateFormat
def getDateTime() {
DateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
return df.format(new Date());
}
然后对于所有变体,您可以简单地 运行 这个:
android {
//...
buildTypes {
//...
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def file = output.outputFile
output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + getDateTime() + ".apk"))
}
}
}
}
请注意,这并没有像您发布的那样真正输出 apk 名称,但我想这足以帮助您。
这是我的希望能帮到你
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def file = output.outputFile
output.outputFile = new File(
(String) file.parent,
(String) file.name.replace(
file.name,
// alter this string to change output file name
"APigLive_Android_" + variant.name + "_" + variant.versionName + "_" + releaseTime() + ".apk"
)
)
}
}
def releaseTime(){
return new Date().format("MM:dd:HH:mm", TimeZone.getTimeZone("GMT"))
}
我还在构建中添加了格式化日期。首先,我使用了某种 "now" 和 new Date()
,但这会导致在使用 Android Studio 开始构建时出现问题,就像上面的评论之一一样。我决定使用最新提交的时间戳。我在这里找到了一些灵感:https://jdpgrailsdev.github.io/blog/2014/10/14/spring_boot_gradle_git_info.html
添加时间戳的处理如下:
def getLatestCommitTimeStamp() {
def revision = 'git rev-list --max-count 1 --timestamp HEAD'.execute().text.trim()
def gitCommitMillis = java.util.concurrent.TimeUnit.SECONDS.toMillis(revision.split(' ').first() as long)
return new Date(gitCommitMillis).format("_HH.mm.ss_dd-MM-yyyy", TimeZone.getTimeZone('Europe/Berlin'))
}
我的重命名部分如下所示:
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
def lastCommitFormattedDate = getLatestCommitTimeStamp()
variant.outputs.each { output ->
def alignedOutputFile = output.outputFile
def unalignedOutputFile = output.packageApplication.outputFile
// Customise APK filenames (to include build version)
if (variant.buildType.zipAlignEnabled) {
// normal APK
output.outputFile = new File(alignedOutputFile.parent, alignedOutputFile.name.replace(".apk", "-v" + defaultConfig.versionName + "-" + variant.buildType.name.toUpperCase() + "-${gitSha}" + lastCommitFormattedDate + ".apk").replace("-" + variant.buildType.name, "").replace(project.name, "otherName"))
}
// 'unaligned' APK
output.packageApplication.outputFile = new File(unalignedOutputFile.parent, unalignedOutputFile.name.replace(".apk", "-v" + defaultConfig.versionName + "-" + variant.buildType.name.toUpperCase() + "-${gitSha}" + lastCommitFormattedDate + ".apk").replace("-" + variant.buildType.name, "").replace(project.name, "otherName"))
}
}
这段代码对我有用。
applicationVariants.all { variant ->
variant.outputs.each { output ->
def project = "Your App Name"
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)
}
}
另一种解决方案是在 defaultConfig
中设置 $dateTime
属性,如下所示:
defaultConfig {
setProperty("archivesBaseName", "Appname-$dateTime-v$versionName")
}
您只需在 android
部分的 defaultConfig
部分添加下面的代码即可。
setProperty("archivesBaseName", "yourData-$versionName " + (new Date().format("HH-mm-ss")))
灵感来自 enter link description here
如何将date/time戳添加到GradleAndroid输出文件名?
应该是 project_v0.5.0_201503110212_public.apk
已经看过
- how append date build to versionNameSuffix on gradle
- How to pass arguments from command line to gradle
我假设您希望它采用您指定的格式,所以这是一种可能的解决方案。
在您的 gradle 文件中,您可以定义一个新函数来获取您想要的日期时间字符串:
import java.text.DateFormat
import java.text.SimpleDateFormat
def getDateTime() {
DateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
return df.format(new Date());
}
然后对于所有变体,您可以简单地 运行 这个:
android {
//...
buildTypes {
//...
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def file = output.outputFile
output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + getDateTime() + ".apk"))
}
}
}
}
请注意,这并没有像您发布的那样真正输出 apk 名称,但我想这足以帮助您。
这是我的希望能帮到你
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def file = output.outputFile
output.outputFile = new File(
(String) file.parent,
(String) file.name.replace(
file.name,
// alter this string to change output file name
"APigLive_Android_" + variant.name + "_" + variant.versionName + "_" + releaseTime() + ".apk"
)
)
}
}
def releaseTime(){
return new Date().format("MM:dd:HH:mm", TimeZone.getTimeZone("GMT"))
}
我还在构建中添加了格式化日期。首先,我使用了某种 "now" 和 new Date()
,但这会导致在使用 Android Studio 开始构建时出现问题,就像上面的评论之一一样。我决定使用最新提交的时间戳。我在这里找到了一些灵感:https://jdpgrailsdev.github.io/blog/2014/10/14/spring_boot_gradle_git_info.html
添加时间戳的处理如下:
def getLatestCommitTimeStamp() {
def revision = 'git rev-list --max-count 1 --timestamp HEAD'.execute().text.trim()
def gitCommitMillis = java.util.concurrent.TimeUnit.SECONDS.toMillis(revision.split(' ').first() as long)
return new Date(gitCommitMillis).format("_HH.mm.ss_dd-MM-yyyy", TimeZone.getTimeZone('Europe/Berlin'))
}
我的重命名部分如下所示:
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
def lastCommitFormattedDate = getLatestCommitTimeStamp()
variant.outputs.each { output ->
def alignedOutputFile = output.outputFile
def unalignedOutputFile = output.packageApplication.outputFile
// Customise APK filenames (to include build version)
if (variant.buildType.zipAlignEnabled) {
// normal APK
output.outputFile = new File(alignedOutputFile.parent, alignedOutputFile.name.replace(".apk", "-v" + defaultConfig.versionName + "-" + variant.buildType.name.toUpperCase() + "-${gitSha}" + lastCommitFormattedDate + ".apk").replace("-" + variant.buildType.name, "").replace(project.name, "otherName"))
}
// 'unaligned' APK
output.packageApplication.outputFile = new File(unalignedOutputFile.parent, unalignedOutputFile.name.replace(".apk", "-v" + defaultConfig.versionName + "-" + variant.buildType.name.toUpperCase() + "-${gitSha}" + lastCommitFormattedDate + ".apk").replace("-" + variant.buildType.name, "").replace(project.name, "otherName"))
}
}
这段代码对我有用。
applicationVariants.all { variant ->
variant.outputs.each { output ->
def project = "Your App Name"
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)
}
}
另一种解决方案是在 defaultConfig
中设置 $dateTime
属性,如下所示:
defaultConfig {
setProperty("archivesBaseName", "Appname-$dateTime-v$versionName")
}
您只需在 android
部分的 defaultConfig
部分添加下面的代码即可。
setProperty("archivesBaseName", "yourData-$versionName " + (new Date().format("HH-mm-ss")))
灵感来自 enter link description here