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

He mirado la documentación para la construcción con Gradle, pero todavía no estoy seguro de cuál es la diferencia entre compileSdkVersion y targetSdkVersion .

Todo lo que dice es:

La propiedad compileSdkVersion especifica el destino 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 utilizada en la creación de la aplicación, mientras que targetSdkVersion es el "nivel de API al que apunta la aplicación" . (Si este fuera el caso, asumiría que compileSdkVersion debe ser mayor o igual que el targetSdkVersion ?
  2. Quieren decir lo mismo. "Objetivo de compilación" == "el nivel de API al que apunta la aplicación"
  3. ¿Algo más?

Veo que esta pregunta se ha hecho antes, pero la una respuesta sólo cita el documento, que es lo que no está claro para mí.

6 Solutions collect form web for “¿Cuál es la diferencia entre compileSdkVersion y targetSdkVersion?”

CompileSdkVersion

compileSdkVersion es la versión de la API a la que se compila la aplicación. Esto significa que puede utilizar 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 utilizar las funciones de API 16 pero establece compileSdkVersion en 15, obtendrá un error de compilación. Si establece compileSdkVersion en 16, puede ejecutar la aplicación en un dispositivo API 15 siempre y cuando las rutas de ejecución de la aplicación no intenten invocar ninguna API específica de la API 16.

TargetSdkVersion

targetSdkVersion no tiene nada que ver con la forma en que se compila su aplicación o las API que puede utilizar. Se supone que targetSdkVersion indica que has probado tu aplicación en (presumiblemente hasta e incluyendo) la versión que especificas. Esto es más como una certificación o firmar apagado usted está dando el OS androide como una indirecta a cómo debe manejar su app en términos de características del OS.

Por ejemplo, como indica la documentación :

Por ejemplo, si establece este valor como "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 de otra forma se ejecuta en el contexto del sistema operativo basado en este valor. Hay algunos otros ejemplos conocidos que son influenciados por este valor y que la lista es probable que sólo aumentan con el tiempo.

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

Como guía oneliner:

 minSdkVersion <= targetSdkVersion <= compileSdkVersion 

Idealmente:

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

Leer más de este gran post de Ian Lake

La compileSdkVersion debería ser la versión estable más reciente. La targetSdkVersion debe ser completamente probada y menor o igual a compileSdkVersion .

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

Introduzca aquí la descripción de la imagen

Verá esto en su archivo build.gradle :

Introduzca aquí la descripción de la imagen

targetSdkVersion: contiene la información que su aplicación incluye después del proceso de desarrollo en el almacén de aplicaciones que le permite TARGET the SPECIFIED version of the Android platform . Dependiendo de la funcionalidad de su aplicación, puede orientar versiones de API inferiores a las actuales. Por ejemplo, puede orientar la API 18 incluso si la versión actual es 23.

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

Hasta tarde en el juego .. y hay varias respuestas grandes arriba – esencialmente, que la compiledVersion es la versión de la API de la aplicación se compila contra, mientras que la targetSdkVersion indica la versión que la aplicación fue probada en contra.

Quisiera complementar esas respuestas con las siguientes notas:

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

    • Si el dispositivo ejecuta Android 6.0 (nivel 23 de API) o superior y la targetSdkVersion la aplicación es 23 o superior, la aplicación solicita permisos del usuario en tiempo de ejecución.
    • Si el dispositivo ejecuta Android 5.1 (API nivel 22) o inferior, o targetSdkVersion la aplicación es 22 o inferior, el sistema le pide al usuario conceder los permisos cuando el usuario instala la aplicación.
  2. Si la versión compiledVersion es superior a la versión declarada por targetSdkVersion su aplicación, el sistema puede habilitar comportamientos de compatibilidad para asegurarse de que su aplicación siga funcionando de la manera que espera. ( Ref )

  3. Con cada nuevo lanzamiento de Android …

    • targetSdkVersion debe incrementar para que coincida con el nivel de API más reciente, a continuación, probar a fondo su aplicación en la versión de la plataforma correspondiente
    • compiledVersion , por otra parte, no necesita ser cambiado a menos que usted esté agregando las características exclusivas a la nueva versión de la plataforma
    • Como resultado, aunque targetSdkVersion suele ser (inicialmente) menor que la compiledVersion , no es raro ver una aplicación bien mantenida / establecida con targetSdkVersion > compiledVersion

Veo un montón de diferencias acerca de compiledSdkVersion en las respuestas anteriores, así que voy a tratar de aclarar un poco aquí, después de la página web de android.

A – Lo que Android dice

Según https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :

Selección de una versión de plataforma y un nivel de API Cuando esté desarrollando su aplicación, tendrá que elegir la versión de plataforma con la que compilará la aplicación. En general, debe compilar su aplicación con la versión más baja posible de la plataforma que su aplicación puede soportar.

Por lo tanto, esta sería la orden correcta de acuerdo a Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B – Lo que otros también dicen

Algunas personas prefieren utilizar siempre la más alta compiladaSkdVersion disponible. Es porque se basarán en sugerencias de código para comprobar si están utilizando funciones de API más nuevas que minSdkVersion, cambiando el código para no usarlas o comprobando la versión de la API de usuario en tiempo de ejecución para usarlas condicionalmente con versiones anteriores de API.

Las sugerencias sobre usos obsoletos también aparecerían en el código, permitiéndole saber que algo está obsoleto en los niveles de API más recientes, por lo que puede reaccionar en consecuencia si lo desea.

Por lo tanto, este sería el orden correcto de acuerdo con otros:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

¿Qué hacer?

Depende de usted y de su aplicación.

Si planea ofrecer diferentes funciones de API de acuerdo con el nivel de API del usuario en tiempo de ejecución, utilice la opción B. Obtendrá sugerencias sobre las características que utiliza durante la codificación. Sólo asegúrese de que nunca utilice funciones de API más recientes que minSdkVersion sin comprobar el nivel de API del usuario en tiempo de ejecución, de lo contrario su aplicación se bloqueará. Este enfoque también tiene el beneficio de aprender lo nuevo y lo que es viejo mientras codifica.

Si ya sabes lo que es nuevo o viejo y estás desarrollando una aplicación de una sola vez que con seguridad nunca se actualizará, o estás seguro de que no vas a ofrecer nuevas características de la API condicionalmente, entonces usa la opción A. No te molestará Con sugerencias obsoletas y nunca podrás utilizar las funciones más recientes de la API, incluso si estás tentado de hacerlo.

  • ¿Cómo hacer una aplicación de chat en android?
  • NFC pilas en el sistema operativo Android
  • ¿Por qué instalar Android LatinIME obtiene Fallo?
  • Android: TableLayout alinear la primera columna a la derecha, la segunda a la izquierda
  • Facebook SDK 7.8.0 Error: get_activeBuildTarget no puede ser llamado desde un constructor ScriptableObject
  • Excepción nullpointer de admob 6.2.1
  • ¿Cuál es la diferencia entre ADT y Android SDK?
  • SDK de Android: no escala en el centro del tacto
  • Android Marshmallow 6.0.1 Análisis Bluetooth Devuelto Sin Resultados
  • Android Framework?
  • Android Studio: Error al cargar dx.jar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.