请教怎么判断设备是否是android的模拟器

如题所述

android.os.Build.BRAND:获取设备品牌

如果获取的Landroid/os/Build;->BRAND的值为 "generic"则为模拟器上运行。
android.os.Build.MODEL :获取手机的型号 设备名称。
如果发现Landroid/os/Build;->MODEL 为"sdk",则为模拟器上运行。
代码示例:

1 const-string v0, "phone"
2
3 invoke-virtual {p0, v0}, Lcom/xxx/LoadingActivity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
4
5 move-result-object v0
6
7 check-cast v0, Landroid/telephony/TelephonyManager;
8
9 invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getSubscriberId()Ljava/lang/String;
10
11 sget-object v0, Landroid/os/Build;->BRAND:Ljava/lang/String;
12
13 invoke-virtual {v0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
14
15 move-result-object v0
16
17 const-string v1, "generic"
18
19 invoke-virtual {v0, v1}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
20
21 move-result v0
22
23 const/16 v0, -1
24
25 if-eq v0, v2, :cond_0
26
27 sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String;
28
29 invoke-virtual {v0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
30
31 move-result-object v0
32
33 const-string v1, "sdk"
34
35 invoke-virtual {v0, v1}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
36
37 move-result v0
38
39 if-eq v0, v2, :cond_0
40
41 invoke-virtual {p0}, Lcom/xxx/LoadingActivity;->finish()V
42
43 :cond_0
44 iget-object v0, p0, Lcom/xxx/LoadingActivity;->b:Landroid/content/SharedPreferences;
45
46 invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

以下信息可以被用来判断是否在模拟器上运行
模拟器输出的信息

1 C:\Users\dell>adb shell getprop
2
3 [ro.kernel.qemu]:[1]
4 [ro.hardware]:[goldfish]
5 [ro.build.tags]:[test-keys]
6 [ro.product.model]:[sdk]
7 [ro.product.brand]:[generic]
8 [ro.product.name]:[sdk]
9 [ro.product.device]:[generic]
10 [ro.product.board]:[]
11 [ro.product.manufacturer]:[unknown]
12 [ro.board.platform]:[]
13 [ro.build.product]:[generic]
14 [ro.build.fingerprint]:[generic/sdk/generic:2.3.1/GSI11/93351:eng/test-keys]
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答