Diferencia entre targetSdkVersion y Project build target

¿Cuál es la diferencia entre targetSdkVersion establecido en el archivo de manifiesto y el objetivo de construcción del proyecto establecido en el entorno de construcción (por ejemplo, Eclipse)?

Intenté encontrar más información sobre estas dos características, pero no pude encontrar una explicación clara y específica.

Parece que el objetivo de compilación del proyecto decide el nivel de compatibilidad de la API que se utilizará durante la compilación. Cuando targetSdkVersion solo afecta la visibilidad de los elementos del manifiesto del nivel de API dado.

¿Alguien podría confirmar / exponer esto?

EDITAR: Gracias chicos por respuestas rápidas. Olvidé mencionar en mi pregunta que he leído todos los temas en Android Dev con respecto a estas características y también lo busqué en Google y lo busqué en Stack Overflow. Entonces, entiendo el propósito básico de min / target / maxSdkVersion para ser utilizado en Android Market y en el propio sistema Android. Sin embargo, de acuerdo con otras publicaciones de personas que tienen problemas con esta opción de manifiesto, parece que uses-sdk en realidad tiene un impacto en cómo se interpreta el nivel de API. Al menos eso es lo que sospecho.

A realmente bueno La explicación se da aquí: http://developer.android.com/guide/appendix/api-levels.html

Sin embargo, todavía no me queda claro si targetSdkVersion afecta la compilación / tiempo de ejecución del APK en el sistema Android. ¿O es solo para validación como sugiere la documentación de uses-sdk?

preguntado el 27 de agosto de 11 a las 15:08

Entiendo el propósito básico del elemento uses-sdk, pero mi pregunta es más bien si targetSdkVersion realmente impacta en la forma en que se ejecuta la aplicación en el sistema Android. O tal vez sea solo para validación como sugiere la documentación. -

6 Respuestas

La targetSdkVersion de hecho, el atributo afecta el comportamiento en tiempo de ejecución de una aplicación.

Dependiendo de lo que establezca, determinará si las funciones de compatibilidad están habilitadas / deshabilitadas en el marco de Android.

Por ejemplo, una vez que establezca targetSdkVersion = 11, el tema predeterminado de su aplicación se establecerá en @android:style/Theme.Holo - lo que significa que su aplicación tendrá widgets de interfaz de usuario de estilo Honeycomb, obtendrá una barra de acción y no tendrá un botón de menú de opciones en la parte inferior de la pantalla.

Si configura targetSdkVersion en un valor menor que, su tema predeterminado seguirá siendo @android:style/Theme - independientemente del nivel de API con el que esté construyendo.

TargetSdkLevel también afecta cuáles son los valores predeterminados para el <supports-screens> elemento, que a su vez determinará si su aplicación se ejecuta en modo de compatibilidad de densidad.

Nota interesante: En realidad, Android Market no usa el atributo targetSdkLevel para nada en este momento. Se usa puramente en tiempo de ejecución con fines de compatibilidad y posiblemente en tiempo de compilación, aunque no he analizado el comportamiento allí. Si la gente siente curiosidad por el compilador, podría consultar con el equipo del SDK para obtener más información.

Por supuesto, es muy posible que Market decida hacer algo con esto en el futuro.

Respondido 04 Oct 11, 03:10

Aclaración impresionante. Hay mucha desinformación sobre estos atributos en SO. Definitivamente estaría interesado en el aspecto del tiempo de compilación. ¡Gracias! - Tony Chan

Con respecto al tema Holo, dijiste que "el tema predeterminado de tu aplicación se establecerá en @android: style / Theme.Holo". ¿Esto solo se aplica a dispositivos con API nivel 11 y superior? - MichalH

Build Target se usa para saber con qué SDK compilar tu APK. Esto significa que si hay clases o métodos que no están disponibles en su versión mínima del SDK, pero que están en versiones posteriores, esas clases o métodos seguirán estando disponibles para su uso. Solo tendrá que asegurarse de verificar cuándo los está usando y hacer enfoques alternativos si la versión del SDK del usuario no es compatible con esas clases / métodos.

