古いバージョン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);
}
コマンドラインからGradleを使用してプロジェクトをビルドすると、Lintによって次の警告が出力されます。
app/src/main/Java/com/example/MyApp/CustomListAdapter.Java:92: warning:
[deprecation] setBackgroundDrawable(Drawable) in View has been deprecated
viewHolder.shape.setBackgroundDrawable(colorDrawable);
^
警告をミュートするために特定の行またはメソッドに注釈を付けることができますか(故意に行うため)。 not無効にしたいall警告を表示します。
ちょうど何か新しい:Android Studioについては不明ですが、この行からこの警告を削除するには、次のように使用できます。
//noinspection deprecation
これにより、次の行から警告が削除されます。例えば:
//noinspection deprecation
e.setBackgroundDrawable(editTextDrawable);
エラーは表示されません。 ただし、 @JJDが言ったように、これでもコンソールに警告が出力されます。しかし、少なくとも、Gitのように役立つ、エラーのない素敵なコードを作成できます。また、これにより@SupressWarnings
の問題が回避されます。つまり、メソッドのすべての警告が無視されます。したがって、気づいていない非推奨のものがある場合、@SupressWarnings
はそれを非表示にし、警告は表示されません。それが//noinspection
の利点です
@SuppressLint("deprecated")
インラインアノテーションが取得されないことに気づきました-@SuppressWarnings("deprecation")
isピックアップされています。
モジュールレベルのbuild.gradle
ファイル内で、Deprecation
を使用してGradleリンターのlintOptions
チェックを無効にすることができます。そのように個々のファイルを定義する機会はありませんが:
Android {
lintOptions {
disable 'Deprecation'
}
}
またはon LintOptions:lintConfig を使用して、かなり詳細なlint.xml
構成ファイルを1つ割り当てることができますshowAll true
を設定しても、引き続き警告が表示されます-提供されたXML構成に関係なく):
Android {
lintOptions {
lintConfig file("lint.xml")
showAll false
}
}
パスを追加することで、個々のファイルを追加できます。
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="Deprecation" severity="Error">
<ignore path="app/src/main/Java/com/example/MyApp/CustomListAdapter.Java" />
</issue>
</lint>
com.Android.builder.model.LintOptions
のソースコードは、実際にそこで何が起こるかを説明しているかもしれません(そして私が書いたものの約50%を確認しています)。
Android Studio ...のインライン警告を取り除くために、そのリンターは別のリンターであるように見えます-そしてこれらの注釈はGradleビルドのリンターに影響しません(それは既知の非推奨のクラスとメソッドを無視するために、これを上記のメソッドのいずれかと組み合わせて使用してください):
//noinspection deprecation
updateAndroid Studio 2. リリースノートに新機能が記載されています:
Lintベースライン:Android Studio 2.3を使用すると、未解決のlint警告をプロジェクトのベースラインとして設定できます。それ以降、Lintは新しい問題のみを報告します。これは、多くのレガシーがある場合に役立ちますアプリのlintの問題ですが、新しい問題の修正に集中したいだけです。Lintのベースラインと、このリリースで追加された新しいLintのチェックとアノテーションの詳細をご覧ください。
ここ 説明、Lint警告を作成する方法baseline
-検出された警告をXMLファイルに記録し、それらをミュートします(コード注釈をインライン化するよりも優れています)あちこちに配布されている);オプションlintConfig
とbaseline
は(要件に応じて)組み合わせ可能である必要があると思います。
Android {
lintOptions {
baseline file("lint-baseline.xml")
}
}
私は同様の問題に遭遇しました。まず、コンパイラの警告が表示されました。
_:compileDebugJava
Note: /path/file.Java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
_
これは@SuppressWarnings("deprecation")
で抑制できるか、警告でありビルドが失敗するため無視することができます。さらに、lintエラーが発生しました(_build/lint-results.html
_の詳細):
_Call requires API level 13 (current min is 9)
_
これは、@SuppressLint("NewApi")
を追加することで抑制できます。または、minSdkVersion
として設定したものではなく、@TargetApi(13)
を使用して、メソッド/クラスがAPIバージョン13に依存するメソッドを使用する可能性があることを示唆できます(例:9)。
注釈は、クラスまたは関数レベルでのみ実行でき、1行では実行できません。また、「非推奨」は大文字にしないでください。ただし、「NewApi」では問題にならなかったようです。
無視するものをlintに指示するには、lint.xmlファイルを作成する必要があります。
http://tools.Android.com/tips/lint/suppressing-lint-warnings 詳細はこちらをご覧ください
あなたのはこのように見えるかもしれません
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Disable the given check in this project -->
<issue id="Deprecation">
<ignore path="app/src/main/Java/com/example/MyApp/CustomListAdapter.Java" />
</issue>
</lint>
ソースでこれを処理するには、次のようなものを使用する必要があります
@SuppressLint("Deprecation")
大文字小文字の区別が重要です。インラインまたはクラス全体で以下を使用してください。
@Suppress("DEPRECATION")
これはコトリンにあります。
糸くずの警告を回避するには、常に関数を分割して、1つの関数が古いシステムを扱い、他の関数が新しいシステムを扱うようにします。老人は安全に警告を抑制することができます。新しいAPIは、最新のAPIレベルでのみ使用されるように注釈を付ける必要があります。
これはどのように見えるかの例です:
@SuppressWarnings("deprecation")
private static int getVersionCode_old(@NonNull Context appContext) {
PackageInfo pInfo;
try {
pInfo = appContext.getPackageManager().getPackageInfo(appContext.getPackageName(), 0);
return pInfo.versionCode;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
@RequiresApi(api = Build.VERSION_CODES.P)
private static int getVersionCode_new(@NonNull Context appContext) {
PackageInfo pInfo ;
try {
pInfo = appContext.getPackageManager().getPackageInfo(appContext.getPackageName(), 0);
return (int) pInfo.getLongVersionCode();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
public static int getVersionCodeUniversal(@NonNull Context appContext)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return getVersionCode_new(appContext);
}
else
{
return getVersionCode_old(appContext);
}
}
Lint警告を回避するためのもう1つの重要なヒント:非推奨のクラス全体を使用している場合は、そのクラスのすべての明示的なインポートを削除する必要があります。次に、フルパスを使用してそのクラスに直接アクセスし、古いバージョンの関数でのみアクセスします。
そして最後に、androidXを使い始めることを検討する必要があります。androidXは、すぐに使用できる多くの汎用関数を見つける新しいGoogleライブラリです。そうすれば、この種の小さな問題で多くの時間を節約できます。たとえば、上記の例のすべてのコードを削除して、この新しいユニバーサルandroidX関数を使用するだけです。
PackageInfo.getLongVersionCode()
ViewCompat
からメソッドを見つけて、廃止されたメソッドを置き換えてください。
あなたの場合、ViewCompat.setBackground(View, Drawable)
を使用してください。
XXXCompat
、ContextCompat
など、そのような場合のためにActivityCompat
という名前のクラスが多数あります。
関数の上の@SuppressWarnings("deprecation")
を使用して、その関数のみの特定の警告を抑制します。
魅力的な作品!
@Blackdがより良い答えを持っています。あなたはそれを受け入れるべきです!