adb shell 查看系統屬性(用來判斷特殊的操作系統)


一般來講,在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 boolean isN7() { 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 boolean isMeizuFlymeOS() {
      return getMeizuFlymeOSFlag().toLowerCase().contains("flyme");
}
 
/**
 * 獲取魅族系統操作版本標識
 */
public static String getMeizuFlymeOSFlag() {
      return getSystemProperty("ro.build.display.id", "");
}
 
private static String 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) {
        }
        return defaultValue;
}

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

 

為了方便,封裝一個反射調用系統SystemProperties類的工具類

public class SystemPropertiesReflect { public static String 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) { } return value; } public static long getLong(String key, long value) { try { Method method = Class.forName("android.os.SystemProperties")
                    .getMethod("getLong", String.class, long.class); return (Long) method.invoke(null, key, value); } catch (Exception e) { } return value; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM