使用Time Stamp运行昨日版本的Android Gradle构建文件

时间:2016-03-09 07:46:14

标签: android android-studio android-gradle build.gradle

下面我有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)
            }
        }
    }
 }

2 个答案:

答案 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'
}