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") } } } } pmd { toolVersion = "6.55.0" }
build.gradle nextcloud/android Archive du 17/04/2023 le 17/04/2023
- Désactiver des règles spécifiques
Il faut passer par un fichier de config spécifique.
- rules.xml
<?xml version="1.0"?> <ruleset name="Custom Rules" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> <description> My custom rules </description> <rule ref="category/java/bestpractices.xml"> </rule> <rule ref="category/java/codestyle.xml"> </rule> <rule ref="category/java/design.xml"> </rule> <rule ref="category/java/documentation.xml"> <exclude name="CommentRequired"/> </rule> <rule ref="category/java/errorprone.xml"> </rule> <rule ref="category/java/multithreading.xml"> </rule> <rule ref="category/java/performance.xml"> </rule> <rule ref="category/java/security.xml"> </rule> </ruleset>
Et mettre dans build.gradle
:
ruleSetFiles = files('config/pmd/rules.xml')
Making rulesets Archive du 25/11/2022 le 12/05/2023
- Ignorer certaines erreurs
Ajouter sur la ligne indiquée par pmd le commentaire NOPMD
Suppressing warnings Archive du 27/04/2023 le 16/05/2023
===checkstyle===
* 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) :
<code groovy>
plugins {
id 'checkstyle'
}
</code>
et une configuration :
<code groovy>
checkstyle {
toolVersion '10.9.3'
configFile file(“config/checkstyle/checkstyle.xml”)
}
</code>
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
<code>
lib:checkstyleMain - Run Checkstyle analysis for main classes
lib:checkstyleTest - Run Checkstyle analysis for test classes
</code>
* Tâches manquantes
Dans le cas d'un projet Android avec du ndk, je n'ai pas réussi à faire fonctionner
checkstyle de façon native. Il faut alors forcer la création de la tâche.
<code groovy>
android {
tasks.register('checkstyleMain', Checkstyle) {
configFile = file('config/checkstyle/checkstyle.xml')
source 'src'
include '/*.java'
exclude '/build/**'
classpath = files()
}
}
checkstyle {
toolVersion '10.9.3'
}
</code>
Le fichier
checkstyle peut se récupérer directement dans le code de l'application (penser à bien configurer
toolVersion) : google_checks.xml
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