−Table des matières
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...
.
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