android:targetSdkVersion

Un número entero que designa el nivel de API al que se dirige la aplicación.

Con este conjunto de atributos, la aplicación dice que puede ejecutarse en versiones anteriores (hasta minSdkVersion), pero se probó explícitamente para que funcione con la versión especificada aquí. La especificación de esta versión de destino permite a la plataforma deshabilitar la configuración de compatibilidad que no es necesaria para la versión de destino (que de lo contrario se puede activar para mantener la compatibilidad con versiones posteriores) o habilitar funciones más nuevas que no están disponibles para aplicaciones más antiguas. Esto no significa que pueda programar diferentes funciones para diferentes versiones de la plataforma; simplemente informa a la plataforma que ha probado con la versión de destino y la plataforma no debe realizar ningún trabajo adicional para mantener la compatibilidad con la versión de destino.

Puede encontrar más información consultando esta URL:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

También hay un buen artículo escrito por Google sobre la verificación para asegurarse de que sus usuarios actuales La versión del sistema operativo Android usará las clases / métodos apropiados

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

respondido 26 nov., 11:19

Como dice Trever en su respuesta, el mercado no utiliza targetSdkVersion en este momento. Puedo, y he subido, una aplicación que tiene targetSdkVersion = 10 y, sin embargo, todavía puedo verla en Market en mi tableta HC. Es posible que esté pensando en maxSdkVersion, que no se recomienda configurar / usar. - Tony Chan

En mi respuesta, nunca dije que se usara para el mercado, sino dentro de su aplicación. - enganchado82

Sí, está establecido en su manifiesto. Puede que esté confundido, pero su primera línea "Su targetSdkVersion se usa para Android Market para saber qué dispositivos mostrar / no mostrar su aplicación" parece implicar que Market usa esto para determinar si mostrar la aplicación a los usuarios que ejecutan niveles de API más altos. de lo que estableciste en targetSdkVersion. Cuando en realidad el Mercado básicamente lo ignora. Todo lo demás en tu respuesta es dorado. - Tony Chan

En su cuadro de diálogo "Crear proyecto" en Eclipse, especifica el minSdkVersion. Este es el nivel de API que se requiere para ejecutar su aplicación.

La targetSdkVersion-attribute solo le dice a Android Market que su aplicación fue desarrollada (y quizás optimizada) para ejecutarse bajo el nivel de API especificado.

Respondido 27 ago 11, 19:08

El objetivo de compilación es aquel en el que probará la aplicación. targetSdkVersion es para el que se desarrolló específicamente su aplicación. Ambos son iguales la mayoría de las veces.

Encontrarás una explicación detallada aquí.

Respondido 27 ago 11, 20:08

El atributo targetSdkVersion informa al sistema que ha probado su aplicación con la versión dada (nivel de api) y el sistema no debe habilitar ningún comportamiento de compatibilidad para mantener la compatibilidad de su aplicación con la versión de destino. La aplicación aún puede ejecutarse en versiones anteriores (hasta minSdkVersion).

Para más detalles: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Respondido 16 Feb 12, 14:02

Esta pregunta ya ha sido respondida adecuadamente, pero quiero señalar que ya no es del todo correcto que la tienda Google Play no use targetSdkVersion en absoluto.

En el caso específico en el que establezca targetSdkVersion en 23 (Marshmallow 6.0) y cargue su APK, incluso si está cargando una versión Beta, no podrá volver a enviar un APK para esa aplicación que tenga una targetSdkVersion menor que 23.

Esto se debe a los cambios en los permisos entre 22 y 23 que no pueden revertirse para una aplicación determinada.

Esto puede ser un poco una trampa si solo estabas probando 23 en Beta y no estás seguro de estar listo para admitirlo todavía.

respondido 06 mar '16, 19:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.