OSUtils.java
17.3 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
package com.polysoft.nafmii.utils;
import android.os.Environment;
import android.text.TextUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OSUtils {
private static final String KEY_DISPLAY_ID = "ro.build.display.id";
private static final String KEY_BASE_OS_VERSION = "ro.build.version.base_os";
private static final String KEY_CLIENT_ID_BASE = "ro.com.google.clientidbase";
// 小米 : MIUI
private static final String KEY_MIUI_VERSION = "ro.build.version.incremental"; // "7.6.15"
private static final String KEY_MIUI_VERSION_NANE = "ro.miui.ui.version.name"; // "V8"
private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code"; // "6"
private static final String VALUE_MIUI_CLIENT_ID_BASE = "android-xiaomi";
// 华为 : EMUI
private static final String KEY_EMUI_VERSION = "ro.build.version.emui"; // "EmotionUI_3.0"
private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level"; //
private static final String KEY_EMUI_SYSTEM_VERSION = "ro.confg.hw_systemversion"; //
// "T1-A21wV100R001C233B008_SYSIMG"
// 魅族 : Flyme
private static final String KEY_FLYME_PUBLISHED = "ro.flyme.published"; // "true"
private static final String KEY_FLYME_SETUP = "ro.meizu.setupwizard.flyme"; // "true"
private static final String VALUE_FLYME_DISPLAY_ID_CONTAIN = "Flyme"; // "Flyme OS 4.5.4.2U"
// OPPO : ColorOS
private static final String KEY_COLOROS_VERSION = "ro.oppo.theme.version"; // "703"
private static final String KEY_COLOROS_THEME_VERSION = "ro.oppo.version"; // ""
private static final String KEY_COLOROS_ROM_VERSION = "ro.rom.different.version"; //
private static final String VALUE_COLOROS_BASE_OS_VERSION_CONTAIN = "OPPO"; // "OPPO/R7sm
// "ColorOS2.1"
// /R7sm:5.1.1/LMY47V/1440928800:user/release-keys"
private static final String VALUE_COLOROS_CLIENT_ID_BASE = "android-oppo";
// vivo : FuntouchOS
private static final String KEY_FUNTOUCHOS_BOARD_VERSION = "ro.vivo.board.version"; // "MD"
private static final String KEY_FUNTOUCHOS_OS_NAME = "ro.vivo.os.name"; // "Funtouch"
private static final String KEY_FUNTOUCHOS_OS_VERSION = "ro.vivo.os.version"; // "3.0"
private static final String KEY_FUNTOUCHOS_DISPLAY_ID = "ro.vivo.os.build.display.id"; //
// "FuntouchOS_3.0"
private static final String KEY_FUNTOUCHOS_ROM_VERSION = "ro.vivo.rom.version"; // "rom_3.1"
private static final String VALUE_FUNTOUCHOS_CLIENT_ID_BASE = "android-vivo";
// Samsung
private static final String VALUE_SAMSUNG_BASE_OS_VERSION_CONTAIN = "samsung"; // "samsung
// /zeroltezc/zeroltechn:6.0.1/MMB29K/G9250ZCU2DQD1:user/release-keys"
private static final String VALUE_SAMSUNG_CLIENT_ID_BASE = "android-samsung";
// Sony
private static final String KEY_SONY_PROTOCOL_TYPE = "ro.sony.irremote.protocol_type"; // "2"
private static final String KEY_SONY_ENCRYPTED_DATA = "ro.sony.fota.encrypteddata"; //
private static final String VALUE_SONY_CLIENT_ID_BASE = "android-sonyericsson";
// "supported"
// 乐视 : eui
private static final String KEY_EUI_VERSION = "ro.letv.release.version"; // "5.9.023S"
private static final String KEY_EUI_VERSION_DATE = "ro.letv.release.version_date"; // "5.9
// .023S_03111"
private static final String KEY_EUI_NAME = "ro.product.letv_name"; // "乐1s"
private static final String KEY_EUI_MODEL = "ro.product.letv_model"; // "Letv X500"
// 金立 : amigo
private static final String KEY_AMIGO_ROM_VERSION = "ro.gn.gnromvernumber"; // "GIONEE ROM5.0
// .16"
private static final String KEY_AMIGO_SYSTEM_UI_SUPPORT = "ro.gn.amigo.systemui.support"; //
private static final String VALUE_AMIGO_DISPLAY_ID_CONTAIN = "amigo"; // "amigo3.5.1"
// "yes"
private static final String VALUE_AMIGO_CLIENT_ID_BASE = "android-gionee";
// 酷派 : yulong
private static final String KEY_YULONG_VERSION_RELEASE = "ro.yulong.version.release"; // "5.1
// .046.P1.150921.8676_M01"
private static final String KEY_YULONG_VERSION_TAG = "ro.yulong.version.tag"; // "LC"
private static final String VALUE_YULONG_CLIENT_ID_BASE = "android-coolpad";
// HTC : Sense
private static final String KEY_SENSE_BUILD_STAGE = "htc.build.stage"; // "2"
private static final String KEY_SENSE_BLUETOOTH_SAP = "ro.htc.bluetooth.sap"; // "true"
private static final String VALUE_SENSE_CLIENT_ID_BASE = "android-htc-rev";
// LG : LG
private static final String KEY_LG_SW_VERSION = "ro.lge.swversion"; // "D85720b"
private static final String KEY_LG_SW_VERSION_SHORT = "ro.lge.swversion_short"; // "V20b"
private static final String KEY_LG_FACTORY_VERSION = "ro.lge.factoryversion"; // "LGD857AT-00
// -V20b-CUO-CN-FEB-17-2015+0"
// 联想
private static final String KEY_LENOVO_DEVICE = "ro.lenovo.device"; // "phone"
private static final String KEY_LENOVO_PLATFORM = "ro.lenovo.platform"; // "qualcomm"
private static final String KEY_LENOVO_ADB = "ro.lenovo.adb"; // "apkctl,speedup"
private static final String VALUE_LENOVO_CLIENT_ID_BASE = "android-lenovo";
/**
* ROM 类型
*/
private static final ROM ROM_TYPE = initRomType();
/**
* 获取 ROM 类型
*
* @return ROM
*/
public static ROM getRomType() {
return ROM_TYPE;
}
public static boolean isMiui() {
return getRomType() == ROM.EMUI;
}
public static boolean isFlyme() {
return getRomType() == ROM.Flyme;
}
/**
* 初始化 ROM 类型
*/
private static ROM initRomType() {
ROM rom = ROM.Other;
FileInputStream is = null;
try {
Properties buildProperties = new Properties();
is = new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"));
buildProperties.load(is);
if (buildProperties.containsKey(KEY_MIUI_VERSION_NANE) || buildProperties.containsKey(KEY_MIUI_VERSION_CODE)) {
// MIUI
rom = ROM.MIUI;
if (buildProperties.containsKey(KEY_MIUI_VERSION_NANE)) {
String versionName = buildProperties.getProperty(KEY_MIUI_VERSION_NANE);
if (!TextUtils.isEmpty(versionName) && versionName.matches("[Vv]\\d+")) { // V8
try {
rom.setBaseVersion(Integer.parseInt(versionName.split("[Vv]")[1]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (buildProperties.containsKey(KEY_MIUI_VERSION)) {
String versionStr = buildProperties.getProperty(KEY_MIUI_VERSION);
if (!TextUtils.isEmpty(versionStr) && versionStr.matches("[\\d.]+")) {
rom.setVersion(versionStr);
}
}
} else if (buildProperties.containsKey(KEY_EMUI_VERSION) || buildProperties.containsKey(KEY_EMUI_API_LEVEL)
|| buildProperties.containsKey(KEY_EMUI_SYSTEM_VERSION)) {
// EMUI
rom = ROM.EMUI;
if (buildProperties.containsKey(KEY_EMUI_VERSION)) {
String versionStr = buildProperties.getProperty(KEY_EMUI_VERSION);
Matcher matcher = Pattern.compile("EmotionUI_([\\d.]+)").matcher(versionStr); // EmotionUI_3.0
if (!TextUtils.isEmpty(versionStr) && matcher.find()) {
try {
String version = matcher.group(1);
rom.setVersion(version);
rom.setBaseVersion(Integer.parseInt(version.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_FLYME_SETUP) || buildProperties.containsKey(KEY_FLYME_PUBLISHED)) {
// Flyme
rom = ROM.Flyme;
if (buildProperties.containsKey(KEY_DISPLAY_ID)) {
String versionStr = buildProperties.getProperty(KEY_DISPLAY_ID);
Matcher matcher =
Pattern.compile("Flyme[^\\d]*([\\d.]+)[^\\d]*").matcher(versionStr);
// Flyme OS 4.5.4.2U
if (!TextUtils.isEmpty(versionStr) && matcher.find()) {
try {
String version = matcher.group(1);
rom.setVersion(version);
rom.setBaseVersion(Integer.parseInt(version.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_COLOROS_VERSION) || buildProperties.containsKey(KEY_COLOROS_THEME_VERSION)
|| buildProperties.containsKey(KEY_COLOROS_ROM_VERSION)) {
// ColorOS
rom = ROM.ColorOS;
if (buildProperties.containsKey(KEY_COLOROS_ROM_VERSION)) {
String versionStr = buildProperties.getProperty(KEY_COLOROS_ROM_VERSION);
Matcher matcher = Pattern.compile("ColorOS([\\d.]+)").matcher(versionStr); //
// ColorOS2.1
if (!TextUtils.isEmpty(versionStr) && matcher.find()) {
try {
String version = matcher.group(1);
rom.setVersion(version);
rom.setBaseVersion(Integer.parseInt(version.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_FUNTOUCHOS_OS_NAME) || buildProperties.containsKey(KEY_FUNTOUCHOS_OS_VERSION)
|| buildProperties.containsKey(KEY_FUNTOUCHOS_DISPLAY_ID)) {
// FuntouchOS
rom = ROM.FuntouchOS;
if (buildProperties.containsKey(KEY_FUNTOUCHOS_OS_VERSION)) {
String versionStr = buildProperties.getProperty(KEY_FUNTOUCHOS_OS_VERSION);
if (!TextUtils.isEmpty(versionStr) && versionStr.matches("[\\d.]+")) { // 3.0
try {
rom.setVersion(versionStr);
rom.setBaseVersion(Integer.parseInt(versionStr.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_EUI_VERSION) || buildProperties.containsKey(KEY_EUI_NAME)
|| buildProperties.containsKey(KEY_EUI_MODEL)) {
// EUI
rom = ROM.EUI;
if (buildProperties.containsKey(KEY_EUI_VERSION)) {
String versionStr = buildProperties.getProperty(KEY_EUI_VERSION);
Matcher matcher = Pattern.compile("([\\d.]+)[^\\d]*").matcher(versionStr); //
// 5.9.023S
if (!TextUtils.isEmpty(versionStr) && matcher.find()) {
try {
String version = matcher.group(1);
rom.setVersion(version);
rom.setBaseVersion(Integer.parseInt(version.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_AMIGO_ROM_VERSION) || buildProperties.containsKey(KEY_AMIGO_SYSTEM_UI_SUPPORT)) {
// amigo
rom = ROM.AmigoOS;
if (buildProperties.containsKey(KEY_DISPLAY_ID)) {
String versionStr = buildProperties.getProperty(KEY_DISPLAY_ID);
Matcher matcher =
Pattern.compile("amigo([\\d.]+)[a-zA-Z]*").matcher(versionStr); //
// "amigo3.5.1"
if (!TextUtils.isEmpty(versionStr) && matcher.find()) {
try {
String version = matcher.group(1);
rom.setVersion(version);
rom.setBaseVersion(Integer.parseInt(version.split("\\.")[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (buildProperties.containsKey(KEY_SONY_PROTOCOL_TYPE) || buildProperties.containsKey(KEY_SONY_ENCRYPTED_DATA)) {
// Sony
rom = ROM.Sony;
} else if (buildProperties.containsKey(KEY_YULONG_VERSION_RELEASE) || buildProperties.containsKey(KEY_YULONG_VERSION_TAG)) {
// YuLong
rom = ROM.YuLong;
} else if (buildProperties.containsKey(KEY_SENSE_BUILD_STAGE) || buildProperties.containsKey(KEY_SENSE_BLUETOOTH_SAP)) {
// Sense
rom = ROM.Sense;
} else if (buildProperties.containsKey(KEY_LG_SW_VERSION) || buildProperties.containsKey(KEY_LG_SW_VERSION_SHORT)
|| buildProperties.containsKey(KEY_LG_FACTORY_VERSION)) {
// LG
rom = ROM.LG;
} else if (buildProperties.containsKey(KEY_LENOVO_DEVICE) || buildProperties.containsKey(KEY_LENOVO_PLATFORM)
|| buildProperties.containsKey(KEY_LENOVO_ADB)) {
// Lenovo
rom = ROM.Lenovo;
} else if (buildProperties.containsKey(KEY_DISPLAY_ID)) {
String displayId = buildProperties.getProperty(KEY_DISPLAY_ID);
if (!TextUtils.isEmpty(displayId)) {
if (displayId.contains(VALUE_FLYME_DISPLAY_ID_CONTAIN)) {
return ROM.Flyme;
} else if (displayId.contains(VALUE_AMIGO_DISPLAY_ID_CONTAIN)) {
return ROM.AmigoOS;
}
}
} else if (buildProperties.containsKey(KEY_BASE_OS_VERSION)) {
String baseOsVersion = buildProperties.getProperty(KEY_BASE_OS_VERSION);
if (!TextUtils.isEmpty(baseOsVersion)) {
if (baseOsVersion.contains(VALUE_COLOROS_BASE_OS_VERSION_CONTAIN)) {
return ROM.ColorOS;
} else if (baseOsVersion.contains(VALUE_SAMSUNG_BASE_OS_VERSION_CONTAIN)) {
return ROM.SamSung;
}
}
} else if (buildProperties.containsKey(KEY_CLIENT_ID_BASE)) {
String clientIdBase = buildProperties.getProperty(KEY_CLIENT_ID_BASE);
switch (clientIdBase) {
case VALUE_MIUI_CLIENT_ID_BASE:
return ROM.MIUI;
case VALUE_COLOROS_CLIENT_ID_BASE:
return ROM.ColorOS;
case VALUE_FUNTOUCHOS_CLIENT_ID_BASE:
return ROM.FuntouchOS;
case VALUE_SAMSUNG_CLIENT_ID_BASE:
return ROM.SamSung;
case VALUE_SONY_CLIENT_ID_BASE:
return ROM.Sony;
case VALUE_YULONG_CLIENT_ID_BASE:
return ROM.YuLong;
case VALUE_SENSE_CLIENT_ID_BASE:
return ROM.Sense;
case VALUE_LENOVO_CLIENT_ID_BASE:
return ROM.Lenovo;
case VALUE_AMIGO_CLIENT_ID_BASE:
return ROM.AmigoOS;
default:
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return rom;
}
public enum ROM {
MIUI, // 小米
Flyme, // 魅族
EMUI, // 华为
ColorOS, // OPPO
FuntouchOS, // vivo
SmartisanOS, // 锤子
EUI, // 乐视
Sense, // HTC
AmigoOS, // 金立
_360OS, // 奇酷360
NubiaUI, // 努比亚
H2OS, // 一加
YunOS, // 阿里巴巴
YuLong, // 酷派
SamSung, // 三星
Sony, // 索尼
Lenovo, // 联想
LG, // LG
Google, // 原生
Other; // CyanogenMod, Lewa OS, 百度云OS, Tencent OS, 深度OS, IUNI OS, Tapas OS, Mokee
private int baseVersion = -1;
private String version;
public int getBaseVersion() {
return baseVersion;
}
void setBaseVersion(int baseVersion) {
this.baseVersion = baseVersion;
}
public String getVersion() {
return version;
}
void setVersion(String version) {
this.version = version;
}
}
}