2010-05-03 24 views
5

¿Puede alguien explicarme la diferencia entre el objetivo del proyecto y el SDK mínimo? Quiero que mi aplicación se ejecute en dispositivos Donut, y la APK que construí con un objetivo de 7 funcionó bien. Cuando establecí un SDK mínimo explícito en el manifiesto de Android de 4 (1.6), el compilador me dijo que el objetivo excedía el mínimo. Restablecí el objetivo a 4 solo para ver qué pasaría, y ahora tengo errores de compilación. Un ejemplo es la constante START_NOT_STICKY en android.app.Service. No existe en el nivel 4 de API, pero sí existe en el nivel 7 de API. Este es también el caso de Service.onStartCommand(). En API nivel 7, necesitas explicitar el método, mientras que en API nivel 4 no.¿Cuál es el propósito de la API objetivo y minSDK

¿Por qué la aplicación funciona en 1.6 a pesar de todo esto? ¿Cómo podría saber 1.6 cómo usar SERVICE_NOT_STICKY cuando el nivel API asociado no lo conoce?

Respuesta

4

Si desea utilizar una nueva y elegante función, pero también desea mantener la compatibilidad con versiones anteriores, es aquí donde entran en juego la versión targetSdkVersion y minSdkVersion.

Para mantener la compatibilidad con versiones anteriores, debe tratar cada API nueva desde arriba de la versión minSdkVersion con cuidado. Es decir, compruebe que tiene acceso a ellos utilizando el reflejo o utilizando el Build.VERSION.SDK_INT. Si no lo haces, tu aplicación se bloqueará y se quemará porque no puede encontrar la API que estás tratando de usar.

También debe leer cada línea de documentación sobre las API modificadas (es decir, Service .onStartCommand (..)) para que pueda manejar cada dato que recibe correctamente y de forma compatible con versiones anteriores.

En cuanto a las constantes, lo más probable es que estén compiladas en su código como cadenas/enteros y cuando la versión anterior obtiene un desconocido, simplemente lo ignora. Sin embargo, esa es una teoría, por lo que debe probarla antes de usarla extensivamente.

Además, hasta donde yo sé, el sistema no comprueba minSdkVersion ni targetSdkVersion. Solo Android Market hace eso. Por lo tanto, si tiene acceso a algunas aplicaciones que no se deben ejecutar en su dispositivo y aún intenta usarlas, vuelva a fallar y arder.

Cuestiones relacionadas