web-dev-qa-db-ja.com

廃止予定のAndroid関数の特定のLint警告を抑制する方法は?

古いバージョン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警告を表示します。

17
JJD

ちょうど何か新しい:Android Studioについては不明ですが、この行からこの警告を削除するには、次のように使用できます。

//noinspection deprecation

これにより、次の行から警告が削除されます。例えば:

//noinspection deprecation
e.setBackgroundDrawable(editTextDrawable);

エラーは表示されません。 ただし、 @JJDが言ったように、これでもコンソールに警告が出力されます。しかし、少なくとも、Gitのように役立つ、エラーのない素敵なコードを作成できます。また、これにより@SupressWarningsの問題が回避されます。つまり、メソッドのすべての警告が無視されます。したがって、気づいていない非推奨のものがある場合、@SupressWarningsはそれを非表示にし、警告は表示されません。それが//noinspectionの利点です

8
Ab_

@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ファイルに記録し、それらをミュートします(コード注釈をインライン化するよりも優れています)あちこちに配布されている);オプションlintConfigbaselineは(要件に応じて)組み合わせ可能である必要があると思います。

Android {
    lintOptions {
        baseline file("lint-baseline.xml")
    }
}
6
Martin Zeitler

私は同様の問題に遭遇しました。まず、コンパイラの警告が表示されました。

_: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」では問題にならなかったようです。

5
user1

無視するものを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")
3
bestdayever

大文字小文字の区別が重要です。インラインまたはクラス全体で以下を使用してください。

@Suppress("DEPRECATION")

これはコトリンにあります。

2
Codeversed

糸くずの警告を回避するには、常に関数を分割して、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()
1
Blackd

ViewCompatからメソッドを見つけて、廃止されたメソッドを置き換えてください。

あなたの場合、ViewCompat.setBackground(View, Drawable)を使用してください。

XXXCompatContextCompatなど、そのような場合のためにActivityCompatという名前のクラスが多数あります。

0
hqzxzwb

関数の上の@SuppressWarnings("deprecation")を使用して、その関数のみの特定の警告を抑制します。

魅力的な作品!

@Blackdがより良い答えを持っています。あなたはそれを受け入れるべきです!

0
Saeed Ghasemi