web-dev-qa-db-fra.com

Après la mise à jour du plugin Android Studio 2.2/gradle 2.2.0: "impossible d'obtenir la propriété inconnue 'assembleRelease'"

Après avoir mis à jour Android Studio à version 2.2 et le Gradle-plugin à 2.2.0 , le message d'erreur suivant s'affiche:

"Impossible d'obtenir la propriété inconnue 'assembleRelease' pour le projet ': app' de type org.gradle.api.Project."  

Quand je change la version du plugin en 2.1.3, le code fonctionne toujours, mais ce n'est pas une option à long terme pour moi.

Mon code:

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")
}

Astuce: Project.ext.androidVersionCode est une variable définie ailleurs et contient un numéro de build. Le code dans assembleRelease.doLast doit simplement déplacer/renommer le fichier apk généré.

Merci pour vos conseils! Tangens

25
tangens

Vous pouvez réécrire un peu votre tâche et essayer comme ceci:

task renameBuildTask() << {
  file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
  dependsOn 'assembleRelease'
}

Vous pouvez aussi vérifier ceci question pour mieux comprendre.

MODIFIER

Comme @tangens a déclaré dans un commentaire:

Cela fonctionne lorsque je remplace le graduel d’appel assemblé, par exemple. gradle renameBuildTask. Je vous remercie! La réponse contient une erreur. La correction serait: task renameBuildTask () << {...}

15
tasks.whenTaskAdded { task ->
  if (task.name == 'assembleRelease') {
    task.finalizedBy 'yourRenameTasks'
  }
}
15
HalZhang

peut-être que le code dans afterEvaluate {} sera un travail:

afterEvaluate {
    assembleRelease.doLast {
       file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
    }
}

gradle-2.14.1 et le plugin Android Gradle 2.2.0 

détails: Impossible d'obtenir la propriété inconnue 'assembleDebug' (2.2-beta)

7
w7849516230

J'ai eu le même problème après la mise à niveau d'Android Studio vers 2.2 et de Gradle vers 2.2 . J'ai une tâche copyApk qui doit être exécutée à la fin de la construction. Par souci de brièveté, laissez-moi ignorer ce qui fonctionnait auparavant et ne publier que ce qui fonctionne actuellement:

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'
    }
}

La console Gradle indique que copyApk a été exécuté près de la fin après packageOfficialRelease, assembleOfficialRelease, juste avant la dernière tâche assembleRelease. "Officiel" est un aperçu de l'application . J'ai eu la solution de contournement de ce SO post . J'ai essentiellement copié la réponse ici pour votre commodité. Tous les crédits vont à l'auteur de ce post.

5
Hong

tu peux le faire:

task copyApk(dependsOn: "assembleRelease") << {
    file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}
0
许大卫

dans la méthode buildTypes {}, j'ai mis ce code: travaillé comme un charme

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'
            }
        }
0
Arthur Melo