Androidはシミュレータを認識し、シミュレータか本物かを判断します


文書ディレクトリ
  • 前言
  • 原理
  • シミュレータ取り付け禁止apk
  • コード認識
  • 検証
  • 最後


  • 前言
    Android開発者にとってシミュレータは開発ツールですが、ユーザーにとっては ・の金儲けツールかもしれません. または その他の出発点にかかわらず、Android を認識し、シミュレータ登録や後続操作を禁止することも要求される.
    今日は簡単な検討をします.
    げんり
    シミュレータを識別する原理は、実は の違いを見つけることですが、これらの違いはどこにあるのでしょうか.例えば、キャリア、携帯電話カード、Bluetooth、各種センサーなどです.
    でも今のシミュレータもますます強くなってきて、 の携帯電話をシミュレートできるようになりました.
    頭が痛いのか、うっかり誤審してしまうので、シミュレータと実機の違いの回数で作る案も出ています シミュレータと実機の違いが3つを超えるとシミュレータになります.
    しかし、実際には、シミュレータほど先進的ではない古いバージョンの携帯電話もあります.
    シミュレータインストールapk禁止
    シミュレータの一般的なcpuアーキテクチャはx86のもので、build.gradleではx86のサポートを外すことができます.
            ndk {
                //      SO   
                abiFilters 'armeabi-v7a', 'arm64-v8a'
            }
    

    もちろんx 86の携帯電話もあるかもしれませんが、これは誤審です.今のところ完璧な解決策はないので、前述した が重要です.
    x 86のサポートを取り除くだけでは足りません.シミュレータもx 86アーキテクチャではないものもあるので、シミュレータと本物の違いをさらに見つけなければなりません.
    もちろん禁止しなくてもいいし、認識すればいいです.
    コード識別
    ここでは,Bluetooth,シリアル番号,センサ,cpuアーキテクチャなどの多重判定があるか否かを原理的に判断する.
    ここでおすすめのライブラリ:CacheEmulatorChecker
    呼び出しも簡単です.1行のコードでいいです.
           val emulator = EmulatorDetectUtil.isEmulator(this)
            if (emulator) {
                ToastUtils.show(this, "             ", Toast.LENGTH_LONG)
            }
    

    検証#ケンショウ#
    コード認識を禁止するシナリオ、現在検証されているシミュレータ:
  • 逍遥シミュレータ
  • ブルースタックシミュレータ
  • 夜神シミュレータ
  • 天天シミュレータ
  • テンセント手游助手
  • 雷電シミュレータ
  • MUMUシミュレータ
  • 魯大師携帯シミュレーション大師
  • および各種の主流の携帯電話のブランドの主流の機種、テストok
    最後に
    現在のところ、まだ完全で公開されていない解決策なので、誤審を避けるためには、userに判断するかどうかのフィールドを追加し、必要な場合に判断しなければならないなど、自分の業務に関連するフォールトトレランスメカニズムをしなければならない.
    最後に、もっと良い方法があれば、議論を歓迎します.