更新到 Android Studio 2.2 / gradle 插件 2.2.0 后:"could not get unknown property 'assembleRelease'"
After update to Android Studio 2.2 / gradle plugin 2.2.0: "could not get unknown property 'assembleRelease'"
将 Android Studio 更新到 版本 2.2 和 Gradle 插件后 到 2.2.0,我收到以下错误:
"Could not get unknown property 'assembleRelease' for project ':app' of type 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 中的代码应该只是 move/rename 生成的 apk 文件。
谢谢指教!
切线
您可以稍微重写您的任务并尝试这样:
task renameBuildTask() << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
dependsOn 'assembleRelease'
}
您也可以检查 this 问题以获得更好的理解。
编辑
正如@tangens 在评论中所说:
It works when I replace the call gradle assemble by e.g. gradle renameBuildTask. Thank you! The answer contains an error. Correct would be: task renameBuildTask() << { ... }
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'yourRenameTasks'
}
}
将 Android Studio 升级到 2.2 并将 Gradle 升级到 2.2 后,我遇到了同样的问题。
我有任务 copyApk 需要在构建结束时为 运行。为简洁起见,让我跳过之前有效的部分,post 只说明现在有效的部分:
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 之前。 "Official" 是应用程序的风格。
我从 this SO post 得到了解决方法。为了您的方便,我基本上在此处复制了答案。所有学分归于 post.
的作者
你可以这样做:
task copyApk(dependsOn: "assembleRelease") << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
也许在 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)
在 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'
}
}
将 Android Studio 更新到 版本 2.2 和 Gradle 插件后 到 2.2.0,我收到以下错误:
"Could not get unknown property 'assembleRelease' for project ':app' of type 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 中的代码应该只是 move/rename 生成的 apk 文件。
谢谢指教! 切线
您可以稍微重写您的任务并尝试这样:
task renameBuildTask() << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
dependsOn 'assembleRelease'
}
您也可以检查 this 问题以获得更好的理解。
编辑
正如@tangens 在评论中所说:
It works when I replace the call gradle assemble by e.g. gradle renameBuildTask. Thank you! The answer contains an error. Correct would be: task renameBuildTask() << { ... }
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'yourRenameTasks'
}
}
将 Android Studio 升级到 2.2 并将 Gradle 升级到 2.2 后,我遇到了同样的问题。 我有任务 copyApk 需要在构建结束时为 运行。为简洁起见,让我跳过之前有效的部分,post 只说明现在有效的部分:
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 之前。 "Official" 是应用程序的风格。 我从 this SO post 得到了解决方法。为了您的方便,我基本上在此处复制了答案。所有学分归于 post.
的作者你可以这样做:
task copyApk(dependsOn: "assembleRelease") << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
也许在 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)
在 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'
}
}