SparseArray error: Call requires API level S : SparseArray.set()【Kotlin】

こんなの出ましたけど。

SparseArray error: Call requires API level S : SparseArray.set()

どうしましょう。

また、アノテーションつけて、SDKバージョンによる分岐ですか?

内容

API level 1 からある SparseArray ですが、set メソッドが API level 31 (Android 12/S) で追加されています。

Alias for put(int, java.lang.Object) to support Kotlin [index]= operator.

👉 SparseArray  |  Android Developers 

set was added in Android 12 and is just a copy of the put function, which you can freely use instead.

setはAndroid12で追加されたもので、関数の単なるコピーであり、put代わりに自由に使用できます。

The reason they copied the function with a different name is so array access syntax can work in Kotlin. When the Kotlin compiler sees a function in a Java class with the name set and two parameters, it allows it to be called using array syntax like this:

配列アクセスがKotlinで機能できるようにするためです。Kotlinコンパイラが名前setと2つのパラメータを持つJavaクラスの関数を検出すると、次のような配列構文を使用して関数を呼び出すことができます。


mySparseArray.put(3, someObject)

// is the same as
mySparseArray[3] = someObject

But since they only added it in Android 12, it is not practical to use the new function if you are targeting anything less than Android 12 (sdk version 31), so it will take a few years to become useful.

ただし、Android 12でのみ追加されているため、Android 12(sdkバージョン31)未満をターゲットにしている場合は、新しい機能を使用するのは実用的ではありません。そのため、使用できるようになるまでに数年かかります。

In my opinion, it was a mistake to add this function to the base class, because now it is impossible to use array access syntax for a few years until it finally becomes sensible to make SDK 31 the minSdkVersion. Before they added it, it was possible to use an extension function to have this functionality, but now an extension function cannot be used because its name would shadow the one in the base class. Also, lint doesn't show an error for the array access syntax, so it will crash at runtime if you use it. They should have put this in as an extension function in androidx-core-ktx.

私の意見では、この関数を基本クラスに追加するのは間違いでした。SDK31を最終的に実用化するまで、数年間は配列アクセス構文を使用できなくなったためminSdkVersionです。追加する前は、拡張関数を使用してこの機能を使用することは可能でしたが、その名前が基本クラスの拡張関数をシャドウするため、拡張関数を使用できなくなりました。また、lintは配列アクセス構文のエラーを表示しないため、使用すると実行時にクラッシュします。彼らはこれを拡張関数として androidx-core-ktx に入れるべきでした。

Edit: Looks like maybe this is fixed in an upcoming version, if I'm understanding "backport" correctly.

編集:「バックポート」を正しく理解していれば、これは今後のバージョンで修正される可能性があります。

👉 android - SparseArray error: Call requires API level S - Stack Overflow 

The core-ktx library defines extension functionSparseArray.set(). This method does not exist in the Android SDK until S, the currently in-development version. Many apps use this extension function and compile against pre-S SDKs, meaning it resolves to the library function. Such apps will run fine on earlier platform versions as well as S.

core-ktxライブラリでは、拡張関数として SparseArray.set() が定義されています。このメソッドは、Android S までのAndroid SDKには存在しません。多くのアプリはこの拡張関数を使用し、S以前のSDKに対してコンパイルしています。つまり、ライブラリの関数に解決されます。そのようなアプリは、Sだけでなく、それ以前のプラットフォームのバージョンでも問題なく実行されます。

When these apps are updated to compile against S, the Kotlin compiler will resolve calls to the S SDK function which only exists on devices running the S platform; however, these apps are expected to run against earlier platform versions. They will crash when run against pre-S platforms since the method does not exist.

これらのアプリを Android S に対してコンパイルするように更新すると、Kotlin コンパイラーは、S プラットフォームを実行しているデバイスにのみ存在する S SDK 関数の呼び出しを解決しますが、これらのアプリは以前のプラットフォームのバージョンに対して実行されます。S以前のプラットフォームで実行すると、このメソッドが存在しないためクラッシュします。

As far as I can tell, there is nothing that either app developers or the core-ktx library can do about this situation. The library cannot remove the function without breaking binary compatibility with dependent libraries and regressing functionality. The app developer cannot explicitly force Kotlin to call the extension function on earlier platforms, either in their app code or dependent libraries.

私の知る限り、アプリ開発者にもcore-ktxライブラリにも、この状況に対してできることは何もないようです。ライブラリは、依存ライブラリとのバイナリ互換性を破壊し、機能を後退させることなく、この関数を削除することができません。アプリ開発者は、アプリのコードや依存ライブラリで、以前のプラットフォームで拡張関数を呼び出すように明示的にKotlinに強制することはできません。

Extension function resolution policy of "member always wins" is problematic for Android SDKs

Android SDKでは「メンバーが常に勝つ」という拡張関数解決ポリシーが問題視されている

👉 Extension function resolution policy of "member always wins" is problematic for Android SDKs : KT-45968 

SparseArray.set was added as an alias for SparseArray.put in Android S.
Consider backporting that by rewriting SparseArray.set to SparseArray.put.

