compileSdkVersion を 31 にインクリメントした後 (Android 12)、lint チェックを実行すると、次の問題が発生します。
エラー: 呼び出しには API レベル S が必要です (現在の最小値は 23 です): android.util.SparseArray#set [NewApi]
これをインクリメントした後、誰かが同様の問題を抱えていましたか?なぜそれが発生するのですか?
compileSdkVersion を 31 にインクリメントした後 (Android 12)、lint チェックを実行すると、次の問題が発生します。
エラー: 呼び出しには API レベル S が必要です (現在の最小値は 23 です): android.util.SparseArray#set [NewApi]
これをインクリメントした後、誰かが同様の問題を抱えていましたか?なぜそれが発生するのですか?
set
Android 12 で追加された機能の単なるコピーであり、put
代わりに自由に使用できます。
関数を別の名前でコピーした理由は、配列アクセス構文が Kotlin で機能するようにするためです。Kotlin コンパイラは、名前set
と 2 つのパラメーターを持つ Java クラスの関数を検出すると、次のような配列構文を使用して呼び出すことができます。
mySparseArray.put(3, someObject)
// is the same as
mySparseArray[3] = someObject
ただし、Android 12 で追加しただけなので、Android 12 (sdk バージョン 31) 未満を対象としている場合、新しい機能を使用することは現実的ではなく、実用化されるまでに数年かかります。
私の意見では、この関数を基本クラスに追加したのは間違いでした。SDK 31 をminSdkVersion
. 彼らがそれを追加する前は、拡張関数を使用してこの機能を実現することができましたが、拡張関数の名前が基本クラスの名前に影を落とすため、拡張関数を使用できなくなりました。また、lint は配列アクセス構文のエラーを表示しないため、使用すると実行時にクラッシュします。彼らはこれを の拡張関数として入れるべきでしたandroidx-core-ktx
。
編集: 「バックポート」を正しく理解している場合、これは次のバージョンで修正される可能性があります。