Versión de mis propias bibliotecas de Android

Actualmente estoy desarrollando una biblioteca personalizada para Android.

Mi idea es tener una versión para la aplicación (actualmente estoy configurándola en el archivo build.gradle y funciona bien), y una versión diferente para la biblioteca.

¿Hay una mejor práctica para lograr esto sin tener los dos archivos build.gradle fusionados juntos?

Me pareció un par de preguntas similares en SO pero tenían 4 años y no muy servicial.

La solución para esto no es Git como usted probablemente ya se dio cuenta. OP desea externalizar una biblioteca, potencialmente como un medio para proporcionar una API a un tercero sin proporcionar el código fuente.

Esto no es trivial con Gradle, pero es factible.

Usted puede hacer esto en diferentes niveles, voy a explicar el más fácil y más sencillo.

Configuración del número de versión

Primero debe agregar una variable de version a su archivo gradle.properties . Puede establecer esta variable con una línea simple:

version=0.1.0-SNAPSHOT

Creación de una cadena de versiones

En su proyecto crear un archivo llamado versioning.gradle y pegar el código siguiente dentro (lo encontré en línea hace mucho tiempo, no tengo la fuente más):

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

Una vez que haya hecho esto, asegúrese de incluir el archivo versioning.gradle de su archivo build.gradle principal mediante la adición de apply from: '../versioning.gradle' cerca de donde se carga el complemento de Android.

A continuación, en su bloque defaultConfig, desea cambiar las variables de versión predeterminadas a los siguientes valores:

 versionCode buildVersionCode() versionName version 

Número de versión en el nombre de archivo de la biblioteca

Si realmente está construyendo una biblioteca de Android, entonces la salida esperada es un archivo .aar .

Por lo tanto, agregue el siguiente código gradle a su archivo build.gradle :

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

¡Y eso es! Su archivo de salida tendrá un nombre con el número de versión que especifique en el archivo gradle.proprties .

Advertencias

Esta versión de su biblioteca y / o API de una manera muy estática. Lo que significa que no hay manera de que un desarrollador obtener dinámicamente el número de versión a través de una llamada de método.

Asegúrese de tener también un método disponible que proporcione a los desarrolladores de clientes el número de versión Y asegúrese de mantener los dos en sincronización. Sólo entonces usted tiene una biblioteca adecuadamente versionada.

Por qué querrías hacer esto?

Si el problema es que debe ser capaz de tomar diferentes acciones en los programas que utilizan la biblioteca dependiendo de la versión, simplemente cree una constante final estática pública en algún lugar de la biblioteca.

Si la razón es cosmética (por ejemplo, para la presentación), simplemente póngala en su archivo Readme, Changelog o donde lo necesite. Desordenar los archivos de compilación para este propósito es una mala idea.


Basado en su explicación:

Mi recomendación es ponerlo en AndroidManifest.xml de la biblioteca en ese caso (android: versionCode and android: versionName). Esto es lo que Google hace con muchas de sus propias bibliotecas, y es inofensivo para la construcción.

  • Cómo pasar la clave de acceso api y la identificación de la transacción en authorize.net sdk para android?
  • EXCEPCIÓN FATAL: principal java.lang.UnsatisfiedLinkError en la biblioteca de Android Studio
  • Error al exportar la aplicación después de actualizar a Proguard 4.8
  • Integre el escáner de código ZXing QR sin instalar BarCode Scanner
  • Android Studio - Exportar la biblioteca de Android aar con gradle puro
  • Android Range SeekBar
  • Biblioteca de Android - Publica varias variantes en el repositorio de Maven local usando Gradle
  • Adición de biblioteca externa en el estudio de Android
  • Especificación del código / nombre de la versión de la biblioteca de Android
  • ¿Qué tan inteligente es Eclipse / ADT cuando se trata de Android Library Projects?
  • Tener dos o más proyectos de biblioteca y el proyecto principal en Android Development
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.