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