下面我有Gradle的构建文件。 问题。它运行昨天的APK而不是今天的。 根本原因。我动态地将日期放在apks名称中 - 用于调试版本。
当我运行应用程序时,它会看到旧的APK,并且看到它与Gradle期望的相符,因为Gradle没有刷新并注意到日期更改。
我需要强制gradle刷新每次运行。
buildTypes {
debug {
debuggable true
minifyEnabled false
proguardFiles 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
def formattedDate = new Date().format('yyyyMMdd')
def newName = output.outputFile.name
newName = newName.replace("app-", "myappname-") //"MyAppName" -> I set my app variables in the root project
newName = newName.replace("-release", "-" + versionName + "-" + formattedDate + "-r")
newName = newName.replace("-debug", "-" + versionName + "-" + formattedDate + "-d")
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
}
答案 0 :(得分:3)
即使其他一些选项可能有效,您是否尝试过
--recompile-scripts
强制重新编译脚本,绕过缓存。
command-line option?另一种选择是--rerun-tasks
,但这可能有点矫枉过正。
upToDateWhen
看看Resetting the UP-TO-DATE property of gradle tasks?。设置upToDateWhen {false}
可能会有所帮助。请尝试以下方法:
applicationVariants.all { variant ->
variant.outputs.upToDateWhen {false}
variant.setOnlyIf { true }
variant.outputs.each { output ->
def formattedDate = new Date().format('yyyyMMdd')
def newName = output.outputFile.name
newName = newName.replace("app-", "myappname-") //"MyAppName" -> I set my app variables in the root project
newName = newName.replace("-release", "-" + versionName + "-" + formattedDate + "-r")
newName = newName.replace("-debug", "-" + versionName + "-" + formattedDate + "-d")
output.outputFile = new File(output.outputFile.parent, newName)
}
}
答案 1 :(得分:0)
例如,如果没有任何风格,您可以为每种风味和构建类型(installDebug,intallRelease)创建此类任务,并运行它而不是默认运行配置。 但是,您应该手动附加到调试,也许,您可能还有其他一些问题。 也许有一些能够为每种flavor / build类型自动生成这些任务。
来自这里的脚本: https://stackoverflow.com/a/21992166/4069913
task appStart(type: Exec, dependsOn: 'install$Flavor$Build') {
// linux
commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MainActivity'
// windows
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MainActivity'
}