私は警告が嫌いです。私たちの Android プロジェクトには現在 151 がありますが、リストのどこかに潜在的な問題に対して実際に警告を発するものがあると確信しています。
これらの警告の 1 つのタイプは、非推奨のフィールドとメソッドに関するものです。マニフェストに が含まれており、これらの警告が であるSDK<uses-sdk android:minSdkVersion="10" />
のみを考慮していることを除いて、これは便利です。target
android-17
@SuppressWarnings("deprecation")
これらの警告をミュートするのは簡単です。問題のある行またはメソッド全体の前に注釈を追加します。しかし、これは要点を見逃しています - 変更することを決定した場合minSdkVersion="11"
、レベル 10 で廃止された API はまだ表示されず、誰かがすべてのプロジェクトのすべての注釈を調べて、必要なコードを見つける必要があります。書き換えられます。
minSdkVersionに基づいてこれらの警告を管理できるソリューションはありますか?
以下に興味深い回答を投稿し、私の質問に触発された機能要求を提出したマークは、 minSdkVersionの重要性について私に同意していないようです。彼は、ターゲット API レベルに基づいて、非推奨の警告 (注釈と同様に Lint からの可能性が最も高い) を確認したいと考えています。しかし、私はこのアプローチに同意できません。@TargetApi(NN)
カメラを開く単純なアプリケーションを考えてみましょう。プレビュー フレーム レートを確認する必要がある場合があります。しかし、このメソッドは API 9 で廃止されたため、プレビュー FPS 範囲を確認する必要があります。を使用するplatforms/android-8/android.jar
と、Java コンパイラは非推奨の警告を表示しません。
ただし、そのようなクエリをサポートするデバイスでアプリケーションが実行されている場合でも、優先ビデオ解像度を見つけることはできません。アプリケーションが以上@TargetApi(11)
でビルドされていることを確認するために、おそらくそこに注釈を追加します。platforms/android-11/android.jar
Honeycomb以上をターゲットにしたので、 getPreviewFrameRate()に対して非推奨の警告が表示されます。これがまさに私を悩ませています。しばらくの間、私の架空のアプリケーションはいくつかのFroyominSdkVersion=8
デバイスをサポートする必要があるため、非推奨の方法を設定して使用するしかありません。当然、条件付きブロックで高度な API を使用し、適切な@TargetApi(NN)
場所に配置します。幸いなことに、Donut以降では、存在しないメソッドまたはメンバーへの呼び出しが検出されたときにクラス ローダーがクラッシュすることはなく、疑わしい呼び出しを単なるif()でラップするだけで十分です。
それで、私は何をしますか?警告をミュートするためにgetPreviewFrameRate()@SuppressWarnings("deprecation")
への呼び出しを追加しますか? 代わりに追加しますか?@SuppressDeprecation(8)
しかし、ある時点で、Froyo との下位互換性はもはや重要ではないと判断するでしょう。私は自分のマニフェストに設定しましたが、 getPreviewFrameRate()<uses-sdk android:minSdkVersion="9" />
の非推奨警告はまだ抑制されています...マニフェストで変更が行われた後、プロジェクト全体にとってより簡単になるため、新しいアプローチは既存の注釈よりも確実に優れています。grep -R "@SuppressDeprecation(8)"
しかし、ここではもう少し緊密な統合を希望します。Lint にマニフェスト ファイルを解析させます。
これは今、より理にかなっていますか?