После обновления до Android Studio 2.2/gradle плагин 2.2.0: "не удалось получить неизвестное свойство" assembleRelease ""
После обновления 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.
Спасибо за советы!
Тангенс
Ответы
Ответ 1
Вы можете немного переписать свою задачу и попробовать следующее:
task renameBuildTask() << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
dependsOn 'assembleRelease'
}
Также вы можете проверить этот вопрос, чтобы лучше понять.
ИЗМЕНИТЬ
Как @tangens сказал в комментарии:
Он работает, когда я заменяю вызов gradle на сбор, например. gradle renameBuildTask. Спасибо! Ответ содержит ошибку. Правильно было бы: task renameBuildTask() < {...}
Ответ 2
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'yourRenameTasks'
}
}
Ответ 3
может быть, обернуть код в 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
детали:
Не удалось получить неизвестное свойство 'assembleDebug' (2.2-бета)
Ответ 4
У меня была такая же проблема после обновления 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. "Официальный" - это привкус приложения.
Я получил обходной путь от этого сообщения SO. Я по существу копировал ответ здесь для вашего удобства. Все кредиты принадлежат автору этого сообщения.
Ответ 5
вы можете сделать это:
task copyApk(dependsOn: "assembleRelease") << {
file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
Ответ 6
внутри метода 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'
}
}