Android检测模拟器
1. 前言
模擬器大家都應(yīng)該很熟悉的吧!現(xiàn)在市面上的模擬器多的數(shù)不清,例如:雷電模擬器、夜神模擬器等等。而因?yàn)槟M器所搭載的Android系統(tǒng)是閹割過(guò)的,一些安全相關(guān)的功能都沒(méi)有了。這就造成了一個(gè)安全問(wèn)題,在模擬器運(yùn)行的APP,可被動(dòng)態(tài)調(diào)試、抓取數(shù)據(jù)等,從而增大APP被破解、敏感數(shù)據(jù)遭泄露的風(fēng)險(xiǎn)。所以一些公司就會(huì)禁止用戶(hù)在模擬器中使用他們的APP。
那怎么檢測(cè)APP當(dāng)前運(yùn)行的環(huán)境是模擬器呢?接下來(lái)我就介紹一個(gè)方案給大家吧!
2. 解決方案
網(wǎng)上相關(guān)資料其實(shí)蠻多的,但是因?yàn)槟M器的技術(shù)也在逐步增長(zhǎng),所以有些資料其實(shí)并沒(méi)有完全有用,還是會(huì)出現(xiàn)無(wú)法檢測(cè)某些模擬器。
我在GitHub上發(fā)現(xiàn)了一個(gè)開(kāi)源項(xiàng)目 anti-emulator 。經(jīng)測(cè)試可以檢測(cè)出市面上較常用的模擬器。我將關(guān)鍵代碼提取了出來(lái),封裝成一個(gè)module,詳見(jiàn) lib_anti_emulator。
我封裝了兩個(gè)方法,如下所示:
/*** 檢測(cè)是否是模擬器** @param context 上下文* @return true:是模擬器;false:不是模擬器*/ public static boolean check(Context context) {try {return isTaintTrackingDetected(context) || isMonkeyDetected() || isDebugged()|| isQEmuEnvDetected(context);} catch (Exception e) {e.printStackTrace();return false;} }/*** 檢測(cè)是否是模擬器,安全模式<br>* 機(jī)制較弱,可避免部分真機(jī)被識(shí)別為模擬器,但是這也造成了有些模擬器無(wú)法被識(shí)別** @param context 上下文* @return true:是模擬器;false:不是模擬器*/ public static boolean checkSafely(Context context) {try {return isTaintTrackingDetected(context) || isMonkeyDetected() || isDebugged()|| isQEmuEnvSafeDetected(context);} catch (Exception e) {e.printStackTrace();return false;} }這兩個(gè)方法的區(qū)分,看注釋大家也應(yīng)該很清楚了。而這也是 anti-emulator 的最大缺點(diǎn),可以說(shuō)是檢測(cè)機(jī)制太強(qiáng),或者說(shuō)某些真機(jī)系統(tǒng)被魔改了,造成真機(jī)會(huì)被錯(cuò)誤識(shí)別為模擬器的bug。所以如果使用 check 方法,為了避免用戶(hù)無(wú)法正常使用APP,就需要我們?cè)僮鲆恍┨幚?#xff0c;例如當(dāng)被檢測(cè)為模擬器時(shí),可以彈出窗口,引導(dǎo)用戶(hù)上報(bào)相關(guān)真機(jī)信息,然后后臺(tái)審核并記錄這些信息,將此用戶(hù)所使用的真機(jī)加入白名單,免檢測(cè)模擬器。
當(dāng)然如果APP不需要這么強(qiáng)的檢測(cè)機(jī)制的話(huà),那就用 checkSafely 方法就行了。
3. 演示
我在我的 BlogDemo 中已加入演示代碼,感興趣的可以去看看。下面是演示的相關(guān)內(nèi)容,演示環(huán)境是雷電模擬器。
3.1 標(biāo)準(zhǔn)模式
能夠正確檢測(cè)模擬器,提示“是模擬器”。
3.2 安全模式
不能夠正確檢測(cè)模擬器,提示“不是模擬器”。PS:雷電模擬器的仿真程度真高,所以平時(shí)大家調(diào)試APP的時(shí)候,如果不想用真機(jī),可以試試?yán)纂娔M器哦!比起 Android Studio 自帶的模擬器,不會(huì)那么吃 CPU 和內(nèi)存。
如果想進(jìn)一步交流和學(xué)習(xí)的同學(xué),可以加一下QQ群哦!
總結(jié)
以上是生活随笔為你收集整理的Android检测模拟器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 超详细的Storyboard的解析——O
- 下一篇: Android 10.0 进入recov