targetsdkversion niveles minsdkversion android sdk android-gradle android-build

android - niveles - targetsdkversion 21



¿Cuál es la diferencia entre compileSdkVersion y targetSdkVersion? (9)

He consultado la documentation para construir con Gradle, pero aún no estoy seguro de cuál es la diferencia entre compileSdkVersion y targetSdkVersion .

Todo lo que dice es:

La propiedad compileSdkVersion especifica el objetivo de compilación.

Bueno, ¿cuál es el "objetivo de compilación"?

Veo dos formas posibles de interpretar esto:

  1. compileSdkVersion es la versión del compilador utilizado en la creación de la aplicación, mientras que targetSdkVersion es el "nivel de API al que se dirige la aplicación" . (Si este fuera el caso, asumiría que compileSdkVersion debe ser mayor o igual que targetSdkVersion ?
  2. Quieren decir lo mismo. "destino de compilación" == "el nivel de API al que se dirige la aplicación"
  3. ¿Algo más?

Veo que esta pregunta se ha hecho antes, pero la única respuesta es solo una cita del documento, que es lo que no está claro para mí.


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 prueba y usa las características de la 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 siempre que las rutas de ejecución de su aplicación no intenten invocar ninguna API específica para API 16.

targetSdkVersion

targetSdkVersion no tiene nada que ver con la forma en que se compila su aplicación ni con las API que puede utilizar. Se supone que targetSdkVersion indica que ha probado su aplicación (presumiblemente hasta e incluyendo) la versión que especifique. Esto se parece más a una certificación o aprobación que está dando al sistema operativo Android como una sugerencia de cómo debería manejar su aplicación en términos de características del sistema operativo.

Por ejemplo, como indica la documentación :

Por ejemplo, al establecer este valor en "11" o superior, el sistema puede aplicar un nuevo tema predeterminado (Holo) a su aplicación cuando se ejecuta en Android 3.0 o superior ...

El sistema operativo Android, en tiempo de ejecución , puede cambiar la forma en que su aplicación se estiliza o se ejecuta en el contexto del sistema operativo en función de este valor. Hay algunos otros ejemplos conocidos que están influenciados por este valor y es probable que esa lista aumente solo con el tiempo.

Para todos los propósitos prácticos, la mayoría de las aplicaciones querrán establecer targetSdkVersion a la última versión lanzada de la API. Esto asegurará que su aplicación se vea lo mejor posible en los dispositivos Android más recientes. Si no especifica targetSdkVersion , el targetSdkVersion predeterminado es minSdkVersion .


El compileSdkVersion debe ser la versión estable más reciente. El targetSdkVersion debe ser probado completamente y menor o igual que compileSdkVersion .


La configuración de la aplicación de las propiedades de un proyecto de Android en Visual Studio 2017 (15.8.5) parece tenerlas combinadas o algo así:


Mis 2 centavos: compile contra cualquier versión del SDK, pero tenga cuidado de no llamar a ninguna API que su "versión mínima de SDK" no admita. Eso significa que "podría" compilar contra la última versión del SDK.

En cuanto a la "versión de destino", simplemente se refiere a lo que planeaba apuntar en primer lugar y posiblemente ha probado en contra. Si no ha realizado la diligencia debida, esta es la forma de informar a Android de que necesita realizar algunas comprobaciones adicionales antes de que implemente su aplicación de destino "Lollipop" en "Oreo".

Por lo tanto, la "versión de destino" obviamente no es más baja que su "versión de SDK mínima", pero no puede ser más alta que su "versión compilada".


Sin responder a sus preguntas directas, ya que ya hay muchas respuestas detalladas, pero vale la pena mencionar que, al contrario de la documentación de Android, Android Studio sugiere utilizar la misma versión para compileSDKVersion y targetSDKVersion .


Tarde en el juego ... y hay varias respuestas geniales arriba: esencialmente, que compileSdkVersion es la versión de la API con la que se compila la aplicación, mientras que targetSdkVersion indica la versión con la que se probó la aplicación.

Me gustaría complementar esas respuestas con las siguientes notas:

  1. Ese targetSdkVersion afecta la forma en que se solicitan los permisos :

    • Si el dispositivo ejecuta Android 6.0 (nivel de API 23) o superior, y targetSdkVersion la aplicación es de 23 o superior, la aplicación solicita permisos del usuario en tiempo de ejecución.
    • Si el dispositivo ejecuta Android 5.1 (nivel de API 22) o inferior, o targetSdkVersion la aplicación es 22 o inferior, el sistema solicita al usuario que otorgue los permisos cuando el usuario instale la aplicación.
  2. Si el compileSdkVersion es más alto que la versión declarada por targetSdkVersion su aplicación, el sistema puede habilitar comportamientos de compatibilidad para garantizar que su aplicación continúe funcionando de la manera que espera. ( ref )

  3. Con cada nueva versión de Android ...

    • targetSdkVersion debe incrementarse para coincidir con el último nivel de API, luego probar su aplicación en la versión de la plataforma correspondiente
    • compileSdkVersion , por otro lado, no necesita ser cambiado a menos que esté agregando características exclusivas a la nueva versión de la plataforma
    • Como resultado, aunque targetSdkVersion es a menudo (inicialmente) menor que compileSdkVersion , no es raro ver una aplicación bien mantenida / establecida con targetSdkVersion > compileSdkVersion

Veo muchas diferencias sobre compiledSdkVersion en respuestas anteriores, así que intentaré aclarar un poco aquí, siguiendo la página web de Android.

A - Lo que dice Android

Según ref :

Selección de la versión de la plataforma y el nivel de API Cuando esté desarrollando su aplicación, deberá elegir la versión de la plataforma con la que compilará la aplicación. En general, debe compilar su aplicación contra la versión más baja posible de la plataforma que su aplicación puede admitir.

Por lo tanto, este sería el orden correcto según Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - Lo que otros también dicen

Algunas personas prefieren usar siempre la más alta compilaciónSkdVersion disponible. Esto se debe a que se basarán en sugerencias de código para verificar si están usando funciones de API más nuevas que minSdkVersion, ya sea cambiando el código para no usarlas o verificando la versión de la API del usuario en tiempo de ejecución para usarlas de forma condicional con versiones anteriores para las versiones de API más antiguas.

Las sugerencias sobre usos en desuso también aparecerían en el código, lo que le permitirá saber que algo está en desuso en los nuevos niveles de API, por lo que puede reaccionar en consecuencia si lo desea.

Entonces, este sería el orden correcto de acuerdo a otros:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

¿Qué hacer?

Depende de usted y su aplicación.

Si planea ofrecer diferentes funciones de API de acuerdo con el nivel de API del usuario en tiempo de ejecución, use la opción B. Obtendrá sugerencias sobre las funciones que usa mientras codifica. Solo asegúrate de nunca usar las nuevas características de la API que minSdkVersion sin verificar el nivel de API del usuario en el tiempo de ejecución, de lo contrario, tu aplicación se bloqueará. Este enfoque también tiene la ventaja de aprender lo que es nuevo y lo que es antiguo en la codificación.

Si ya sabe lo que es nuevo o antiguo y está desarrollando una aplicación de una sola vez que seguramente nunca se actualizará, o si está seguro de que no va a ofrecer nuevas funciones de API de forma condicional, entonces use la opción A. No se molestará con sugerencias en desuso y nunca podrá usar las características más nuevas de la API, incluso si está tentado a hacerlo.


The CompileSdkVersion es la versión de la plataforma SDK con la que trabaja su aplicación para la compilación, etc. DURANTE el proceso de desarrollo (siempre debe usar la última versión) Esto se entrega con la versión API que está usando

Verás esto en tu archivo build.gradle :

targetSdkVersion: contiene la información con la que se envía su aplicación DESPUÉS del proceso de desarrollo a la tienda de aplicaciones que le permite TARGET the SPECIFIED version of the Android platform . Dependiendo de la funcionalidad de su aplicación, puede apuntar a versiones de API más bajas que las actuales. Por ejemplo, puede apuntar a API 18 incluso si la versión actual es 23.

Echa un vistazo a esta página oficial de Google.


Como guía oneliner:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Idealmente:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

Lee más de este gran post por Ian Lake