如何判斷一個APP運行於Android模擬器


也是出於感興趣,類似於我們有時候不希望自己的程序運行在Windows虛擬機一樣,有時候也有人會會關心自己寫的APP是否運行於Android模擬器下面

 

以下是網上2種討論最多的辦法:

(1)判斷IMEI

    public static boolean isEmulatorByImei(Context context){
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
        String imei = tm.getDeviceId();
        Log.e("imei=",imei);
        if (imei == null || imei.equals("000000000000000")){  
            return true;  
        }  
        return false;  
    }

主要目的是判斷IMEI是否為”000000000000000“從而推斷是否運行於模擬器下面,是就說明肯定是模擬器

(2)判斷Build.MODEL

    private boolean isEmulatorByBuildModel() {
        Log.e("MODEL=",Build.MODEL);
        Log.e("MANUFACTURER=",Build.MANUFACTURER);
        return ( Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk") );
    }

如果Build.MODEL是sdk或者google_sdk說明是運行在模擬器下面

 

不過第一種針對IMEI的方法並不是很靠譜,因為Android模擬器的IMEI可以修改,例如我是Froyo的模擬器,可以通過修改tools下面的emulator.exe的內容從而實現修改模擬器IMEI:

 

(修改前)

(修改后)

(修改后測試)

不過參考的帖子中有人提到Android4.X的模擬器不行,這個我沒有作進一步測試了。

 

另外還有一種我在閱讀Froyo代碼時候想到的辦法,查看屬性(adb shell getprop):

這個屬性在模擬器中也是獨有的,參考/init.rc的腳本就可以知道:

# adbd on at boot in emulator

on property:ro.kernel.qemu=1

    start adbd

模擬器中還有一些一般固定的參數,如DNS之類的,或許可以用於預判的還有不少


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM