Android+Gradle:设置动态archivesBaseName的最佳位置

Android+Gradle:设置动态archivesBaseName的最佳位置,android,android-studio,gradle,Android,Android Studio,Gradle,在我们的Android项目中,我们希望APK的文件名包含日期、git分支名称和短提交散列等信息 我们已经将此设置为defaultConfig的一部分 这在大多数情况下都是有效的,但是我们的构建有时会失败,错误会指向过时的值,例如在切换分支之后。在Android Studio中强制执行Gradle同步通常可以解决这一问题 那么,有没有更好、更可靠的方法来确保属性保持最新,并在必要时强制进行梯度同步?如果在构建过程中发生错误,则会出现“消息”窗口来描述问题。Gradle可能会推荐一些命令行选项来帮助

在我们的Android项目中,我们希望APK的文件名包含日期、git分支名称和短提交散列等信息

我们已经将此设置为defaultConfig的一部分

这在大多数情况下都是有效的,但是我们的构建有时会失败,错误会指向过时的值,例如在切换分支之后。在Android Studio中强制执行Gradle同步通常可以解决这一问题


那么,有没有更好、更可靠的方法来确保属性保持最新,并在必要时强制进行梯度同步?

如果在构建过程中发生错误,则会出现“消息”窗口来描述问题。Gradle可能会推荐一些命令行选项来帮助您解决问题,例如-stacktrace或-debug。要在生成过程中使用命令行选项,请执行以下操作:

打开设置或首选项对话框:在Windows或Linux上,选择 主菜单中的文件>设置。 导航到构建、执行、部署>编译器。 在命令行选项旁边的文本字段中,输入命令行选项。 单击“确定”保存并退出。 Gradle将在您下次尝试构建应用程序时应用这些命令行选项

我已从第页获取信息。

请尝试调用clean.execute

这是我能想到的最便宜的“同步”任务:

   clean.execute()
   android {
       defaultConfig {
          setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")    
       }
    }

我有同样的问题,他们并不总是最新的建设

我用以下方法解决了这个问题:

project.ext.set("archivesBaseName", "myAppName"); 
在defaultConfig块下,我不再有问题了

不确定它是否适用于分支、构建编号或日期,但值得尝试一下。 这是我的配置,包括defaultConfig块。在我的例子中,我只使用了一个硬编码的版本名和内部版本号,我称之为versionCode,因为我在清单中动态地设置了它。但也许你可以根据自己的需要进行调整:

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 22

    versionCode System.getenv("BUILD_NUMBER") as Integer ?: 0

    versionName "6.2.5." + versionCode

}
project.ext.set("archivesBaseName", "myAppname" + defaultConfig.versionName);

这并不能解决问题。我知道问题所在-Gradle无法正确检测到环境已更改分支、日期等。我不确定是否有方法自动检测更改并强制Gradle重新同步。如果我能找到办法,我会让你知道的。这是行不通的!!project.ext.set将保持缓存状态,直到您将gradle文件重新克隆!if将抛出random.apk不存在于diskhaha,原油,但我猜可能会工作。尽管如此,我还是会喜欢比hackI更具解决方案的东西,最终我将它完全移出gradle,并在构建之后进行。我希望能有一个恰当的答案
project.ext.set("archivesBaseName", "myAppName"); 
defaultConfig {
    minSdkVersion 15
    targetSdkVersion 22

    versionCode System.getenv("BUILD_NUMBER") as Integer ?: 0

    versionName "6.2.5." + versionCode

}
project.ext.set("archivesBaseName", "myAppname" + defaultConfig.versionName);