Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Establece la versión de tu app

El control de versiones es un componente crítico de la estrategia de actualización y mantenimiento de tu app. Su importancia se debe a lo siguiente:

  • Los usuarios deben contar con información específica sobre la versión de la app instalada en sus dispositivos y las versiones de actualización disponibles para su instalación.
  • Otras apps, incluidas las que publiques como un paquete, deben realizar consultas al sistema respecto de la versión de tu app para determinar la compatibilidad e identificar dependencias.
  • Es posible que los servicios a través de los cuales publicarás tus apps también deban consultar sobre su versión, a fin de poder mostrarla a los usuarios. También puede ser necesario que un servicio de publicación deba verificar la versión de tu app para determinar la compatibilidad y establecer relaciones de cambio a versiones anteriores o posteriores.

El sistema Android usa la información de la versión de tu app para evitar que regrese a una versión anterior. No la utiliza para imponer restricciones sobre actualizaciones o sobre compatibilidad con apps de terceros. Tu app debe aplicar todas las restricciones de versiones, y debes informarles a los usuarios sobre ellas.

El sistema Android sí impone la compatibilidad con la versión del sistema según se expresa en la configuración de minSdkVersion, en los archivos de compilación. Esta configuración permite que una app especifique el nivel mínimo de API de sistema que admite. Para obtener más información, consulta Cómo especificar la versión mínima de API del sistema.

Cómo establecer información sobre la versión de la app

Para definir la información de la versión de tu app, establece los valores de la configuración de la versión en los archivos de compilación de Gradle. Esos valores se combinan en el archivo de manifiesto de tu app durante el proceso de compilación.

Nota: Si tu app define su versión directamente en el elemento <manifest>, los valores de versión del archivo de compilación de Gradle anularán la configuración del manifiesto. Además, definir esas configuraciones en los archivos de compilación de Gradle te permite especificar valores diferentes para distintas versiones de tu app. Si quieres obtener una mayor flexibilidad y evitar una posible anulación cuando se integre el manifiesto, deberás quitar esos atributos del elemento <manifest> y definir la configuración de tu versión en los archivos de compilación de Gradle.

Hay dos configuraciones disponibles, y debes definir siempre los valores para ambas:

  • versionCode: Es el valor entero positivo que se usa como número de versión interna. Solo se utiliza para determinar si una versión es más reciente que otra; los números más altos indican versiones más recientes. Este no es el número de versión que se muestra a los usuarios, que se establece a través de la configuración versionName a continuación. El sistema Android usa el valor versionCode para evitar que la app regrese a una versión anterior, ya que no permite que los usuarios instalen un APK con un versionCode inferior a la versión que está instalada actualmente en su dispositivo.

    El valor es entero positivo, por lo que otras apps pueden evaluarlo de manera programática; por ejemplo, para comprobar una relación de cambio a versiones anteriores o posteriores. Puedes establecer el valor en cualquier número entero que desees. Sin embargo, debes asegurarte de que en cada versión de tu app que siga se use un valor mayor. No puedes subir un APK a Play Store con un valor de versionCode que ya hayas usado para una versión anterior.

    Nota: En algunas situaciones específicas, es posible que te convenga subir una versión de tu app con un valor de versionCode inferior al de la versión más reciente. Por ejemplo, si publicas varios APK, es posible que hayas configurado previamente rangos de versionCode para archivos APK específicos. Para descubrir cómo asignar valores de versionCode para varios APK, consulta Compatibilidad con varios APK.

    Por lo general, lanzas la primera versión de tu app con el versionCode establecido en 1 y, luego, aumentarás el valor de manera continua en cada versión, independientemente de si la versión tiene cambios importantes o menores. Eso significa que el valor de versionCode no tiene necesariamente una fuerte semejanza con la versión de lanzamiento de la app que ve el usuario (consulta versionName a continuación). Los servicios de apps y publicación no deben mostrar el valor de la versión a los usuarios.

    Advertencia: El valor máximo que permite Google Play para versionCode es 2,100,000,000.

  • versionName: Es una string que se usa como el número de versión que se muestra a los usuarios. Esta configuración se puede especificar como una string sin procesar o como una referencia a un recurso de string.

    El valor es una string, por lo que puedes describir la versión de la app como una string <major>.<minor>.<point> o como cualquier otro tipo de identificador de versión absoluto o relativo. El objeto versionName no tiene otro propósito que mostrarse ante los usuarios.