SparseArray.set はSparseArray.put のエイリアスとして Android S に追加されました。
SparseArray.setをSparseArray.put に書き換えてバックポートすることを検討するべし。

👉 Backport SparseArray.set [185547135] - Visible to Public - Issue Tracker 

対処方法

put(Int, Object) の形式に戻して修正されたバージョンのSDKを待つ。


mySparseArray[3] = someObject

  ↓

mySparseArray.put(3, someObject)


Cannot Run Git : Cannot identify version of git executable: no response – on startup

よく出ますよね?

このダイアログ。

Cannot Run Git : Cannot identify version of git executable: no response – on startup

Cannot Run Git : Cannot identify version of git executable: no response – on startu

調べてみると、IDEA Intellij のバグトラッカーに issue があります。

Even if the CLT is installed, if the background process is heavy (for example, after booting your mac), typing "git --version" into the terminal may result in no response for several tens of seconds.

I've had this issue on Mac a few times after a reboot and auto-reopen of the previous windows.
Easy fix: quit IntelliJ with Cmd+Q and reopen it.

I got this on Windows after a restart. As Filippo says, restarting the IDE works as a fix.

👉 Cannot identify version of git executable: no response – on startup : IDEA-219762 

 

Git の設定

一応、Git の設定画面を見てみましょう。


[Preferences]

  ↓

[Version Control]

  ↓

[Git]

Cannot Run Git : Cannot identify version of git executable: no response – on startu

確認したら、IDE (AndroidStudio など) をリスタートです。

 

まとめ

IDE 再起動でダイアログは出なくなり正常に戻ります。

OS が忙しい時の Git コマンドのレスポンスの遅さが IDE に影響を及ぼしてるようです。

👉 【Homebrew】git が2つある場合 【macOS】 


2021年 人気記事ベスト10 のアクセス増減にみるAndroid界隈

やみくもにアンテナ的に記事を撒いてますのでここで集計しておきます。

1.

👉 Google Play の残高 で LINEスタンプ を買う方法 
Google Play の残高 で LINEスタンプ を買う方法

LINEネタは強い。しかし、機能がリッチになるにつれて、ややこしさを叫ぶユーザーが激増。

国内では今後も一強のメッセージングアプリか。

2.

👉 Google Play ストア アプリのメニューが消えた?! 
Google Play ストア アプリのメニューが消えた

アプリのUI/UXの変更はユーザーをイライラさせることが多い。

これもそう。

アプリの自動更新のための操作と思われ、「自動更新」の意味が問われる。

3.

👉 【Android10】隠し機能の「画面録画機能(screenrecord)」を使うべし 
【Android10】隠し機能の「画面録画機能(screenrecord)」を使うべし

画面の静止画キャプチャだけでなく、それは動画の録画保存にも変化。

文春のキャプチャて受信者以外が一次的に取得できる方法があれば、それは個人情報漏洩。

4.

👉 【Android 公式】正しいアプリの終了方法 ← 
【Android 公式】正しいアプリの終了方法

個別のアプリの完全終了は雰囲気でしかない。

完全に終了すること大事。

再起動は、コールドスタートになるが完全にリフレッシュされている。

5.

👉 Android 端末 キーボード切り替え方法あれこれ 
Android 端末 キーボード切り替え方法あれこれ

キーボードアプリをサードパーティに依存する怖さの認識は甘い。

何のために、Google公式が手間をかけてキーボードアプリに力を入れているのか。

最終的には、Android権限をフルに利用した Google Gboard 一択になるのは時間の問題。

6.

👉 YouTubeに縦長動画をどうアップするべきか? 
YouTubeに縦長動画をどうアップするべきか

視聴するデバイスがPCではなく、いまやスマホ。横長では見づらい。

YouTube は強い。

テレビは数分で消すことになるくらいひどい。

7.

👉 【Android11】ジェスチャーボタン操作が変わっている件 
 【Android11】ジェスチャーボタン操作が変わっている件

OSの勧める新しい操作や機能に合わせていくのが王道。

ジェスチャーボタンについてもそう。

最終的には iPhone と Android は、全く同じになるのでは。

8.

👉 「単語リスト(ユーザー辞書)」が変換候補に表示されない場合 
「単語リスト(ユーザー辞書)」が変換候補に表示されない場合

Android OSの持つ「ユーザー辞書」機能は、開発側になんとなく虐げられてるイメージ。

端末ベンダーやキーボードアプリによっても変わってくるのが混乱の原因。

意図的に削除が必要なキャッシュは常にどこでも問題を引き起こしがちです。

9.

👉 Android端末ユーザー辞書に最新絵文字を追加する方法 
Android端末ユーザー辞書に最新絵文字を追加する方法

キャッシュの削除ともに意識すべきユーザー辞書を使う方法。

メールアドレス、名前、アカウント名、住所、電話番号など、よく使う文字列から登録しまくるのがよい。

10.

👉 Pixel 5 / 4a(5G) / 4a で ahamo は使えるのか 
Pixel 5 / 4a(5G) / 4a で ahamo は使えるのか

結局は、ブロードキャスト側 docomo に任せるしかない。

