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:
-
compileSdkVersion
es la versión del compilador utilizado en la creación de la aplicación, mientras quetargetSdkVersion
es el "nivel de API al que se dirige la aplicación" . (Si este fuera el caso, asumiría quecompileSdkVersion
debe ser mayor o igual quetargetSdkVersion
? - Quieren decir lo mismo. "destino de compilación" == "el nivel de API al que se dirige la aplicación"
- ¿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
.
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".
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:
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.
- Si el dispositivo ejecuta Android 6.0 (nivel de API 23) o superior, y
Si el
compileSdkVersion
es más alto que la versión declarada portargetSdkVersion
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 )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 quecompileSdkVersion
, no es raro ver una aplicación bien mantenida / establecida contargetSdkVersion > 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)