He mirado la documentación para construir con Gradle, pero todavía no estoy seguro de cuál es la diferencia entre compileSdkVersion
y targetSdkVersion
.
Todo lo que dice es:
La
compileSdkVersion
propiedad 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 utilizada en la creación de la aplicación, mientras quetargetSdkVersion
es el "nivel API al que se dirige la aplicación" . (Si este fuera el caso, supongo quecompileSdkVersion
debe ser mayor o igual quetargetSdkVersion
?- Quieren decir lo mismo. "objetivo de compilación" == "el nivel de API al que se dirige la aplicación"
- ¿Algo más?
Veo que esta pregunta ya se ha hecho antes, pero la única respuesta solo cita el documento, que es lo que no está claro para mí.
android
sdk
android-gradle-plugin
android-build
coder123
fuente
fuente
Respuestas:
compileSdkVersion
Esta
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 utilizar las características de API 16 pero se establececompileSdkVersion
en 15, obtendrá un error de compilación. Si establececompileSdkVersion
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
No
targetSdkVersion
tiene nada que ver con cómo se compila su aplicación o qué API puede utilizar. SetargetSdkVersion
supone que indica que ha probado su aplicación en (presumiblemente hasta) la versión que especifique. Esto es más como una certificación o cierre de sesión que le está dando al sistema operativo Android como una pista sobre cómo debe manejar su aplicación en términos de características del sistema operativo.Por ejemplo, como dice la documentación :
El sistema operativo Android, en tiempo de ejecución , puede cambiar la forma en que su aplicación se estiliza o se ejecuta de otro modo 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 solo aumente con el tiempo.
Para todos los fines prácticos, la mayoría de las aplicaciones querrán configurar
targetSdkVersion
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 eltargetSdkVersion
, el valor predeterminado esminSdkVersion
.fuente
targetSdkVersion
muy probablemente será más altocompileSdkVersion
y con razón. Esto significa que, aunque diseñó una aplicación para apuntar a API 16, por ejemplo, todavía funciona bien en API 21 (Lollipop) y debetargetSdkVersion
pasar a 21 para indicar que está bien que el sistema operativo Android aplique cualquier estilo de Lollipop que pueda existe para su aplicación.compileSdkVersion
a una versión superior significaría que desea utilizar algunas API nuevas que solo se incluyen en esa versión en particular. Si no planea usar ninguna característica específica de Lollipop en su aplicación, entonces realmente (por lo general) no hay razón para establecerlacompileSdkVersion
en 21. Sin embargo, es probable que su aplicación funcione bien en API 21 tal como está, por lo que cambiatargetSdkVersion
para indicar que su aplicación se ejecuta como espera (objetivo) en API 21, pero no está utilizando ninguna API específica para 21 (compilación) y, por lo tanto,compileSdkVersion
puede permanecer en 15 en este ejemplo.Como guía oneliner:
Idealmente:
Lea más de esta gran publicación de Ian Lake
fuente
minSdkVersion
Significa que secan
ejecuta la aplicación de nivel de API de dispositivo más bajo ? ¿Presumiblemente porque usa ciertas API disponibles aminSdkVersion
partir de ahora?minSdkVersion
es 15 (que es ICS 4.0.3), los dispositivos con API 14 (que es ICS 4.0) no deberían poder instalar la aplicación. Y al menos por ahora, la aplicación se ejecutará el 15, 16, 17, 18, 19, (20, pero eso es para el viejo sistema operativo), 21, 22, 23, 24, 25, 26, 27, 28, y así en el futuro (probablemente)La
compileSdkVersion
debería ser la versión estable más nueva. EltargetSdkVersion
debe ser completamente probado y menos o igual acompileSdkVersion
.fuente
targetSdkVersion
. Por lo tanto,targetSdkVersion
debe ser el que ha probado y conocer el comportamiento exacto, y puede ser <= la última versión estable.compileSdkVersion
debería ser la versión estable más nueva' debería tener el sufijo 'de las cuales usa las características de la API'. No tiene sentido compilar con la API 27 (la última API estable de hoy) si solo usa características de versión de API más bajas. Sin embargo, la última versión estable podría incluir algunas características que mejoran automáticamente, por ejemplo, seguridad mejorada o compilación eficiente con compatibilidad con versiones anteriores. Por lo tanto, es aconsejable utilizar la última versión estable o al menos una versión estable reciente, pero "no debería" ser la última versión per se .Al final del juego ... y hay varias respuestas excelentes arriba, esencialmente, esa
compileSdkVersion
es la versión de la API con la que se compila la aplicación, mientras quetargetSdkVersion
indica la versión con la que se probó la aplicación.Me gustaría complementar esas respuestas con las siguientes notas:
Eso
targetSdkVersion
afecta la forma en que se solicitan los permisos :targetSdkVersion
es 23 o superior, la aplicación solicita permisos al usuario en tiempo de ejecución.targetSdkVersion
es 22 o inferior, el sistema le pide al usuario que otorgue los permisos cuando el usuario instala la aplicación.Si
compileSdkVersion
es superior a la versión declarada por su aplicacióntargetSdkVersion
, el sistema puede habilitar comportamientos de compatibilidad para garantizar que su aplicación continúe funcionando de la manera esperada. ( ref )Con cada nueva versión de Android ...
targetSdkVersion
debe incrementarse para que coincida con el último nivel de API, luego pruebe a fondo su aplicación en la versión de plataforma correspondientecompileSdkVersion
, por otro lado, no necesita ser cambiado a menos que esté agregando características exclusivas a la nueva versión de la plataformatargetSdkVersion
menudo es (inicialmente) menor que elcompileSdkVersion
, no es raro ver una aplicación bien mantenida / establecida contargetSdkVersion > compileSdkVersion
fuente
targetSdkVersion
, puede ver comportamientos de compatibilidad. No creo que tenga nada que ver con elcompileSdkVersion
.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) Esto se envía con la versión API que está usandoVerá esto en su
build.gradle
archivo:targetSdkVersion:
contiene la información que envía su aplicación DESPUÉS del proceso de desarrollo a la tienda de aplicaciones que lo permiteTARGET the SPECIFIED version of the Android platform
. Dependiendo de la funcionalidad de su aplicación, puede apuntar a versiones de API inferiores a la actual; 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 .
fuente
Veo muchas diferencias
compiledSdkVersion
en las respuestas anteriores, así que intentaré aclarar un poco aquí, siguiendo la página web de Android.A - Lo que dice Android
De acuerdo con https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :
Entonces, 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 versión compilada más alta disponible. Se debe a que dependerán de las sugerencias de código para verificar si están utilizando características API más nuevas que minSdkVersion, por lo tanto, cambiar el código para no usarlas o verificar la versión de la API del usuario en tiempo de ejecución para usarlas condicionalmente con retrocesos para versiones API más antiguas.
Las sugerencias sobre usos obsoletos también aparecerían en el código, lo que le permite saber que algo está obsoleto en los niveles de API más nuevos, para que pueda reaccionar en consecuencia si lo desea.
Entonces, este sería el orden correcto según 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á pistas sobre las funciones que usa durante la codificación. Solo asegúrate de nunca usar características API más nuevas que minSdkVersion sin verificar el nivel de API del usuario en tiempo de ejecución, de lo contrario tu aplicación se bloqueará. Este enfoque también tiene el beneficio de aprender qué hay de nuevo y qué hay de viejo mientras se codifica.
Si ya sabe qué hay de nuevo o viejo y está desarrollando una aplicación única que seguramente nunca se actualizará, o está seguro de que no va a ofrecer nuevas funciones API condicionalmente, entonces use la opción A. No se molestará con sugerencias desaprobadas y nunca podrá utilizar las nuevas funciones de la API, incluso si tiene la tentación de hacerlo.
fuente
<uses-sdk>
documentación es extremadamente vaga y ambigua.Mis 2 centavos: compile con cualquier versión del SDK, pero tenga cuidado de no llamar a ninguna API que no sea compatible con su "versión mínima del SDK". Eso significa que "podría" compilar con la última versión del SDK.
En cuanto a la "versión de destino", simplemente se refiere a lo que planeó apuntar en primer lugar y que posiblemente haya probado. Si no ha realizado la diligencia debida, esta es la manera de informar a Android que necesita realizar algunas verificaciones adicionales antes de implementar su aplicación dirigida "Lollipop", digamos "Oreo".
Por lo tanto, la "versión de destino" obviamente no es inferior a su "versión mínima de SDK", pero no puede ser superior a su "versión compilada".
fuente
No responde 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 usar la misma versión para
compileSDKVersion
ytargetSDKVersion
.fuente
compiledSdkVersion ==> qué versión de SDK debe compilar su código para bytecode (que usa en el entorno de desarrollo) punto: es mejor usar la última versión de SDK.
minSdkVersion ==> estos usos de elementos para la instalación del APK (se utiliza en el entorno de producción). Por ejemplo:
fuente
Sumario rápido:
Para minSDKversion, consulte la última entrada en el identificador de Twitter: https://twitter.com/minSdkVersion
TargetSDKversion: vea la última entrada en el identificador de Twitter: https://twitter.com/targtSdkVersion o use el último nivel de API como se indica en el desarrollo https://developer.android.com/guide/topics/manifest/uses-sdk-element. html
Versión compilada: hazlo igual que TargetSDKversion
maxSdkVersion: el consejo de Android es no configurar esto, ya que no desea limitar su aplicación para que no funcione en futuras versiones de Android
fuente
La configuración de la aplicación de las propiedades de un proyecto de Android en Visual Studio 2017 (15.8.5) las combina:
fuente