Comment faire pour supprimer spécifique de la Charpie avertissement pour obsolète Android fonction?
- Je utiliser un commutateur de version à prendre en charge les anciennes versions d'Android.
int sdk = Build.VERSION.SDK_INT;
if (sdk < Build.VERSION_CODES.HONEYCOMB) {
ColorDrawable colorDrawable = new ColorDrawable(shapeColor);
//noinspection deprecation
viewHolder.shape.setBackgroundDrawable(colorDrawable);
} else {
viewHolder.shape.setColor(shapeColor);
}
Lors de la construction du projet avec Gradle de la ligne de commande l'avertissement suivant est sortie en Charpie:
app/src/main/java/com/example/MyApp/CustomListAdapter.java:92: warning:
[deprecation] setBackgroundDrawable(Drawable) in View has been deprecated
viewHolder.shape.setBackgroundDrawable(colorDrawable);
^
Je peux annoter la ligne ou de la méthode pour désactiver l'avertissement (car je le fais sur le but)? Je ne pas souhaitez désactiver tous avertissements.
Êtes-vous à l'aide de Android Studio?
Oui. Mais ici, je suis la construction de la ligne de commande via
Ce qui se passe lorsque vous placez votre curseur sur viewHolder.forme.setBackgroundDrawable(colorDrawable); et appuyez sur Alt+Entrée?
"//noinspection" semble être un IntelliJ façon d'ignorer les avertissements (Android Studio est basé sur IntelliJ). Ressemble à une incohérence dans le SDK Android - les IDE, en offrant de l'utilisation de ce //noinspection chose (lorsque vous appuyez sur alt-enter) mais le système de construction, l'ignore. J'ai déposé code.google.com/p/android/issues/detail?id=73475
rapport de bug a été fermé comme "WorksAsIntended", en disant qu' //noinspection est censé être spécifique de l'IDE et n'est pas censé affecter les opérations de ligne de commande tels que gradle construit. Toutefois, la documentation n'est pas de faire cette distinction, j'ai donc déposé une documentation en question: code.google.com/p/android/issues/...
Oui. Mais ici, je suis la construction de la ligne de commande via
./gradlew clean assembleDebug assembleRelease
.Ce qui se passe lorsque vous placez votre curseur sur viewHolder.forme.setBackgroundDrawable(colorDrawable); et appuyez sur Alt+Entrée?
"//noinspection" semble être un IntelliJ façon d'ignorer les avertissements (Android Studio est basé sur IntelliJ). Ressemble à une incohérence dans le SDK Android - les IDE, en offrant de l'utilisation de ce //noinspection chose (lorsque vous appuyez sur alt-enter) mais le système de construction, l'ignore. J'ai déposé code.google.com/p/android/issues/detail?id=73475
rapport de bug a été fermé comme "WorksAsIntended", en disant qu' //noinspection est censé être spécifique de l'IDE et n'est pas censé affecter les opérations de ligne de commande tels que gradle construit. Toutefois, la documentation n'est pas de faire cette distinction, j'ai donc déposé une documentation en question: code.google.com/p/android/issues/...
OriginalL'auteur JJD | 2014-06-13
Vous devez vous connecter pour publier un commentaire.
Juste quelque chose de nouveau: vous ne savez Pas à propos de Android Studio, mais, pour supprimer cet avertissement de cette ligne, vous pouvez utiliser:
Cela supprime l'avertissement de la ligne suivante.
E. g:
Il n'affiche pas une erreur. Cependant, @JJD dit, c'est encore sorties de l'avertissement à la console. Mais au moins, vous pouvez avoir une belle erreur de moins de code qui peut être utile, comme pour Git par exemple. Et, cela évite le problème avec
@SupressWarnings
, qui est, il ignore tous les avertissements dans la méthode. Donc, si vous avez quelque chose d'obsolète que vous ne sont pas conscients de,@SupressWarnings
cacher et vous ne serez pas averti. C'est l'avantage de la//noinspection
OriginalL'auteur Ab_
J'ai rencontré un problème similaire. J'ai d'abord été un avertissement du compilateur:
Qui vous pouvez supprimer avec
@SuppressWarnings("deprecation")
ou tout simplement les ignorer puisque c'est un avertissement, et est la cause de votre échec de la copie.De plus, j'ai la fibre d'erreur (plus de détails dans
build/lint-results.html
):Cela pourrait être supprimée par l'ajout de
@SuppressLint("NewApi")
. Vous pouvez également utiliser@TargetApi(13)
entendre que la méthode/classe peut utiliser des méthodes qui dépendent de la version de l'API 13, plutôt que ce que vous avez défini commeminSdkVersion
(p. 9).Les annotations ne peut être fait à une classe ou d'une fonction, et non pour une seule ligne. Notez également que "autodérision" ne doit pas être une majuscule, alors que cela n'est pas question de "NewApi".
OriginalL'auteur user1
Vous devez créer un lint.xml fichier de dire les peluches que de l'ignorer.
http://tools.android.com/tips/lint/suppressing-lint-warnings voir ce pour plus de détails
les vôtres ressemble un peu à ce
À les traiter dans le source, vous devriez utiliser quelque chose comme
Le lien qui les couvre. @SuppressLint("Retrait") en ligne.
J'ai essayé
//noinspection AndroidLintDeprecation
comme suggéré dans la documentation, mais l'avertissement s'affiche encore. Je ne suis pas sûr de ce que l'on entend par id. LelintId
est extrait comme on peut le voir ici, la ligne 169. -@SuppressLint("Deprecation")
ne peut être réglé que sur le niveau de la méthode, si je comprends bien.Ne serait pas la solution la plus facile à rompre que si l'instruction dans une méthode distincte qui est marqué avec l'supprimer les peluches annotation?
Tu veux dire
//noinspection deprecation
? Mais à part cela le Gradle encore sorties de l'avertissement à la console.OriginalL'auteur bestdayever
J'ai remarqué que les
@SuppressLint("deprecated")
inline annotation ne sera pas ramassé plus - tout en@SuppressWarnings("deprecation")
est être ramassé.il est possible de désactiver la
Deprecation
vérifie l'Gradle linter aveclintOptions
dans le module de niveaubuild.gradle
fichier; il n'existe pas de possibilité de définir des fichiers individuels comme ça:ou sur pouvez assigner un assez détaillé
lint.xml
fichier de configuration avec LintOptions:lintConfig (lorsque les paramètresshowAll true
, il continue à afficher les avertissements - peu importe la condition de configuration XML):où l'on peut ajouter des fichiers individuels, en ajoutant leurs chemins:
Le code source de
com.android.builder.model.LintOptions
peut-être expliquer, ce qui se passe réellement là-bas (et confirme qu'environ 50% de ce que j'ai écrit).afin de se débarrasser de la ligne des avertissements dans Android Studio... que linter semble être d'une autre linter - et ces annotations n'affectent pas le linter de la Gradle construire (il peut être nécessaire d'utiliser ceci, combiné avec l'une des méthodes indiquées ci-dessus, afin de les ignorer connu obsolète classes et méthodes):
mise à jour Android Studio 2.3 notes de publication de la mention d'une nouvelle fonctionnalité:
ici il est expliqué comment créer un chiffon avertissements
baseline
- qui enregistre à la détection des avertissements dans un fichier XML et muets (ce qui est une façon de mieux que d'avoir le code annotations en ligne, distribué dans tous les sens); je suppose, que les optionslintConfig
etbaseline
devrait être à la moissonneuse-mesure (selon les besoins).il a expliqué mieux maintenant; fondamentalement, on doit configurer deux linters (celui d'Android Studio, ce qui peluches vivantes - et l'un des Gradle, qui poussières au moment de la construction) - afin de mettre en sourdine tous les avertissements qui ne sont pas d'intérêt.
Quand je place votre
lint.xml
(avec ma classe de chemin d'accès) dans le dossier racine du projet, puis Gradle encore notifie - moi que la classe "utilise ou remplace une API obsolètes" lors de l'exécution de construire sur la ligne de commande. De plus, à l'exclusion de l'ensemble de la classe est un peu trop car je ne veux le silence de l'autodérision pour une seule ligne ou de la fonction.ne pouvait qu'imaginer, que le
lint.xml
n'est pas mentionné dans lelintOptions
de labuild.gradle
...et, par conséquent, pourraient ne pas être respectés par les linter.jetez un oeil à la mise à jour de la réponse; aussi jetbrains.com/help/idea/2016.1/... semble pertinent, pour le live du code de l'inspection.
OriginalL'auteur Martin Zeitler
Pour éviter les peluches mises en garde, toujours séparer les fonctions une fonction traite de l'ancien système et de l'autre l'on traite avec le nouveau système. L'ancien permet de supprimer l'avertissement de sécurité. La nouvelle doit être annoté pour être utilisés que sur les plus récent api niveaux.
C'est un exemple sur la façon dont il devrait ressembler à:
Un autre conseil important pour éviter les peluches mises en garde: si vous utilisez un ensemble de classe déprécié alors vous devez supprimer tous explicite les importations de cette catégorie. Alors seulement l'accès à cette classe directement à l'aide de son chemin d'accès complet, et que le faire dans les anciennes versions de vos fonctions.
Et enfin, vous devriez envisager de commencer à utiliser androidX, la nouvelle version de Google bibliothèques où vous trouverez un grand nombre de fonctions universelles prêt à l'emploi. Ensuite, vous pouvez économiser beaucoup de temps avec ce genre de petits problèmes. Par exemple, vous pouvez supprimer tout le code de l'exemple ci-dessus, et tout simplement utiliser cette nouvelle et universelle androidX fonction:
OriginalL'auteur Blackd