Android 识别ROM信息
国内的这么多ROM定制厂商真是烦啊,做个东西需要识别ROM信息分开处理真的很让人崩溃好吧。就算你们都要定制独一无二的ROM,能不能定制一个统一的协议,把自己的厂商名写在这个属性了?让大家都能直接拿到ROM信息不好么?这个世界能不能少点套路,多点真诚。
Build.DISPLAY
但很遗憾,各个厂商的ROM信息并不能成功拿到,所以就要通过一些特殊途径来获得ROM信息。
ADB shell 查看设备系统信息
通过使用ADB shell 的下面这个命令,就能够查询到设备的一些运行时的信息,然后在这些一大片的系统信息中去寻找对应ROM才会有的信息,通过这个去判定ROM信息。
getprop
比如,在MIUI系统中
ro.miui.ui.version.name
这行信息只有MiUi系统中才会有,通过这个,就能判断系统是不是MIUI系统。
在 Android 代码中可以通过这个方法来获取设备的系统信息,在通过事先测试出的各个ROM的独特信息,就能匹配出各个厂商的ROM。
p = Runtime.getRuntime().exec("getprop ro.miui.ui.version.name");
reader = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
line = reader.readLine();
最后分享一下我测试出的几个ROM厂商的独特信息,还有我包装的一个区分ROM的工具类。
> [ro.build.display.id]: [EMUI3.1_H60-L02_6.2.1] (华为)
> [ro.build.display.id]: [Flyme 5.2.1.1A] (魅族)
> [ro.miui.ui.version.name]: [V7] (小米)
> [ro.build.version.opporom]: [V3.0] (oppo)
以上是测试出的几个品牌厂商的ROM的信息
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 该工具类用来识别各种ROM型号。
* 通过获取Runtime,运行adb命令查看系统信息来识别不同的ROM
* Created by wlk on 2016/7/28.
*/
public class DistinguishRom {
public static final String MIUI = "miui";
public static final String EMUI = "EMUI";
public static final String FLYME = "Flyme";
public static final String COLOROS = "coloros";
public static final String UNKNOW = "unknow";
public static final String RUNTIME_MIUI = "ro.miui.ui.version.name";
public static final String RUNTIME_DISPLAY = "ro.build.display.id";
public static final String RUNTIME_OPPO = "ro.build.version.opporom";
public static String getRomInfo(){
String romInfo = null;
if (!StringUtils.isBlank(getRomProperty(RUNTIME_MIUI))){
romInfo = MIUI;
}else if (!StringUtils.isBlank(getRomProperty(RUNTIME_OPPO))){
romInfo = COLOROS;
}else if(getRomProperty(RUNTIME_DISPLAY).contains(EMUI)) {
romInfo = EMUI;
}else if (getRomProperty(RUNTIME_DISPLAY).contains(FLYME)){
romInfo = FLYME;
}else{
romInfo = UNKNOW;
}
return romInfo;
}
private static String getRomProperty(String prop) {
String line = "";
BufferedReader reader = null;
Process p = null;
try {
p = Runtime.getRuntime().exec("getprop "+prop);
reader = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
line = reader.readLine();
}catch (IOException e) {
e.printStackTrace();
}finally {
if(reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(p != null) {
p.destroy();
}
}
return line;
}
}