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