端末選びは焦らなくて良い。

50GMB出れば、動画もストレスなく見れる。

まとめ

全体的にアクセス数は、2021春をピークに下降。

今後はどうなるのか。


接種証明書アプリ使用時の設定「Reader/Writer, P2P」の意味不明さ

マイナンバーカードが必要

この記事のようにAndroidでは混乱する。

Androidの場合は、

- 設定画面から「Reader/Writer, P2P」をONにしてください。OFFになっている場合、マイナンバーカードを読み取りできません。

- 設定方法:ホーム画面→「アプリ一覧画面」を表示→[設定]→[接続済みの端末]→ [NFC/おサイフケータイ 設定]→[Reader/Writer, P2P]

- 設定画面から「おサイフケータイロック」をOFFにしてください。ONになっている場合、マイナンバーカードを読み取りできません。

- 設定方法:ホーム画面→「アプリ一覧画面」を表示→[設定]→[接続済みの端末] → [NFC/おサイフケータイ 設定]→[NFC/おサイフケータイロック]

- 設定画面から「機内モード」をOFFにしてください。ONになっている場合、マイナンバーカードを読み取りできません。

- 機種によっては、充電中にNFC機能が動作しない場合がございます。充電中である場合は、充電を止めて再試行してください。

- Bluetooth機能をONにしてください。

-利用者クライアントを使用する場合、WindowsPCとスマートフォンをBluetooth接続する必要があります。BluetoothがOFF設定だと接続できません。

-読み取りが全て完了するまで、かざし続けてください。素早くかざしたり、すぐにマイナンバーカードを離したりした場合、正確に読み取りできません。

- かざす位置が最適でない場合、マイナンバーカードを読み取りできません。機種毎のかざす位置は、こちらを確認してください。

- 金属物から離してください。マイナンバーカードとスマートフォンの間に金属物があると読み取れないことがあります。また金属の机においての読取りについても同様となります。

- Bluetooth接続の場合、無線LANとの無線周波数帯が同じため、同時に使用すると 電波が干渉し合い、通信速度の低下や中断、ネットワークが遮断させる場合があり ます。[アプリ一覧]-[設定]-[Wi-Fi]をタップし Wi-FiをOFFに設定したうえで、[アプリ一覧]-[設定]-[ Bluetooth]をタップしBluetooth接続をONに設定してください。

👉 接種証明書アプリ、ちゃんと使えた? iPhoneとAndroidで感じてしまう“格差”:ヤマーとマツの、ねえこれ知ってる?(3/4 ページ) - ITmedia NEWS 

「Reader/Writer, P2P」てのは、「NFC (かざすと反応) 」のことと思って良い。

以下の考え方を押さえておけば問題なく設定はできる。

-「Reader/Writer, P2P」はONにする。

-「NFC/おサイフケータイロック」は解除する。

-「機内モード」はOFFにする。

- Bluetooth は基本関係ない。

別になんの苦労もなくPixelユーザーは証明書をゲットしてるんだろうと思うがどうですか?

👉 COCOA は気にせず普通に アンインストール して良い hatena-bookmark
👉 マイナンバーカードの暗証番号入力間違い回数の確認やリセットする方法 hatena-bookmark

参考

👉 おサイフケータイ®を設定する | NFC/おサイフケータイ® | ツール・アプリケーション | XPERIA™ XZ1(エクスペリア エックスゼットワン)SOV36 | 取扱説明書 詳細版(オンラインマニュアル) | au 
👉 NFC/おサイフケータイ®を利用する 
👉 NFC/おサイフケータイ®を利用する 
👉 【公式】UQ mobile・UQ WiMAX|KDDI・UQコミュニケーションズ 
👉 ヘルプガイド | NFC通信 
👉 Reader/Writer, P2Pとはどこで扱う? - Google Pixel コミュニティ 
👉 Androidマイナンバーカードの読み取り方法 | マイナポイント事業 


日本語文字起こしに対応した「Google レコーダー」が音声入力として最強では?

最近、やっと更新されて日本語でも高精度な文字起こしができるようになりました。

👉 レコーダー - Google Play のアプリ 

レコーダーで、録音した音声を検索できます。会議、講義、バンド練習、家族の思い出など、なんでも録音して保存し、後で再生できます。レコーダーで、録音した音声の文字起こしとラベル付けが自動的に行われるため、大事な情報を簡単に見つけることができます。

✍ 編集

「語句の編集」から聞き直しながら意図する語句に編集できます。

また、録音した音声の前後の不要部分を書き起こし文字を見ながら「切り抜く」ことも可能です。

✍ 共有

以下の形式で共有することができます。

- 音声 (.m4a ファイル)
- 文字起こし (.gdoc .txt ファイル)
- 動画クリップ (.mp4 ファイル)

✍ まとめ

私がよく使うのは、テキスト編集画面から「全選択」でクリップボードへコピーしてからの好きなエディタに貼り付けです。

iPhoneやパソコンからもブラウザ経由で録音、文字起こししたアーカイブを確認できます。

👉 ブラウザ版 Recorder 

以上です。よろしくおねがいします。