Ceci est une ancienne révision du document !
Table des matières
Options en ligne de commande
Pour améliorer la vitesse de compilation, essayer d'activer les options --parallel --daemon --configuration-cache --build-cache
build.gradle
Android
Debug / Release
- Pour du
Debug
:
shrinkResources false minifyEnabled false debuggable true jniDebuggable true ndk { debugSymbolLevel 'FULL' } packagingOptions { doNotStrip '**/*.so' }
- Pour du
Release
:
minifyEnabled
se met à false
pour les librairies sinon le fichier classes.jar
sera vide et il ne sera pas possible de utiliser la librairie externe sous Android Studio.
shrinkResources
se met à false
pour une librairie.
shrinkResources
se met à false
si minifyEnabled
est déjà à false
.
minifyEnabled
se met à false
si on souhaite utilise jni
, y compris dans l'application principale en Android avec JNI qui utilise une librairie avec NDK.
shrinkResources true minifyEnabled true debuggable false jniDebuggable false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Attention, il existe les fichiers proguard-android-optimize.txt
et proguard-android.txt
. Les deux sont destinés au release. Le fichier optimize
ajoute des optimisations qui peuvent être incompatibles avec certains programmes. Shrink, obfuscate, and optimize your app, Archive du 19/09/2022 le 22/09/2022
- Non compatible
Le champ testBuildType
est commun entre debug
et release
. Il faut donc trouver un moyen de savoir si on veut en release
ou debug
.
android { testBuildType 'debug' gradle.startParameter.taskNames.each{value -> if (value.indexOf('ebug') != -1) testBuildType 'debug' else if (value.indexOf('elease') != -1) testBuildType 'release' } ...
API
NDK
- CMake
Il n'est pas possible de voir les logs de CMake pour la configuration et la compilation. Il faut aller voir directement les fichiers :
build/intermediates/cxx/*/*/logs/*/configure_stdout.txt build/intermediates/cxx/*/*/logs/*/configure_stderr.txt build/intermediates/cxx/*/*/logs/*/build_stdout_project.txt build/intermediates/cxx/*/*/logs/*/build_stderr_project.txt
Java
- Ajouter des options de compilation
android { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } } ...
Mise à jour
com.android.tools.build
et de la version de Gradle
Bien mettre à jour la classe com.android.tools.build
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
Ligne de commandes
Les paramètres des lignes de commande sont accessibles depuis un fichier build.gradle
.
project.gradle.startParameter.logLevel.name() == 'DEBUG'
permet de savoir si l'option--debug
a été appliquée.
Debug
Afficher des messages dans la console pour afficher la valeur des variables.
project.logger.lifecycle('my message visible by default')
plugins
pmd
- Quand tout va bien
Il suffit de rajouter en plus d'un plugin java
ou un de ses dérivés (java-library
, com.android.library
, com.android.application
) :
plugins { id 'pmd' }
et une configuration :
pmd { consoleOutput = true toolVersion = "6.55.0" ignoreFailures = true threads = 2 ruleSets = [ "category/java/bestpractices.xml", "category/java/codestyle.xml", "category/java/design.xml", "category/java/documentation.xml", "category/java/errorprone.xml", "category/java/multithreading.xml", "category/java/performance.xml", "category/java/security.xml"] }
Pour vérifier qu'il y a bien la bonne tâche d'ajoutée, il faut exécuter gradlew tasks
et voir un ou plusieurs tâches
lib:pmdMain - Run PMD analysis for main classes lib:pmdTest - Run PMD analysis for test classes
- Tâches manquantes
Dans le cas d'un projet Android avec du ndk, je n'ai pas réussi à faire fonctionner pmd
de façon native. Il faut alors forcer la création de la tâche.
android { tasks.register("pmd", Pmd) { consoleOutput = true ignoreFailures = true ruleSets = [ "category/java/bestpractices.xml", "category/java/codestyle.xml", "category/java/design.xml", "category/java/documentation.xml", "category/java/errorprone.xml", "category/java/multithreading.xml", "category/java/performance.xml", "category/java/security.xml"] source = 'src' include = '**/*.java' exclude = '**/build/**' threads = 2 reports { xml.enabled = false html.enabled = true html { destination = file("$project.buildDir/reports/pmd/pmd.html") } } } }
Par contre, je n'ai pas trouvé l'équivalent à toolVersion
.
build.gradle nextcloud/android Archive du 17/04/2023 le 17/04/2023
Erreurs
Certificats
Unable to find valid certification path to requested target
C'est évidemment un problème de certificat à cause d'un serveur faisant du DPI
(Deep Packet Inspection
).
Il faut l'installer dans la machine virtuelle Java. Faire également la même chose pour Android Studio.
Regarder le contenu de la variable JAVA_HOME
(C:\jdk-11.0.15+10
par exemple).
Aller dans le dossier C:\jdk-11.0.15+10\lib\security
en ligne de commande.
Et lancer la commande ../../bin/keytool -importcert -file /path/to/your/certificate/my-root-ca-cert.cer -keystore cacerts -storepass changeit -noprompt
Avec changeit
le mot de passe par défaut et my-root-ca-cert.cer
le certificat du serveur DPI
.
Il est nécessaire de redémarrer la session car l'application gradle
tourne peut-être en arrière plan.
Android Studio - Unable to find valid certification path to requested target Archive du 02/11/2014 le 21/02/2023