¿Cuál es la diferencia entre la versión mínima del SDK / la versión del SDK de destino y la versión del SDK de compilación?

214

¿Cuáles son las diferencias entre "min sdk version / target sdk version" y "compile sdk version"? Sé lo que significa min y target sdk, pero ¿qué significa compilar la versión sdk?

En Eclipse, tengo min / max y target sdk, pero en android studio existen estas tres configuraciones.

Tobias
fuente
Actualmente estoy trabajando en una aplicación donde utilicé targetsdkversion como 12 y todos mis diseños funcionan de manera anormal, luego lo cambio de nuevo a 23 y funciona de maravilla, así que creo que la versión de blancosdk debe ser siempre la misma que la versión compilada
Shahid Sarwar

Respuestas:

232

La versión min sdk es la primera versión del SDK de Android en la que se puede ejecutar su aplicación. Por lo general, esto se debe a un problema con las API anteriores, la falta de funcionalidad o algún otro problema de comportamiento.

La versión sdk de destino es la versión en la que se apuntó su aplicación para ejecutarse. Idealmente, esto se debe a algún tipo de condiciones de ejecución óptimas. Si tuviera que "hacer su aplicación para la versión 19", aquí es donde se especificaría. Puede ejecutarse en versiones anteriores o posteriores, pero esto es a lo que apuntaba. Esto es principalmente para indicar qué tan actualizada es su aplicación para su uso en el mercado, etc.

La versión de compilación sdk es la versión de Android que usa su IDE (u otro medio de compilación, supongo) para crear su aplicación cuando publica un .apkarchivo. Esto es útil para probar su aplicación, ya que es una necesidad común compilar su aplicación a medida que la desarrolla. Como esta será la versión para compilar en un APK, naturalmente será la versión de su lanzamiento. Del mismo modo, es aconsejable que coincida con su versión de SDK de destino.

Mate
fuente
Mi versión sdk compilada y la versión sdk objetivo son las mismas. Eso es 21. Mi aplicación se bloquea cuando la ejecuto en dispositivos con un nivel API más bajo. Soy nuevo en Android, ¿cómo debo proceder ahora?
prgmrDev
2
@prgmrDev Si su aplicación falla en versiones inferiores a 21, probablemente debería configurar su versión mínima de SDK en 21. Esto en realidad no solucionará su aplicación en objetivos inferiores a 21, solo notará que su aplicación no es compatible con versiones inferiores. También tiene la opción de determinar qué es exactamente lo que está rompiendo su aplicación (qué cambió en la versión 21) y agregar soporte para ocuparse de esa dependencia, pero sospecho que será mucho trabajo y no estará dentro del alcance de un principiante de Android proyecto.
Matt
1
¿Qué sucede si configuro mi minSdkVersion = 14; targetSdkVersion = 23; y compilar SDK a 19?
thadeuszlay
55
@thadeuszlay su pregunta es irrelevante porque debe pensar un poco que si tiene como objetivo ejecutar la versión 23, ¿cómo es posible compilarla con 19? Siga la fórmula minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad
@Matt, ¿puede suceder que al usar compileVersion 26, por ejemplo, accidentalmente use una función o API de Java que no es compatible con la versión 21, que es min sdk? lo siento, realmente no
entiendo
83

La formula es

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion : es un marcador que define una versión mínima de Android en la que la aplicación podrá instalarse. Lint también lo utiliza para evitar llamar a una API que no existe. También tiene impacto en Build Time. Por lo tanto, puede usar los sabores de compilación para anular minSdkVersion al máximo durante el desarrollo. Ayudará a acelerar la compilación utilizando todas las mejoras que el equipo de Android nos brinda. Por ejemplo, algunas características de Java 8 están disponibles solo desde una versión específica de minSdkVersion.

targetSdkVersion : dice que el sistema Android activa cambios de comportamiento específicos.

Por ejemplo:

  • A partir de Android 6.0 (API nivel 23) Runtime Permissionsse introdujeron. Si establece targetSdkVersion22 o menos, su aplicación no le pide permiso a un usuario en tiempo de ejecución.

  • A partir de Android 8.0 (API nivel 26), todos notificationsdeben asignarse a un canal o no aparecerá. En los dispositivos que ejecutan Android 7.1 (API nivel 25) y versiones inferiores, los usuarios pueden administrar las notificaciones solo por aplicación (de hecho, cada aplicación solo tiene un canal en Android 7.1 y versiones inferiores).

  • A partir de Android 9 (API nivel 28) Web-based data directories separated by process,. Si targetSdkVersiontiene más de 28 años y crea varios WebViewen diferentes procesos, obtendrájava.lang.RuntimeException

compileSdkVersion : en realidad es la versión de la plataforma SDK y le dice a Gradle qué SDK de Android utiliza para compilar. Cuando desee utilizar nuevas funciones o depurar .javaarchivos del SDK de Android, debe encargarse de compileSdkVersion. Un ejemplo más es el uso de AndroidX que obliga a usar compileSdkVersion: el nivel 28. compileSdkVersion no está incluido en su APK : se usa exclusivamente en compile time. Cambiar su compileSdkVersion no cambia el comportamiento del tiempo de ejecución. Puede generar, por ejemplo, nuevas advertencias / errores del compilador. Por lo tanto, se recomienda encarecidamente que siempre compile con el último SDK. Obtendrá todos los beneficios de las nuevas comprobaciones de compilación en el código existente, evitará las API recientemente obsoletas y estará listo para usar nuevas API. Un hecho más escompileSdkVersion >= Support Library version

Puedes leer más sobre esto aquí . También le recomendaría que eche un vistazo al ejemplo de migración a Android 8.0.

yoAlex5
fuente
9
La mejor respuesta aquí porque en realidad explica la diferencia práctica entre targetSdkVersion y compileSdkVersion
Dean Wild
@ yoAlex5 Gracias por su respuesta. Veo muchos casos targetSdkVersion y compileSdkVersion son iguales. ¿Por qué Android hizo dos como separados? ¿No puede uno ser suficiente para manejar o hay alguna razón específica detrás de hacer dos campos separados?
Manju
@Manju puedes encontrar más en SO thread stackoverflow.com/questions/26694108/…
yoAlex5
@ yoAlex5 lo que quiere decir 'sistema Android para activar cambios de comportamiento específicos' ¿puede explicar?
k_kumar
@atishr 'cambios de comportamiento específicos' se enumeran en el bloque 'Por ejemplo'
yoAlex5
74

La versión min sdk es la versión mínima del sistema operativo Android requerida para ejecutar su aplicación.

La versión de SDK de destino es la versión de Android para la que se creó su aplicación.

La versión de compilación sdk es la versión de Android que las herramientas de compilación utilizan para compilar y compilar la aplicación con el fin de liberarla, ejecutarla o depurarla.

Por lo general, la versión sdk de compilación y la versión sdk de destino son las mismas.

anuraagy
fuente
23
¿Y cuando no son los mismos pros / contras?
powder366
4

compileSdkVersion : compileSdkVersion es la versión de la API con la que se compila la aplicación. Esto significa que puede usar las características de la API de Android incluidas en esa versión de la API (así como todas las versiones anteriores, obviamente). Si intenta usar las características de API 16 pero establece compileSdkVersion en 15, obtendrá un error de compilación. Si configura compileSdkVersion en 16, aún puede ejecutar la aplicación en un dispositivo API 15.

minSdkVersion : la versión min sdk es la versión mínima del sistema operativo Android requerida para ejecutar su aplicación.

targetSdkVersion : la versión de sdk de destino es la versión en la que se ejecuta su aplicación.

Vinay John
fuente