本文主要是介绍八种方法检测是否在模拟器上运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
检查特定的几个关键点
0×1
检测“/dev/socket/qemud”,“/dev/qemu_pipe”这两个通道
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private static String [ ] known_pipes = { "/dev/socket/qemud" , "/dev/qemu_pipe" } ; public boolean checkPipes ( ) { for ( int i = 0 ; i < known_pipes . length ; i ++ ) { String pipes = known_pipes [ i ] ; File qemu_socket = new File ( pipes ) ; if ( qemu_socket . exists ( ) ) { Log . v ( "Result:" , "Find pipes!" ) ; return true ; } } Log . v ( "Result:" , "Not Find pipes!" ) ; return false ; } |
0×2
// 检测驱动文件内容
// 读取文件内容,然后检查已知QEmu的驱动程序的列表
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | private static String [ ] known_qemu_drivers = { "goldfish" } ; public static Boolean CheckQEmuDriverFile ( ) { File driver_file = new File ( "/proc/tty/drivers" ) ; if ( driver_file . exists ( ) && driver_file . canRead ( ) ) { byte [ ] data = new byte [ ( int ) driver_file . length ( ) ] ; try { InputStream inStream = new FileInputStream ( driver_file ) ; inStream . read ( data ) ; inStream . close ( ) ; } catch ( FileNotFoundException e ) { // TODO 自动生成的 catch 块 e . printStackTrace ( ) ; } catch ( IOException e ) { // TODO 自动生成的 catch 块 e . printStackTrace ( ) ; } String driver_data = new String ( data ) ; for ( String known_qemu_driver : FindEmulatorDemo . known_qemu_drivers ) { if ( driver_data . indexOf ( known_qemu_driver ) != - 1 ) { Log . v ( "Result:" , "Find known_qemu_drivers!" ) ; return true ; } } } Log . v ( "Result:" , "Not Find known_qemu_drivers!" ) ; return false ; } |
0×3
//检测模拟器上特有的几个文件
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private static String [ ] known_files = { "/system/lib/libc_malloc_debug_qemu.so" , "/sys/qemu_trace" , "/system/bin/qemu-props" } ; public static Boolean CheckEmulatorFiles ( ) { for ( int i = 0 ; i < known_files . length ; i ++ ) { String file_name = known_files [ i ] ; File qemu_file = new File ( file_name ) ; if ( qemu_file . exists ( ) ) { Log . v ( "Result:" , "Find Emulator Files!" ) ; return true ; } } Log . v ( "Result:" , "Not Find Emulator Files!" ) ; return false ; } |
检查模拟器系统的一些信息
0×4
// 检测模拟器默认的电话号码
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private static String [ ] known_numbers = { "15555215554" , "15555215556" , "15555215558" , "15555215560" , "15555215562" , "15555215564" , "15555215566" , "15555215568" , "15555215570" , "15555215572" , "15555215574" , "15555215576" , "15555215578" , "15555215580" , "15555215582" , "15555215584" , } ; public static Boolean CheckPhoneNumber ( Context context ) { TelephonyManager telephonyManager = ( TelephonyManager ) context . getSystemService ( Context . TELEPHONY_SERVICE ) ; String phonenumber = telephonyManager . getLine1Number ( ) ; for ( String number : known_numbers ) { if ( number . equalsIgnoreCase ( phonenumber ) ) { Log . v ( "Result:" , "Find PhoneNumber!" ) ; return true ; } } Log . v ( "Result:" , "Not Find PhoneNumber!" ) ; return false ; } |
0×5
//检测设备IDS 是不是 “000000000000000”
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private static String [ ] known_device_ids = { "000000000000000" // 默认ID } ; public static Boolean CheckDeviceIDS ( Context context ) { TelephonyManager telephonyManager = ( TelephonyManager ) context . getSystemService ( Context . TELEPHONY_SERVICE ) ; String device_ids = telephonyManager . getDeviceId ( ) ; for ( String know_deviceid : known_device_ids ) { if ( know_deviceid . equalsIgnoreCase ( device_ids ) ) { Log . v ( "Result:" , "Find ids: 000000000000000!" ) ; return true ; } } Log . v ( "Result:" , "Not Find ids: 000000000000000!" ) ; return false ; } |
0×6
// 检测imsi id是不是“310260000000000”
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private static String [ ] known_imsi_ids = { "310260000000000" // 默认的 imsi id } ; public static Boolean CheckImsiIDS ( Context context ) { TelephonyManager telephonyManager = ( TelephonyManager ) context . getSystemService ( Context . TELEPHONY_SERVICE ) ; String imsi_ids = telephonyManager . getSubscriberId ( ) ; for ( String know_imsi : known_imsi_ids ) { if ( know_imsi . equalsIgnoreCase ( imsi_ids ) ) { Log . v ( "Result:" , "Find imsi ids: 310260000000000!" ) ; return true ; } } Log . v ( "Result:" , "Not Find imsi ids: 310260000000000!" ) ; return false ; } |
0×7
//检测手机上的一些硬件信息
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static Boolean CheckEmulatorBuild ( Context context ) { String BOARD = android . os . Build . BOARD ; String BOOTLOADER = android . os . Build . BOOTLOADER ; String BRAND = android . os . Build . BRAND ; String DEVICE = android . os . Build . DEVICE ; String HARDWARE = android . os . Build . HARDWARE ; String MODEL = android . os . Build . MODEL ; String PRODUCT = android . os . Build . PRODUCT ; if ( BOARD == "unknown" || BOOTLOADER == "unknown" || BRAND == "generic" || DEVICE == "generic" || MODEL == "sdk" || PRODUCT == "sdk" || HARDWARE == "goldfish" ) { Log . v ( "Result:" , "Find Emulator by EmulatorBuild!" ) ; return true ; } Log . v ( "Result:" , "Not Find Emulator by EmulatorBuild!" ) ; return false ; } |
0×8
//检测手机运营商家
代码demo:
Java
1 2 3 4 5 6 7 8 9 10 11 | public static boolean CheckOperatorNameAndroid ( Context context ) { String szOperatorName = ( ( TelephonyManager ) context . getSystemService ( "phone" ) ) . getNetworkOperatorName ( ) ; if ( szOperatorName . toLowerCase ( ) . equals ( "android" ) == true ) { Log . v ( "Result:" , "Find Emulator by OperatorName!" ) ; return true ; } Log . v ( "Result:" , "Not Find Emulator by OperatorName!" ) ; return false ; } |
我自己模拟器上的测试结果:
这篇关于八种方法检测是否在模拟器上运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!