Buenas tardes amigos. Hemos preparado una traducción útil para futuros estudiantes del desarrollador de Android. Curso avanzado " . Nos complace compartir este material con usted.
Si está leyendo este artículo, significa que puede estar interesado en cosas como:
- ¿Qué significa el nivel API?
- ¿Cómo usar
compileSdkVersion
, minSdkVersion
o targetSdkVersion
? - ¿Cómo puedo garantizar que la aplicación funcionará correctamente en dispositivos con diferentes versiones del sistema operativo?

Todos estos conceptos están relacionados entre sí, y trataré de explicárselos en este artículo de una manera simple pero efectiva.
Para hacer esto, debe comprender la diferencia entre el
SDK y la
API y saber cuál es
el nivel de API en el ecosistema de Android.
Es cierto que en Android existe una relación 1: 1 entre el SDK y la API, y a menudo estos dos términos se usan como sinónimos, pero es importante comprender que esto no es lo mismo.
Es más correcto decir que para cada versión de Android hay un SDK y una API equivalente, así como el nivel de esta API.
SDK
Es sinónimo de
kit de desarrollo de software . Preste atención a la palabra "kit" (kit) ... solo consiste en un conjunto de varias herramientas, bibliotecas, documentación, ejemplos que ayudan a los desarrolladores a crear, depurar y ejecutar aplicaciones de Android. Se proporciona una API con el SDK.
Si abre el
SDK Manager en Android Studio, puede ver más claramente en qué consiste el SDK de Android.
La primera pestaña de
Platform SDK enumera los SDK de cada versión de Android.
Como se muestra en la imagen a continuación, el SDK de Android 9.0 (también conocido como Pie) contiene:
- Android SDK Platform 28 (esta es la API de framework).
- El código fuente para Android 28 (esta es una implementación de la API, como puedes ver, es opcional ... recuerda esto).
- y un montón de otras cosas ... por ejemplo, varias imágenes del sistema para el emulador de Android.
Descripción general del SDK en Android Studio SDK Manager.La segunda pestaña de las
Herramientas del
SDK muestra otras herramientas que también forman parte del SDK pero que son independientes de la versión de la plataforma. Esto significa que se pueden lanzar o actualizar por separado.
API
Es sinónimo de
interfaz de programación de aplicaciones . Es solo una interfaz, una capa de abstracción que proporciona un enlace entre dos "partes" diferentes de software. Funciona como un contrato entre un proveedor (por ejemplo, una biblioteca) y un consumidor (por ejemplo, una aplicación).
Este es un conjunto de definiciones formales, como clases, métodos, funciones, módulos, constantes, que otros desarrolladores pueden usar para escribir su propio código. Sin embargo, la API no incluye una implementación.
Nivel API
El nivel de API es un valor entero que identifica de forma exclusiva la versión de la API de framework ofrecida por la plataforma Android.
Por lo general, las actualizaciones de la API del marco de la plataforma están diseñadas para que la nueva versión de la API siga siendo compatible con versiones anteriores, por lo que la mayoría de los cambios en la nueva API son aditivos y las partes antiguas de la API se vuelven obsoletas pero no se eliminan.
Y ahora alguien puede preguntarse ...
si la API de Android no proporciona una implementación y el
SDK Manager ofrece un código fuente de API descargable opcional como parte del SDK, entonces, ¿dónde está la implementación correspondiente?
La respuesta es simple.
En el dispositivoVamos a resolverlo ...
Del código fuente al archivo APK
Por lo general, un proyecto de Android consta de código escrito por desarrolladores que utilizan la API de Android (módulo de aplicación), así como algunas otras bibliotecas / dependencias (archivos .jar, AAR, módulos, etc.) y recursos.
El proceso de compilación convierte el código escrito en Java o Kotlin, incluidas las dependencias (una de las razones para reducir su código), en el código de bytes DEX, y luego comprime todo en un archivo APK junto con los recursos. ¡En esta etapa, la implementación de la API no está incluida en el APK final!
Proceso de compilación: desarrolladores de AndroidArchivos DEX y Android Runtime
Arquitectura de Android - Desarrolladores de AndroidAndroid Runtime es el lugar donde se realiza todo el trabajo sucio y donde se ejecutan los archivos DEX. Se compone de dos componentes principales:
- Una máquina virtual para aprovechar la portabilidad del código y la independencia de la plataforma. Comenzando con Android 5.0 (Lollipop), el viejo tiempo de ejecución, Dalvik Virtual Machine, ha sido completamente reemplazado por el nuevo Android RunTime (ART). Dalvik usó el compilador JIT, mientras que ART usa la compilación AOT (antes de tiempo) más JIT para perfilar el código en tiempo de ejecución.
- Las bibliotecas base son bibliotecas estándar de Java y Android. En pocas palabras, aquí es donde se encuentra la implementación de la API.
La versión de la API disponible en este nivel corresponde a la versión de la plataforma Android en la que se ejecuta la aplicación.
Por ejemplo, si Android 9 (Pie) está instalado en el dispositivo real, todas las API hasta el nivel 28 están disponibles.
Si comprende los puntos clave de Android Runtime y cuál es el papel de la API, debería ser fácil comprender la
compatibilidad con compileSdkVersion
minSdkVersion
y
targetSdkVersion
, así como el uso de
compileSdkVersion
,
minSdkVersion
y
targetSdkVersion
.
compileSdkVersion
Este valor solo se usa para
indicarle a Gradle con qué versión del SDK debe compilar su aplicación. Esto permite a los desarrolladores acceder a todas las API disponibles hasta el nivel de API establecido para
compileSdkVersion
.
Compilar con el último SDK es muy recomendable:- Un alto nivel de API permite a los desarrolladores aprovechar la última API y las oportunidades que brindan las nuevas plataformas.
- Para usar la última versión de
SupportLibrary
, compileSdkVersion
debe coincidir con la versión de SupportLibrary
.
Por ejemplo, para usar
SupportLibrary-28.xx
,
compileSdkVersion
también debe ser 28.
- Para cambiar a AndroidX o usarlo, compileSdkVersion debe establecerse en al menos 28.
- estar listo para cumplir con los requisitos del nivel API objetivo de Google Play . Google anunció que cada año establecerá un nivel objetivo mínimo de API para nuevas aplicaciones y actualizaciones para difundir las nuevas versiones de Android al mercado de Google más rápidamente. Puede encontrar más información aquí y aquí .
Las aplicaciones de Android son compatibles con las nuevas versiones de la plataforma de Android, ya que los cambios en la API suelen ser aditivos, y la antigua API puede quedar obsoleta, pero no eliminarse.
Esto significa que la plataforma garantiza principalmente
la compatibilidad directa , y cuando ejecuta la aplicación en un dispositivo con un nivel de API más alto que el especificado en
compileSdkVersion
, no hay problemas en tiempo de ejecución, la aplicación funcionará como se esperaba Nuevas versiones de la plataforma.
Por ejemplo:
La aplicación +
compileSdkVersion =
26 y el método API
xyz()
introducido en el
nivel 26 de API pueden funcionar en un dispositivo con Android 8 Oreo (nivel 26 de API).
La misma aplicación puede funcionar en un dispositivo con Android 9 Pie (nivel de API 28), ya que el método API
xyz()
todavía está disponible en el nivel de API 28.
minSdkVersion
Este valor indica el nivel mínimo de API en el que se puede ejecutar la aplicación.
Este es un requisito mínimo. Si no se especifica, el valor predeterminado es 1 .
Los desarrolladores deben establecer el valor correcto y garantizar el correcto funcionamiento de la aplicación hasta este nivel de API. Esto se llama
compatibilidad con versiones anteriores .
Durante el desarrollo,
Lint
también advertirá a los desarrolladores cuando intenten usar cualquier API por debajo de la especificada en
minSdkVersion
.
¡Es muy importante no ignorar las advertencias y corregirlas!Para garantizar la
compatibilidad con versiones anteriores , los desarrolladores pueden verificar la versión de la plataforma en tiempo de ejecución y utilizar la nueva API en versiones más nuevas de la plataforma y la API anterior en versiones anteriores o, según el caso, utilizar algunas bibliotecas estáticas que brindan compatibilidad con versiones anteriores.
También es importante mencionar que Google Play Store usa este valor para determinar si la aplicación se puede instalar en un dispositivo específico comparando la versión de la plataforma del dispositivo con la aplicación
minSdkVersion
.
Los desarrolladores deben tener mucho cuidado al elegir este valor, ya que la plataforma no garantiza la compatibilidad con versiones anteriores.
Elegir el valor "correcto" para un proyecto también es una decisión comercial, ya que afecta el tamaño de la audiencia de la aplicación. Mira la
distribución de plataformas .
Por ejemplo:
La aplicación +
compileSdkVersion =
26 +
minSdkVersion
=
22 y el método API
xyz()
introducido en el nivel API 26 pueden funcionar en un dispositivo con Android 8 Oreo (nivel API 26).
La misma aplicación se puede instalar y ejecutar en un dispositivo más antiguo con Android 5.1 Lollipop (API nivel 22), donde el método API
xyz()
no existe. Si los desarrolladores no proporcionaron compatibilidad con versiones anteriores, ya sea mediante comprobaciones de tiempo de ejecución o mediante cualquier biblioteca, la aplicación se bloqueará tan pronto como intente acceder al método API
xyz()
.
targetSdkVersion
Este valor indica el nivel de API en el que se desarrolló la aplicación.
No lo confunda con
compileSdkVersion
. Este último se usa solo en tiempo de compilación y pone a disposición de los desarrolladores nuevas API. El primero, por el contrario, es parte del APK (así como
minSdkVersion
) y cambia el comportamiento del tiempo de ejecución. Esta es la forma en que los desarrolladores pueden controlar
la compatibilidad directa .
A veces puede haber algunos cambios de API en el sistema base que pueden afectar el comportamiento de la aplicación cuando se trabaja en un nuevo entorno de tiempo de ejecución.
El nivel de aplicación de destino incluye un comportamiento de tiempo de ejecución que es específico de la versión de la plataforma. Si la aplicación no está lista para admitir estos cambios en el comportamiento del tiempo de ejecución, es probable que falle.
Un ejemplo simple es el
Permiso de tiempo de ejecución , que se introdujo en Android 6 Marshmallow (API nivel 23).
Una aplicación se puede compilar utilizando una API de nivel 23, pero tiene una API de nivel 22 de destino si aún no está lista para admitir el nuevo modelo de permisos de tiempo de ejecución.
Por lo tanto, una aplicación aún puede ser compatible sin incluir un nuevo comportamiento de tiempo de ejecución.
En cualquier caso, como ya se mencionó, Google requiere que las aplicaciones cumplan con los nuevos requisitos del nivel de API objetivo, por lo que siempre debe tener alta prioridad para actualizar este valor.
Ahora, reuniéndolo todo, vemos una relación clara
minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
Tenga en cuenta que es muy recomendable que compile con el último nivel de API e intente utilizar
targetSdkVersion ==
compileSdkVersion .
Fuentes