android模拟器終止解決方案?對于android開發者來說,模拟器是開發工具,但是對用戶來說,可能就是薅羊毛、找漏洞的賺錢工具,我來為大家科普一下關于android模拟器終止解決方案?以下内容希望對你有幫助!
對于android開發者來說,模拟器是開發工具,但是對用戶來說,可能就是薅羊毛、找漏洞的賺錢工具。
不管是活動風控還是内容保護等等其他的出發點,應要求可能會要識别Android模拟器,甚至禁止模拟器登錄或後續操作。
今天做個簡單的探讨。
原理識别模拟器的原理,其實就是找出模拟器和真機的差别,但是這些差别體現在哪呢,比如運營商、手機卡、藍牙、各種傳感器等等。
但是現在的模拟器也是越來越厲害了,可以模拟不同品牌的不同型号的不同版本的手機,而且有藍牙、可以打電話。
是不是很頭疼,一不小心就會誤判了,所以現在市面上有一種方案也是根據模拟器和真機差别的次數來做一個容錯機制,比如模拟器和真機超過3個差别,就判為模拟器。
但是實際上,有的老版本手機甚至還不如模拟器先進...所以容錯機制中還可以加上對用戶的區别對待,個别用戶不檢測等等。
禁止模拟器安裝apk模拟器一般的cpu架構都是x86的,我們可以在build.gradle中去掉對x86的支持。
ndk {
// 設置支持的SO庫架構
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
當然也有一些手機可能也是x86的,這就誤判了,因為目前來說還沒有比較完善的解決方案,所以前面所說的容錯機制就比較重要了。
僅僅是去掉x86的支持還是不夠的,因為有的模拟器也不是x86架構,所以還是要進一步找出模拟器和真機的區别。
當然也可以不禁止,識别出來就行。
代碼識别這裡還是原理中提到的,判斷有沒有藍牙、序列号、傳感器、cpu架構等等多重判斷。
這裡推薦一個庫:CacheEmulatorChecker
調用也比較簡單,一行代碼即可:
val emulator = EmulatorDetectUtil.isEmulator(this)
if (emulator) {
ToastUtils.show(this, "檢測到您的設備可能為模拟器", Toast.LENGTH_LONG)
}
禁止加代碼識别的方案,目前驗證過的模拟器:
以及各種主流手機品牌的主流機型,測試ok
最後目前來說,還是沒有完善且公開的解決方案,所以為避免誤判,還是要根據自己的業務做相關的容錯機制,比如給user加個是否要判斷的字段,要的情況下再判斷,否則放過。
看到最後,如果你有更好的方法,歡迎讨論。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!