Version de mes propres bibliothèques Android

Je développe actuellement une bibliothèque personnalisée pour Android.

Mon idée est d'avoir une version pour l'application (je la configure actuellement dans le fichier build.gradle et ça marche bien) et une version différente pour la bibliothèque.

Existe-t-il une meilleure pratique pour y parvenir sans avoir fusionné les deux fichiers build.gradle?

J'ai trouvé quelques questions similaires sur SO mais elles avaient 4 ans et pas très utiles.

  • PercentRelativeLayout, comment définir la hauteur par programme
  • Guide de l'utilisateur pour la première fois dans la bibliothèque Android
  • Quel est le format "adb screencap /sdcard/screenshot.raw"? (Sans drapeau "-p")
  • Partage d'une bibliothèque Android entre plusieurs applications Android à l'aide de Gradle
  • Dossier de dépendances Android supprimé accidentellement
  • NavigationView et ActionBarDrawerToggle
  • Comment puis-je modifier l'alignement initial d'une Android Snackbar de bas en haut?
  • Impossible d'instancier l'activité ... Causé par ClassNotFoundException
  • 2 Solutions collect form web for “Version de mes propres bibliothèques Android”

    La solution pour cela n'est pas Git comme vous l'avez probablement déjà compris. OP veut éditer une bibliothèque de manière externe , potentiellement comme un moyen de fournir une API à un tiers sans fournir le code source.

    Ce n'est pas trivial avec Gradle mais c'est faisable.

    Vous pouvez le faire à différents niveaux, je vais vous expliquer le plus simple et le plus simple.

    Définition du numéro de version

    D'abord, vous devez ajouter une variable de version à votre fichier gradle.properties . Vous pouvez définir cette variable avec un simple one-liner:

    version=0.1.0-SNAPSHOT

    Création d'une chaîne de version

    Dans votre projet, créez un fichier appelé versioning.gradle et collez le code suivant à l'intérieur (j'ai trouvé cela en ligne il y a longtemps, je n'ai plus la source):

     ext { /**    * Builds an Android version code from the version of the project.    * This is designed to handle the -SNAPSHOT and -RC format.    *    * Ie during development the version ends with -SNAPSHOT. As the code stabilizes and release nears    * one or many Release Candidates are tagged. These all end with "-RC1", "-RC2" etc.    * And the final release is without any suffix.    * @return    */ buildVersionCode = { //The rules is as follows: //-SNAPSHOT counts as 0 //-RC* counts as the RC number, ie 1 to 98 //final release counts as 99. //Thus you can only have 98 Release Candidates, which ought to be enough for everyone def candidate = "99" def (major, minor, patch) = version.toLowerCase().replaceAll('-', '').tokenize('.') if (patch.endsWith("snapshot")) { candidate = "0" patch = patch.replaceAll("[^0-9]","") } else { def rc (patch, rc) = patch.tokenize("rc") if (rc) { candidate = rc } } (major, minor, patch, candidate) = [major, minor, patch, candidate].collect{it.toInteger()} (major * 1000000) + (minor * 10000) + (patch * 100) + candidate; } } 

    Une fois que vous avez fait cela, assurez-vous d'inclure le fichier versioning.gradle à partir de votre fichier build.gradle principal en ajoutant apply from: '../versioning.gradle' près de l'endroit où le plugin Android est chargé.

    Ensuite, dans votre bloc defaultConfig, vous souhaitez modifier les variables de version par défaut aux valeurs suivantes:

     versionCode buildVersionCode() versionName version 

    Numéro de version dans le nom de fichier de la bibliothèque

    Si vous construisez vraiment une bibliothèque Android, la sortie attendue est un fichier .aar .

    Par conséquent, ajoutez le code gradle suivant à votre fichier build.gradle :

     libraryVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(".aar", "-${defaultConfig.versionName}.aar") ) } } 

    Et c'est tout! Votre fichier de sortie aura un nom avec le numéro de version que vous avez spécifié dans le fichier gradle.proprties .

    Mises en garde

    Cette version sera la version de votre bibliothèque et / ou API de manière très statique. Ce qui signifie qu'il n'y a aucun moyen pour un développeur d'obtenir dynamiquement le numéro de version via un appel de méthode.

    Assurez-vous également d'avoir une méthode disponible qui fournit aux développeurs clients le numéro de version ET assurez-vous de garder les deux en synchronisation. Seulement alors vous avez une bibliothèque correctement versionnée.

    Pourquoi voulez-vous faire cela?

    Si le problème est que vous devez pouvoir prendre différentes actions dans les programmes utilisant la bibliothèque en fonction de la version, créez simplement une constante définitive publique statique quelque part dans la bibliothèque.

    Si la raison est cosmétique (p. Ex., Pour la présentation), il suffit de la mettre dans votre Readme, Changelog ou partout où vous en avez besoin. Briser les fichiers de construction à cette fin est une mauvaise idée.


    Selon votre explication:

    Ma recommandation est de le mettre dans AndroidManifest.xml de la bibliothèque dans ce cas (android: versionCode et android: versionName). C'est ce que Google fait avec beaucoup de leurs propres bibliothèques, et il est inoffensif pour la construction.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.