После обновления до 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")
}