Puedes definir los valores predeterminados para esas configuraciones incluyéndolos en el bloque defaultConfig {}, anidado dentro del bloque android {} del archivo build.gradle de tu módulo. Luego, puedes anular esos valores predeterminados para diferentes versiones de tu app definiendo valores separados de tipos de compilación individuales o variantes de productos. En el siguiente archivo build.gradle, se muestran las configuraciones versionCode y versionName en el bloque defaultConfig {}, así como en el bloque productFlavors {}.

android {
  ...
  defaultConfig {
    ...
    versionCode 2
    versionName "1.1"
  }
  productFlavors {
    demo {
      ...
      versionName "1.1-demo"
    }
    full {
      ...
    }
  }
}

En el bloque defaultConfig {} de este ejemplo, el valor versionCode indica que el APK actual contiene la segunda versión de la app, y en la string versionName, se especifica que aparecerá ante los usuarios como versión 1.1. En este archivo build.gradle, también se definen dos variantes de producto: "demo" y "full". Debido a que la variante de producto "demo" define versionName como "1.1-demo", la compilación "demo" usa este versionName en lugar del valor predeterminado. El bloque de variante de producto "full" no define versionName. Por lo tanto, este usa el valor predeterminado de "1.1".

El framework de Android proporciona una API para permitirte realizar consultas al sistema sobre información de la versión de tu app. Para obtener información sobre la versión, usa el método getPackageInfo(java.lang.String, int) de PackageManager.

Cómo especificar los requisitos de nivel de API

Si tu app requiere una versión mínima específica de la plataforma de Android, puedes especificar ese requisito como configuración de nivel de API en el archivo build.gradle de la app. Durante el proceso de compilación, se combinan las configuraciones con el archivo de manifiesto de tu app. Al especificar los requisitos de nivel de API, garantizas que tu app pueda instalarse únicamente en dispositivos que ejecuten una versión compatible de la plataforma Android.

Nota: Si especificas los requisitos de nivel de API directamente en el archivo de manifiesto de tu app, la configuración correspondiente de los archivos de compilación anulará la del archivo de manifiesto. Además, definir esos parámetros de configuración en los archivos de compilación de Gradle te permite especificar valores diferentes para las diferentes versiones de tu app. Debes quitar esos atributos del elemento <uses-sdk> y definir la configuración de nivel de API en los archivos de compilación de Gradle para tener mayor flexibilidad y evitar que una configuración anule a otra.

Hay dos configuraciones de nivel de API disponibles:

  • minSdkVersion: Es la versión mínima de la plataforma Android en la que podrá ejecutarse la app, especificada por el identificador de nivel de API de la plataforma.
  • targetSdkVersion: Especifica el nivel de API en el que la app está diseñada para ejecutarse. En algunos casos, eso permite que la app use elementos del manifiesto o comportamientos definidos en el nivel de API de destino, en vez de limitarse a usar únicamente aquellos definidos por el nivel mínimo de API.

Para especificar los requisitos de nivel de API predeterminados en un archivo build.gradle, agrega una o más de las configuraciones anteriores al bloque defaultConfig {}, anidado dentro de android {}. También puedes agregar las configuraciones a los tipos de compilación o a las variantes de productos a fin de anular esos valores predeterminados para versiones diferentes de tu app. En el siguiente archivo build.gradle, se especifican las configuraciones predeterminadas de minSdkVersion y targetSdkVersion en el bloque defaultConfig {} y anula minSdkVersion para una variante de producto.

android {
  ...
  defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 24
  }
  productFlavors {
    main {
      ...
    }
    afterLollipop {
      ...
      minSdkVersion 21
    }
  }
}

Cuando te preparas para instalar tu app, el sistema verifica el valor de esas configuraciones y las compara con la versión del sistema. Si el valor de minSdkVersion es superior al de la versión del sistema, este evita que se instale la app.

Si no especificas esas configuraciones, el sistema determinará que la app es compatible con todas las versiones de la plataforma.

Para obtener más información, consulta la documentación sobre el elemento manifiesto <uses-sdk> y el documento Niveles de API. Para ver configuraciones de compilación Gradle, consulta Cómo configurar variantes de compilación.