====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 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 [[https://developer.android.com/studio/releases/gradle-plugin|Gradle Plugin]] pour la compatibilité entre la version de gradle et son plugin. Voir la page [[https://mvnrepository.com/artifact/com.android.tools.build/gradle?repo=google|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 : android { compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { minSdkVersion 16 targetSdkVersion 24 } } Après (ajout d'un ''namespace'') : 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'' : 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]}")) } } [[https://stackoverflow.com/questions/57246532/gradle-publish-dependsonassemble-not-working|gradle publish.dependsOn('assemble') not working]] {{ :prob:gradle:mise_a_jour:android_-_gradle_publish.dependson_assemble_not_working_-_stack_overflow_22_05_2023_17_27_36_.html |Archive du 29/07/2019 le 22/05/2023}} ====repositories==== Avant : buildscript { repositories { jcenter() } } allprojects { repositories { jcenter() } } Après (changement de fichier) : pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { google() mavenCentral() mavenLocal() } } [[https://sebhastian.com/plugin-with-id-com-android-application-not-found/|Solve Gradle error: Plugin with id 'com.android.application' not found]] {{ :prob:gradle:mise_a_jour:solve_gradle_error_plugin_with_id_com.android.application_not_found_sebhastian_12_06_2023_17_13_22_.html |Archive du 17/05/2022 le 12/06/2023}} ====AndroidX==== Avant : dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:24.1.1' } Après : 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%%...%%''. [[prog:gradle#compatibilite|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%%'' [[https://github.com/fluttercommunity/flutter_workmanager/issues/287|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]] {{ :prob:gradle:mise_a_jour:🐞_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_issue_287_fluttercommun_.html |Archive du 22/06/2021 le 18/08/2023}}