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.
- Cómo obtener una vista previa de Custom Font Android Studio (con caligrafía)
- "La conversión al formato Dalvik falló con error 1" después de la actualización a ADT 14
- ¿Proguard.cfg es necesario para proyectos de biblioteca?
- ProGuard en AndroidStudio: ¿Cómo obtener archivos .aar de biblioteca ofuscada de una versión de lanzamiento de proyecto de varios módulos?
- ¿Es posible obtener el contexto de la aplicación en un proyecto de biblioteca de Android?
¿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.
- Android Studio Gradle nuevo "aplicar plugin"
- ¿Cómo implementar la función .get con FutureTask o BackgroundTask usando android?
- ¿Cómo incluir dependencias en el proyecto de gradol de la biblioteca android?
- Actividad de anulación del proyecto de la Biblioteca de Android
- No se puede encontrar la opción de módulo de importación en la estructura del proyecto (Android Studio 0.3.4 - 0.5.2)
- Cuando se utiliza un proyecto de biblioteca de Android, ¿cómo se hace referencia a los recursos xml correctamente?
- Aplicación de la biblioteca multidex para Android
- ¿Cómo puedo importar una biblioteca de Android y usarla tanto en el código de producción como en las pruebas?
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 obtener todas las imágenes y fotos de mi dispositivo android no de sdcard?
- Grilla de datos completamente funcional en Android