Versionado Semántico en Android: Mejores Prácticas para Desarrolladores

Introducción al Versionado Semántico

El versionado semántico (SemVer) es un sistema de versionado que utiliza un formato de tres números: MAJOR.MINOR.PATCH. En el contexto de Android, este sistema cobra especial importancia debido a las particularidades del ecosistema móvil y las políticas de Google Play Store.

¿Por qué es importante en Android?

Android maneja dos tipos de versiones diferentes:

Configuración en build.gradle

android {
    compileSdk 34

    defaultConfig {
        applicationId "com.arceapps.miapp"
        minSdk 24
        targetSdk 34
        versionCode 10203  // Formato: MMmmpp
        versionName "1.2.3"
    }
}

Estrategias de versionCode

Una estrategia efectiva es usar el formato MMmmpp donde:

Automatización con Gradle

Podemos automatizar el versionado usando propiedades de Gradle:

version.properties

VERSION_MAJOR=1
VERSION_MINOR=2
VERSION_PATCH=3

build.gradle

def versionPropsFile = file('version.properties')
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))

def vMajor = versionProps['VERSION_MAJOR'].toInteger()
def vMinor = versionProps['VERSION_MINOR'].toInteger()
def vPatch = versionProps['VERSION_PATCH'].toInteger()

android {
    defaultConfig {
        versionCode vMajor * 10000 + vMinor * 100 + vPatch
        versionName "${vMajor}.${vMinor}.${vPatch}"
    }
}

Consideraciones para Google Play

Google Play Store tiene requisitos específicos:

App Bundle vs APK

Con Android App Bundle, Google genera múltiples APKs optimizados. Cada uno debe tener el mismo versionCode, pero Google maneja internamente los códigos específicos.

Canales de distribución

Integración con CI/CD

En un flujo de integración continua, podemos automatizar el versionado:

# GitHub Actions example
name: Build and Deploy
on:
  push:
    tags:
      - 'v*'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Extract version
        run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV

      - name: Update version
        run: |
          ./gradlew updateVersion -PnewVersion=$VERSION

Mejores Prácticas

1. Consistencia en el equipo

Establecer reglas claras sobre cuándo incrementar cada número:

2. Documentación automática

Generar changelogs automáticamente basados en commits y PRs:

## [1.2.3] - 2025-08-25
### Added
- Nueva funcionalidad de notificaciones push
- Soporte para modo oscuro

### Fixed
- Corrección de crash al rotar pantalla
- Mejora en la sincronización de datos

3. Testing por versiones

Implementar tests que verifiquen la compatibilidad entre versiones, especialmente para:

Herramientas Recomendadas

Conclusión

El versionado semántico en Android requiere un enfoque híbrido que combine las mejores prácticas de SemVer con las particularidades de la plataforma. La clave está en la automatización y la consistencia en el equipo de desarrollo.

Implementar estas prácticas desde el inicio del proyecto ahorra tiempo y reduce errores en el futuro, especialmente cuando la aplicación crece en complejidad y número de usuarios.