Je suis en train d'écrire une application qui utilise des fonctions et des classes uniquement disponible dans la dernière API de niveau 16, mais je veux marcher avec pas d'erreurs sur les appareils avec l'API de niveau 15.
Prenons quelques exemples. Une nouvelle classe: Android.widget.Advanceable
, et une nouvelle/renommé méthode: View.setBackground()
:
Je peux faire quelque chose comme ceci:
Advanceable myAdvanceable = ...;
if (android.os.Build.VERSION.SDK_INT >= 16)
{
myView.setBackground(...);
myAdvanceable.advance();
}
else
{
myView.setBackgroundDrawable(...); // The old function name.
// Don't bother advancing advanceables.
}
Et si j'ai mis un minSdk de 15, mais une cible de génération de 16 ans (c'est à dire dans les Propriétés du Projet->Android), il va compiler sans erreurs. Au moins de temps en temps. Eclipse est un peu stochastique sur les erreurs et parfois de dire "setBackground() n'est disponible dans l'API de niveau >= 16" ou similaire, mais si je viens de nettoyer le projet de ces erreurs magie disparaître.
Donc ma question est, suis-je autorisé à faire cela? Ne sera pas le code de crash si je le lance sur une API de niveau 15 de l'appareil? Sera-ce seulement en panne si elle est pour le 16 du code? Pourquoi ne pas Eclipse m'empêcher de le construire?
Edit 1
Merci pour les réponses, je suppose que la question devrait vraiment être: Pourquoi ne pas en faire de la charpie me mettent en garde sur l'utilisation de la nouvelle Api?
J'ai ceci dans mon manifeste, et je suis l'aide de l'API de niveau 16 fonctions, mais elle n'est pas toujours m'avertir:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
Aussi je suis toujours pas sûr de savoir quand des classes entières sont de nouveau à un niveau API, comme Advanceable
. Spécifiquement si je les utiliser comme variables de membre.
Edit 2
La réponse s'est avéré être "Eclipse est buggé comme l'enfer", mais Nico réponse a également été très utile.