28

RequiresApiTargetApiの違いは? kotlinでRequiresApi vs TargetApi android annotations

サンプル:

@RequiresApi(api = Build.VERSION_CODES.M) 
@TargetApi(Build.VERSION_CODES.M) 
class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 

注:私はTargetApiの糸くずを使用していけない場合でのJavaDocからclass requires api level 23...

答えて

15

@RequiresApi - 注釈付き要素は、指定されたAPIレベル以上で呼び出される必要があることを示します。

@TargetApi - Lintは、このタイプをプロジェクトのターゲットとは無関係に、指定されたAPIレベルをターゲットとして扱う必要があることを示します。

13

エラーで失敗:FingerprintManager.AuthenticationCallbackは、API M

注2が必要ですhttps://developer.android.com/reference/android/support/annotation/RequiresApi.html

[@RequiresApi]これは、古い@TargetApiアノテーションと目的は似ていますが、minSdkVersionを超えるメソッド内の警告を「抑制」するのではなく、呼び出し元の要件であることをより明確に表しています。

機能的には同等ですが、@RequiresApiは新しいと思われ、より多くの機能を追加する可能性が高くなります。マイクはあなたがマニュアルに見ることができるように、言ったことと同様に

+0

@Pennこれがなぜ偽であるかを説明するために気をつけますか? – hamena314

20

は注釈付き要素のみを与えられたAPIレベル以上に呼ばれるべきであることを示します。

これは、古い@TargetApiアノテーションと目的は似ていますが、minSdkVersionを超えるメソッド内の警告を「抑制」するのではなく、呼び出し元の要件であることをより明確に表しています。

ここからわかるように、これは実際にIDE/LINTから警告を削除するのではなく、このメソッドを呼び出すときに使用されたAPIを呼び出し元に検証させることです。

これを@NonNullまたは@Nullアノテーションと比較すると、呼び出し元が関数にヌル値を送信できるかどうかを強制できます。

1

両方とも、新しいAndroid APIレベルに追加された機能を処理するためのもので、他のAPIレベルに影響することはありません。

RequiresApiここ

@RequiresApi(api = Build.VERSION_CODES.*api_code*) 

それは注釈付き要素のみを与えられたAPIレベル以上に呼ばれるべきであることを述べています。指定されたAPIレベルの下の注釈付き要素は呼び出されません。

@TargetApi(Build.VERSION_CODES.*api_code*) 

TargetApiはリントは関係なく、プロジェクトの目標が何であるか、特定のAPIレベルをターゲットにしないよう、このタイプを扱う必要があることを示します。指定されたAPIレベルのみを対象としています。 他のAPIレベルでは呼び出されません。

関連する問題