我遇到了 gradle 和 Android Studio 的问题,该问题仅在 Android Studio 中构建时出现(BuildServer 和 Commandline 工作正常)
applicationVariants.all { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace("app-", getDate() + "_myapp_" + getGitCommit() +"_"));
}
def getDate() {
def dateNow = new Date()
def formattedDate = dateNow.format('yyyy-MM-dd_HH-mm-ss')
return formattedDate
}
构建工作正常,但是当 AS 想要将 apk 复制到设备时,它会抛出Local path doesn't exist.
error.
问题是生成的文件如下所示:
2014-03-17_16-17-41_myapp__debug-unaligned.apk
但 AS 寻找:
2014-03-17_16-17-18_myapp__debug-unaligned.apk
这是由 AS 特定构建步骤以某种方式生成的,导致重新计算日期。我尝试使用构建日期的外部属性来修复它,该日期应该在整个构建过程中保持不变,但可能由于我缺乏 gradle 技能,这没有帮助。
也许有人有一个解决方法可以让我在 Android Studio 中进行构建。
这是正常的,但却是不幸的。
当 Studio 打开项目时,它会向 Gradle 查询项目的模型。这包括模块列表以及每个模块的源文件夹、依赖项以及构建的输出。在本例中,APK.
因此,当 Studio 向 Gradle 查询模型时,我们的插件将构建模型,其中包括运行重命名 APK 文件名的自定义代码。然后将其发送到 Studio 进行录制。
然而,每当您构建时,Studio 都会告诉 Gradle 进行构建,但不会向其传递任何其他信息。 Gradle 实际上会再次重新创建模型,并再次运行您的代码。
这意味着每次构建时 APK 文件名都是不同的(因为您的 APK 文件名包含精确到秒的日期),但它们都不与项目导入期间创建的文件名匹配。这会导致部署失败。
目前无法让 Gradle 向 Studio 发送生成的 APK 的文件名。
编辑:更好的方法是保留当前输出,但将其复制到新文件中以便妥善保管。
我会做这样的事情:
android.applicationVariants.all { variant ->
def file = variant.output
// create the new task
def copyTask = project.tasks.create("copy${variant.name}Apk", Copy)
copyTask.from = file
copyTask.into = file.parent
copyTask.rename("app-", getDate() + "_myapp_" + getGitCommit() +"_")
// set up task dependencies
// first make the assemble task depend on copyTask to make sure it gets called.
variant.assemble.dependsOn copyTask
// then make copyTask depend on the actual packaging task.
copyTask.dependsOn variant.packageApplication
}
请注意,复制任务需要一个文件夹作为目标,因此我们必须使用重命名规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)