workerスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。IDがどのように生成されているのか気になったのでざっくり調べた。悪名高いと言われる闇の話は置いておいて....とりあえず生成方法だけざっくり調べた。どのような手順で生成されるのか?という疑問はバージョンによって実装が異なるっぽかったので調べない。IDとはドキュメント見てもらえばわかるけどざっくり以下のようなもの。ランダムに生成される64ビットの数値を16進数文字列にしたもの端末の最初の設定時に生成される。IDは以下のような感じで簡単に取得できる。Nのコードから見てみる。IDを生成しているのはSettingsProvider.javaのensureSecureSettingAndroidIdSetLockedメソッドだね。全体の処理は以下のような感じ。usersの想定もされてる実装になってる。IDの生成処理は以下のような感じで実装されてる。SecureRandom().nextLong());SecureRandomでランダムなlong値を生成して、それをLong.toHexStringで16進数表現の文字列にする。IDってことになるね。値の一部しか返さないっぽいんだよね。-9223372036854775808~9223372036854775807の中の一部ってことだね。うーん...思ってた以上に範囲が狭い気もする...あと、SecureRandom.nextLongで生成される値によって16進数文字列にした時の文字列の長さは変わる。雑に以下のようなやつを実行してみればわかるけど、文字列の長さが16だったり、15だったり、14だったりする。System.out.println(androidId.length());}これが最初の気にしておかなければいけない点で書いた「ランダムに生成される64ビットの数値を16進数文字列にしたもの」なので文字数は固定ではないってこと。他のAndroidのバージョンではどう実装されているか全部のバージョン見るのは面倒なので、いくつかのバージョンだけ。