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

时间:2016-05-12 03:33:37

标签: android android-studio gradle

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

我们一直将此设置为defaultConfig

的一部分
android {
   defaultConfig {
      setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")    
   }
}

这大部分时间都可以工作,但是我们的构建有时会失败,错误指向过时的值(例如在切换分支之后)。在Android Studio中强制Gradle Sync通常会修复它。

那么是否有更好,更强大的方法来确保财产保持最新并在必要时强制进行同步?

3 个答案:

答案 0 :(得分:2)

尝试在

之前致电clean.execute()
android { ... }

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

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

答案 1 :(得分:0)

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

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

    我已从this页面获取了信息。

答案 2 :(得分:0)

我遇到了同样的问题,他们并不总是对构建有所了解。

我通过使用:

解决了它
project.ext.set("archivesBaseName", "myAppName"); 

在defaultConfig块下,我没有遇到问题。

不确定它是否适用于分支机构,内部版本号或日期,但值得一试。 这是我的配置,包括defaultConfig Block。对于我的情况,我只使用硬编码版本名称和构建号码(我称之为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);