2010-05-03 5 views
5

Quelqu'un peut-il m'expliquer la différence entre la cible du projet et le SDK minimum? Je veux que mon application fonctionne sur les appareils Donut, et l'APK que j'ai construit avec une cible de 7 fonctionne très bien. Lorsque j'ai défini un SDK minimum explicite dans le manifeste Android de 4 (1.6), le compilateur m'a critiqué que la cible dépassait le minimum. J'ai réinitialisé la cible à 4 seulement pour voir ce qui se passerait, et maintenant j'ai des erreurs de compilateur. Un exemple est la constante START_NOT_STICKY dans android.app.Service. Il n'existe pas dans le niveau d'API 4, mais il existe dans le niveau d'API 7. C'est également le cas avec Service.onStartCommand(). Au niveau 7 de l'API, vous devez remplacer explicitement cette méthode, tandis que dans le niveau 4 de l'API, vous ne le faites pas.Quel est le but de l'API cible et de minSDK

Alors pourquoi l'application fonctionne-t-elle dans la version 1.6 malgré tout cela? Comment 1.6 peut-il savoir comment utiliser SERVICE_NOT_STICKY lorsque le niveau d'API associé ne le connaît pas?

Répondre

4

Si vous souhaitez utiliser une nouvelle fonctionnalité sophistiquée, mais que vous souhaitez également maintenir la rétrocompatibilité, les versions targetSdkVersion et minSdkVersion entrent en jeu. Pour maintenir la compatibilité ascendante, vous devez traiter avec soin toutes les nouvelles API situées au-dessus de minSdkVersion. C'est à dire double vérifier que vous avez accès à eux soit en utilisant la réflexion ou en utilisant le Build.VERSION.SDK_INT. Si vous ne le faites pas, votre application va planter et graver car elle ne trouve pas l'API que vous essayez d'utiliser.

Vous souhaitez également lire chaque ligne de documentation concernant les API modifiées (c.-à-d. La Service .onStartCommand (..)) afin que vous puissiez gérer chaque donnée correctement et de manière rétrocompatible. En ce qui concerne les constantes, elles sont probablement compilées dans votre code en tant que Strings/entiers et quand l'ancienne version obtient une inconnue, elle l'ignore tout simplement. Cependant, c'est une théorie, vous devriez donc tester avant de l'utiliser intensivement.

Aussi, autant que je sache, le système ne vérifie pas minSdkVersion ni targetSdkVersion. Seul l'Android Market fait cela. Donc, si vous obtenez certaines applications qui ne sont pas censées fonctionner sur votre appareil et que vous essayez toujours de les utiliser, vous risquez de vous planter et de graver.

Questions connexes