将 Android Studio 更新为版本2.2 并将 Gradle-plugin 更新为 2.2.0 后,我获得了以下错误:
"无法获得未知财产' assembleRelease'对于项目':app'类型为org.gradle.api.Project。"
当我将插件版本更改回 2.1.3 时,代码仍然有效,但这对我来说不是长期选择。
我的代码:
apply plugin: 'com.android.application'
dependencies {
...
}
android {
...
}
...
assembleRelease.doLast {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
提示: project.ext.androidVersionCode是在其他地方定义的变量,包含内部版本号。 assembleRelease.doLast中的代码只需移动/重命名生成的apk文件。
感谢您的建议! tangens
答案 0 :(得分:16)
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'yourRenameTasks'
}
}
答案 1 :(得分:15)
您可以稍微重写一下您的任务并尝试这样:
task renameBuildTask() << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
dependsOn 'assembleRelease'
}
您也可以查看this问题以便更好地理解。
修改强>
正如@tangens在评论中所说:
当我用例如替换呼叫gradle汇编时它起作用gradle renameBuildTask。谢谢!答案包含错误。正确的是:task renameBuildTask()&lt;&lt; {...}
答案 2 :(得分:7)
可能在afterEvaluate {}中包装代码将起作用:
afterEvaluate {
assembleRelease.doLast {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
}
gradle-2.14.1和android gradle插件2.2.0
细节: Could not get unknown property 'assembleDebug' (2.2-beta)
答案 3 :(得分:5)
将Android Studio升级到2.2并将Gradle升级到2.2后,我遇到了同样的问题。 我有任务copyApk需要在构建结束时运行。为简洁起见,让我跳过之前正在工作的内容,并仅发布现在正在发挥作用的内容:
tasks.create(name: 'copyApk', type: Copy) {
from 'build/outputs/apk/myapp-official-release.apk'
into '.../mobile'
rename('myapp-official-release.apk', 'myapp.apk')
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.dependsOn 'copyApk'
}
}
Gradle控制台显示copyApk在packageOfficialRelease,assembleOfficialRelease之后,在最后一个任务assembleRelease之前运行。 &#34;官方&#34;是应用程序的味道。 我从this SO post得到了解决方法。为了您的方便,我基本上复制了答案。所有学分都归该帖子的作者所有。
答案 4 :(得分:0)
你可以这样做:
task copyApk(dependsOn: "assembleRelease") << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
答案 5 :(得分:0)
在buildTypes {}方法中,我把这段代码:像魅力一样工作
task setEnvRelease << {
ant.propertyfile(
file: "src/main/assets/build.properties") {
entry(key: "EO_WS_DEPLOY_ADDR", value: "http://PRODUCTION IP")
}
}
task setEnvDebug << {
ant.propertyfile(
file: "src/main/assets/build.properties") {
entry(key: "EO_WS_DEPLOY_ADDR", value: "http://DEBUG IP TEST")
}
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug') {
task.dependsOn 'setEnvDebug'
} else if (task.name == 'assembleRelease') {
task.dependsOn 'setEnvRelease'
}
}