Outils pour utilisateurs

Outils du site


prob:gradle:mise_a_jour

com.android.tools.build

  • com.android.tools.build est obsolète

com.android.tools.build désignait la version du plugin Gradle. Il faut maintenant définir la version de Gradle dans la version des plugins / id.

Avant :

buildscript {
  dependencies {
    classpath 'com.android.tools.build:gradle:2.1.2'
  }
}

Après

build.gradle
plugins {
  id 'com.android.application' version '8.0.2' apply false
  id 'com.android.library' version '8.0.2' apply false
}
  • Compatibilité entre la la version de Gradle et du plugin Gradle

Bien mettre à jour la version des id du build.gradle en même temps que le champ distributionUrl de Gradle dans le fichier gradle-wrapper.properties.

Voir la page Gradle Plugin pour la compatibilité entre la version de gradle et son plugin.

Voir la page Maven pour la dernière version disponible de la classe com.android.tools.build:gradle.

Il est aussi possible de lancer la commande suivante deux fois :

./gradle wrapper --gradle-version --7.5.1

Vieille version à Gradle 7

Avant :

build.gradle
android {
  compileSdkVersion 24
  buildToolsVersion "24.0.1"
  defaultConfig {
    minSdkVersion 16
    targetSdkVersion 24
  }
}

Après (ajout d'un namespace) :

build.gradle
android {
  namespace 'com.same.application.id'
  compileSdk 24
  buildTools "24.0.1"
  defaultConfig {
    minSdk 16
    targetSdk 24
  }
}

Version 7 vers 8

''publishing'' / ''publications''

L'élément components est maintenant vide. Il n'est donc plus nécessaire de l'appeler depuis afterEvaluate.

Il faut donc trouver des alternatives.

  • Cas d'une librairie

Si on utilise la boucle :

android.libraryVariants.all { variant ->
  variant.outputs.all { output ->
    create(variant.name.capitalize(), MavenPublication) {
      ...
      afterEvaluate {
        from components.findByName("${variant.name}")
      }
    }
  }
}

Il faut remplacer afterEvaluate par :

artifact(tasks.getByName("bundle${variant.name.capitalize()}Aar"))
  • Cas d'une application

Dans le cas d'une application, les bundle ne sont pas de type MavenPublication et ne peuvent pas d'utiliser en tant qu'artefact.

Si on utilise la boucle :

android.applicationVariants.all { variant ->
  variant.outputs.all { output ->
    create(variant.name.capitalize(), MavenPublication) {
      ...
      afterEvaluate {
        // components are shared_debug_apk / shared_debug_aab
        from components.findByName("${variant.name}_apk")
      }
    }
  }
}

Il faut remplacer afterEvaluate par :

def match = variant.name =~ '^(.*)(Release|Debug)$'
artifact("$buildDir/outputs/apk/${match[0][1]}/${match[0][2].uncapitalize()}/app-${output.name}.apk")

et en dehors de publishing :

build.gradle
tasks.whenTaskAdded { task ->
  if (task.name.startsWith("publish")) {
    def match = task.name =~ '^publish(.*)(Release|Debug)PublicationTo(.*)$'
    dependsOn(tasks.getByName("assemble${match[0][1]}${match[0][2]}"))
  }
}

gradle publish.dependsOn('assemble') not working Archive du 29/07/2019 le 22/05/2023

repositories

Avant :

build.gradle
buildscript {
  repositories {
    jcenter()
  }
}
 
allprojects {
  repositories {
    jcenter()
  }
}

Après (changement de fichier) :

settings.gradle
pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
 
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
  repositories {
    google()
    mavenCentral()
    mavenLocal()
  }
}

Solve Gradle error: Plugin with id 'com.android.application' not found Archive du 17/05/2022 le 12/06/2023

AndroidX

Avant :

build.gradle
dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.android.support:appcompat-v7:24.1.1'
}

Après :

build.gradle
dependencies {
  implementation 'androidx.appcompat:appcompat:1.4.2'
}

Java version

  • Unsupported Java. Your build is currently configured to use Java 17.0.6 and Gradle 6.7.1.
  • Unsupported class file major version 61

Les deux messages d'erreur ci-dessous peuvent être simultanés.

La version de Gradle est incompatible avec la version de Java. Il faut donc mettre à jour Gradle depuis File > Project structure....

Compatibilité entre Java et Gradle.

Modules

  • Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @20c95b02

Dans gradle.properties, il faut ajouter au champ org.gradle.jvmargs l'option --add-opens au module qui n'a pas réussi à être “opens”.

org.gradle.jvmargs=--add-opens=java.base/java.io=ALL-UNNAMED

Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @fb04536 Archive du 22/06/2021 le 18/08/2023

prob/gradle/mise_a_jour.txt · Dernière modification : 2023/08/18 15:38 de root