adb shell 查看系统属性(用来判断特殊的操作系统)

摘要:
3.判断特殊的操作系统——获取需要研究的系统属性,输入adbshell获取魅族系统属性:首先输入cmd,然后输入adbsShell命令进入adbshellC:Users Administrator˃adbshellshell@mx4pro:/$输入系统目录shell@mx4pro :/$ cdsystemcdsystemshell@mx4pro:/system$查看系统属性shell@mx4pro:/system$catbuild.propcatbuild.prop#beginbuildproperties#autogeneratedbybuildinfo.shro.build.cta=nontaro.buld.id=KTU84Pro.built.mask.id=4.4.4-1423716396_woro.buld.args=ro.build.内部.id=4.4.4-20150212124636ro.buld.version.incremental=m76.Flyme_OS_ 4.2.2.1.2015022124636ro。建筑版本sdk=19ro。建筑版本codename=RELro。建筑版本释放shell@mx4pro:/system$catbuild.prop|grepFlymecatbuild.prop|grepFlymero.build.encincrement=m76.Flyme_OS_ 4.2.2.1.2015022124636ro.build.display.id=FlymeOS4.2.2.1Uro.buld。description=meizu_mx4pro-user4.4.4KTU84Pm76.Flyme_OS_4.2.2.1.20150212124636release-keystro.build。指纹=魅族/魅族_mx4pro/mx4pro:4.4.4/KTU84P/m76.Flyme_OS_4.2.2.1.20150212124636:用户/release-keysshell@mx4pro:/system$选择四个属性:ro.build.version.incredmentalro.builld.display.idro.build.descriptionro。在安装了魅族操作系统的另一台设备上构建指纹,重复上述步骤。最后,将发现属性ro.build.display。id可以作为魅族操作系统的唯一功能。
一般来讲,在android程序开发中进行需要判断设备类型和系统版本
1、设备类型判断(android.os.Build.MODEL
比如判断属于Google Nexus 5,Nexus 7,MIUI v5, MIUI v6,三星设备,魅族设备等;
这类型的问题都使用的android.os.Build.MODEL来判断,android.os.Build.MODEL是一个String变量,可以根据String中一些特殊字段来判断android设备属于什么设备,比如判断Nexus 7,代码入下
public static booleanisN7() {
    return "Nexus 7".equals(android.os.Build.MODEL);
}
所以平时开发过程中如果不知道一个设备的MODEL值,写个测试程序输出android.os.Build.MODEL值,然后再将该值用到我么的程序中参与判断。
2、系统版本判断(api版本-android.os.Build.VERSION.SDK_INT
比如判断系统是属于2.3, 3.0, 4.4, 5.0 等,这种属性判断使用的是系统的android.os.Build.VERSION.SDK_INT变量。
最常用的场景是用来判断一些系统函数的api版本,比如有些方法只有高版本的api才有,低版本上使用会导致程序崩溃。
但是还有一种场景导致还要第三种方法才能搞定
使用场景:现在操作系统大多是开源的,默认是google 的android系统,但是别忘了还有魅族的Flyme OS 和小米的 Miui,它们是android的变种。如果用非小米手机也装上了miui,后者是非魅族手机装上了魅族的Flyme OS,这种情况怎么判断呢。拿魅族来说:显然这个时候不能用判断设备类型的方式,因为非魅族设备安装了魅族系统。所以这个时候只能判断这个操作系统是魅族的Flyme OS,它的操作系统应该具备一些它自己的特性,所以只要找到一个唯一的特性就可以解决上面的问题了。
3、判断特殊的操作系统---获取系统属性加以研究(魅族为例)
进入adb shell,获取魅族系统属性:
  • 首先进入cmd,然后输入adb shell 命令进入adb shell (前提:adb必须要配置到系统环境变量中)
C:\Users\Administrator>adb shell
shell@mx4pro:/ $
  • 进入system目录
shell@mx4pro:/ $cd system
cd system
shell@mx4pro:/system $
  • 查看系统属性
shell@mx4pro:/system $cat build.prop
cat build.prop
# begin build properties
# autogenerated by buildinfo.sh
ro.build.cta=noncta
ro.build.id=KTU84P
ro.build.mask.id=4.4.4-1423716396_wo
ro.build.args=
ro.build.inside.id=4.4.4-20150212124636
ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4.4
.....还有很多
  • 筛选包含Flyme字符的属性,因为既然是魅族操作系统,Flyme这个词最能代表它的属性
shell@mx4pro:/system $cat build.prop | grep Flyme
cat build.prop | grep Flyme

ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.display.id=Flyme OS 4.2.2.1U
ro.build.description=meizu_mx4pro-user 4.4.4 KTU84P m76.Flyme_OS_4.2.2.1.2015021
2124636 release-keys
ro.build.fingerprint=Meizu/meizu_mx4pro/mx4pro:4.4.4/KTU84P/m76.Flyme_OS_4.2.2.1
.20150212124636:user/release-keys
shell@mx4pro:/system $
帅选到四个属性:ro.build.version.incremental ro.build.display.id ro.build.description ro.build.fingerprint
  • 换一个其他的安装有魅族操作系统设备,重复上面的步骤。最终会发现ro.build.display.id这个属性可以当做一个魅族操作系统唯一的特性(因为这个属性值几乎都会包含Flyme字段,这正是我们想要的)。我们就可以用这个属性来与其他系统进行区分。
  • 最后一步,当然是怎么取出这个属性值了。

4、通过反射调用获取系统属性

//判断是魅族操作系统
public static booleanisMeizuFlymeOS() {
      return getMeizuFlymeOSFlag().toLowerCase().contains("flyme");
}
 
/*** 获取魅族系统操作版本标识
 */
public staticString getMeizuFlymeOSFlag() {
      return getSystemProperty("ro.build.display.id", "");
}
 
private staticString getSystemProperty(String key, String defaultValue) {
        try{
                Class<?> clz = Class.forName("android.os.SystemProperties");
                Method get = clz.getMethod("get", String.class, String.class);
                return(String)get.invoke(clz, key, defaultValue);
        } catch(Exception e) {
        }
        returndefaultValue;
}

//下面是小米操作系统的一些相关方法/*** 获取MIUI版本名
 */
public staticString getMIUIVersionName() {
        return getSystemProperty("ro.miui.ui.version.name", null);
}
 
//MIUI v5版本
public static booleanisV5(){
        if("V5".equalsIgnoreCase(getMIUIVersionName())){
                return true;
        }
        return false;
}

为了方便,封装一个反射调用系统SystemProperties类的工具类

public classSystemPropertiesReflect {
    public staticString get(String key, String value) {
        try{
            Method method = Class.forName("android.os.SystemProperties")
.getMethod("get", String.class, String.class); return (String) method.invoke(null, key, value); } catch(Exception e) { } returnvalue; } public static long getLong(String key, longvalue) { try{ Method method = Class.forName("android.os.SystemProperties")
.getMethod("getLong", String.class, long.class); return (Long) method.invoke(null, key, value); } catch(Exception e) { } returnvalue; } }

免责声明:文章转载自《adb shell 查看系统属性(用来判断特殊的操作系统)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 程序修改config文件后,不重启程序刷新配置ConfigurationManagerQApplication的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux Shell中的延时函数

Linux Shell中的延时函数 在 linux shell 脚本中经常需要做一些延时处理。 所以经常要用到 sleep 或 usleep 函数。 下面来说一下 sleep 和 usleep 的区别: sleep : 默认以秒为单位。 usleep : 默认以微秒为单位。 1s = 1000ms = 1000000us sleep 不但可以用秒为单位,...

statement 、prepareStatement的用法和解释

转自:http://blog.csdn.net/QH_JAVA/article/details/48245945 一、prepareStatement 的用法和解释 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Stateme...

氚云后台代码小栗子,点击按钮进行计算并同步数据到另外一张表单

protected override void OnSubmit(stringactionName, H3.SmartForm.SmartFormPostValue postValue, H3.SmartForm.SubmitSmartFormResponse response) { if(actionName == "B...

iOS 如何在一个已经存在多个project的workspace中引入cocoapods管理第三方类库

一) 具体方法在 iOS 如何在一个存在多个project的workspace中引入cocoapods管理第三方类库 二)Question && Solution Cocoapods 版本1.0.1 我在按上述链接转换的时候,遇到的问题: 1, [!] `xcodeproj` was renamed to `project`. Please...

Java 之 调用.Net的 WebService 整理

  最近做一个 java 调用 .net 服务的项目,其中 .net做了一个WebService,需要java来调用。   最开始.net的Service代码如下: using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocol...

uniapp app-plus pages.json

app-plus Object 设置编译到 App 平台的特定样式,配置项参考下方 app-plus App 参考地址 https://uniapp.dcloud.io/collocation/pages app-plus配置编译到 App 平台时的特定样式,部分常用配置 H5 平台也支持。以下仅列出常用,更多配置项参考 WebviewStyles。 ti...