1

サポートライブラリv4とtargetSdk 23が必要なAndroid用SDK(サポートライブラリも23である必要があります)があります。商業上の理由から、アプリケーションがAPI 21に対してコンパイルされていても動作するようにSDKをアップグレードする必要があります。実行時にサポートライブラリ/ AppCompatライブラリのバージョンをチェックする方法は?

つまり、サポートライブラリの一部の呼び出しは、サポートライブラリの現在のバージョンアプリは(ない現在のAPIレベル)ので、私は(最悪の最高によってランク付け)ここに3つのオプションがあります。

1 - これは私がどのように考え出したていないものです(メソッド呼び出しの前に、サポートライブラリのバージョンを確認します(もし可能ならば))。
2 - 反射を使用します。
3 - Try Catchブロックを使用します。

第1の選択肢として、実行時にサポートライブラリのバージョンをチェックすることは可能ですか?

+0

サポートライブラリはバージョン情報を取得するためのAPIを公開しておらず、一般的に言えば、達成しようとしていることをサポートするようには設計されていません。 targetSdk 23を使用している場合、サポートライブラリのv23を使用する必要はありません。 – alanv

+0

@alanvこのコードは、ルールを少し変更するApp用ではないSDK用です。 AppCompatV4リビジョン21またはリビジョン23がある場合、このコードを実行する必要があると考えてください。リビジョン23で導入されているため、リビジョン21では使用できないメソッドがいくつかあります。したがって、コードが実行しているバージョンクラッシュします。 – tomacco

答えて

1

私は私が最終的に選んだのアプローチと私の質問にお答えします:実行時サポートライブラリ/ APPCOMPATライブラリのリビジョンをチェックすることはできません


通常、App Dependenciesで明示的に宣言されているため、使用するSupport Library/AppCompat Libraryバージョンのバージョンを知っています。ただし、この場合、SDKコードは、(または少なくともライブラリの最小バージョン)のいずれかで実行する必要があるため、問題を解決するためにいくつかの異なる処理が行われました。

1 - 確認方法Java Reflectionを使用します。
2 - 反映およびtry-catchブロックを使用するメソッドの呼び出し(アプリケーションの安定性を確保するため)
3 - catchブロックで提供される情報を使用してAppCompatのバージョンを決定します。
4 - メソッドの存在がすでにチェックされており、minバージョンがすでに見つかっているため、その後の呼び出しではリフレクションは使用されません。

関連する問題