studio - sdk android mac
Diferencia entre targetSdkVersion y Project build target (6)
¿Cuál es la diferencia entre el conjunto targetSdkVersion en el archivo de manifiesto y el conjunto de objetivos de compilación del proyecto en el entorno de construcción (por ejemplo, Eclipse)?
He intentado encontrar más información sobre estas dos características, pero no pude encontrar ninguna 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 manifiestos del nivel de API dado.
¿Alguien podría confirmar / exponer esto?
EDIT : Gracias chicos por las 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. Así que entiendo el propósito básico de min / target / maxSdkVersion para ser usado 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 del manifiesto, parece que usa-sdk realmente tiene un impacto en cómo se interpreta el nivel de API. Al menos eso es lo que sospecho.
Una explicación realmente buena 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 de la APK en el sistema Android. ¿O es solo para validación como sugiere la documentación de use-sdk?
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 del SDK mínimo, pero están en versiones posteriores, esas Clases o métodos aún estarán disponibles para su uso. Solo tendrá que asegurarse de verificar cuándo los está utilizando y hacer enfoques alternativos si la versión del SDK del usuario no es compatible con esas clases / métodos.
android:targetSdkVersion
Un 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 trabajar con la versión especificada aquí. La especificación de esta versión de destino permite que la plataforma deshabilite las configuraciones de compatibilidad que no son necesarias para la versión de destino (que de lo contrario podrían estar activadas para mantener la compatibilidad hacia adelante) o habilitar funciones más nuevas que no están disponibles para aplicaciones anteriores. Esto no significa que pueda programar diferentes funciones para diferentes versiones de la plataforma; simplemente informa a la plataforma que ha probado en comparación 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 refiriéndose a 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 comprobación para asegurarse de que los usuarios actuales de la versión del sistema operativo Android utilizarán las Clases / métodos adecuados
http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
El atributo targetSdkVersion le informa al sistema que usted ha probado su aplicación contra la versión dada (nivel de api) y el sistema no debe permitir 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
El objetivo de construcción es aquel en el que probarás la aplicación. targetSdkVersion es para el que se desarrolló específicamente tu aplicación. Ambos son iguales la mayoría de las veces.
Encontrará una explicación detallada http://developer.android.com/guide/topics/manifest/uses-sdk-element.html .
En su diálogo "Crear proyecto" en Eclipse, debe especificar minSdkVersion
. Este es el nivel de API que se requiere para ejecutar su aplicación.
El targetSdkVersion
targetSdkVersion solo le dice a Android Market que su aplicación fue desarrollada (y quizás optimizada) para ejecutarse bajo el nivel de API especificado.
Esta pregunta ya ha sido respondida adecuadamente, pero quiero señalar que ya no es del todo correcto que Google Play store no use targetSdkVersion en absoluto.
En el caso específico en el que configuras targetSdkVersion a 23 (Marshmallow 6.0) y subes tu APK, incluso si estás cargando una versión Beta, no podrás volver a enviar un APK para esa aplicación que tenga un targetSdkVersion inferior a 23.
Esto se debe a cambios en los permisos entre 22 y 23 que no se pueden revertir para una aplicación determinada.
Esto puede ser una trampa si solo estuvieras probando 23 en Beta y no estés seguro de estar listo para soportarlo.
El atributo targetSdkVersion
hecho afecta el comportamiento en tiempo de ejecución de una aplicación.
Dependiendo de cómo lo configure, determinará si las características 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 UI 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 más bajo que, su tema predeterminado continuará siendo @android:style/Theme
, independientemente del nivel de API en el que esté @android:style/Theme
.
TargetSdkLevel también afecta a cuáles son los valores predeterminados para el elemento <supports-screens>
, que a su vez determinará si su aplicación se ejecuta en modo de compatibilidad de densidad.
Nota interesante: Android Market no usa el atributo targetSdkLevel para nada en este momento. Se usa puramente en tiempo de ejecución para propósitos de compatibilidad, y posiblemente en tiempo de compilación, aunque no he investigado el comportamiento allí. Si la gente tiene curiosidad sobre el compilador, podría consultar con el equipo del SDK para obtener más información.
Por supuesto, es totalmente posible que Market pueda decidir hacer algo con esto en el futuro.