十四、Android UiAutomator 獲取系統信息

一、Build構建信息

1.build類:

Build類提供了硬件廠商、編號、序列號、SDK版本等重要信息。
類名:android.os.Build

常量名

說明

BOARD 底層板名稱
BOOTLOADER Bootloader版本號
BRAND 品牌
CPU_ABI CPU指令集
CPU_ABI2 CPU第二指令集
DEVICE 工業設計名稱
DISPLAY 顯示給用戶的構建ID字符串
FINGERPRINT 構建的唯一標識符
HARDWARE 硬件的名稱 比如高通
HOST 主機
ID ID標籤
MANUFACTURER 產品生產商
MODEL 手機型號
PRODUCT 產品名稱
RADIO 無線電固件版本號
SERIAL 硬件序列號(如果可用)
TAGS 逗號分隔標籤描述構建,如”調試”
TIME 出場時間
TYPE 構建類型
USER 構建用戶名稱

2.Build.VERSION類

Build.VERSION類提供了開發代號、內部版本、SDK版本等信息
類名:android.os.Build.VEISION

常量名

說明

CODENAME 當前的開發代號
INCREMENTAL 使用的內部值表示這個構建底層的源代碼控制
RELEASE 用戶可見版本字符串
SDK_INT 用戶可見的SDK版本的框架

3.Build.VERSION_CODES類

android.os.Build.VERSION_CODES枚舉當前已知的SDK版本代號

常量名

說明

BASE 2008-10:第一個版本的android
BASE_1_1 2009-02:第一個安卓更新,官方稱爲1.1
CUPCAKE 2009-05:android1.5
CUR_DEVELOPMENT 發展過程中構建的版本,但是未正式發佈
DONUT 2009-09:android1.6
ECLAIR 2009-11:android2.0
ECLAIR_0_1 2009-12:android2.0.1
ECLAIR_MR1 2010-01:android2.1
FROYO 2010-06:android2.2
GINGERBREAD 2010-11:android2.3
GINGERBREAD_MR1 2011-02:android2.3.3
HONEYCOMB 2011-02:android3.0
HONEYCOMB_MR1 2011-05:android3.1
HONEYCOMB_MR2 2011-06:android3.2
ICE_CREAM_SANDWICH 2011-10:android4.0
ICE_CREAM_SANDWICH_MR1 2011-12android4.0.3
JELLY_BEAN 2012-06:android4.1
JELLY_BEAN_MR1 android4.2
JELLY_BEAN_MR2 android4.3
KITKAT android4.4

4.實例演示:

複製代碼
public void testDemo1(){
    //Build類
    System.out.println("Build:"+Build.BOARD);
    System.out.println("Build:"+Build.BOOTLOADER);
    System.out.println("Build:"+Build.CPU_ABI);
    System.out.println("Build:"+Build.CPU_ABI2);
    System.out.println("Build:"+Build.DEVICE);
    System.out.println("Build:"+Build.DISPLAY);
    System.out.println("Build:"+Build.FINGERPRINT);
    System.out.println("Build:"+Build.HARDWARE);
    System.out.println("Build:"+Build.HOST);
    System.out.println("Build:"+Build.ID);
    System.out.println("Build:"+Build.MANUFACTURER);
    System.out.println("Build:"+Build.MODEL);
    System.out.println("Build:"+Build.PRODUCT);
    System.out.println("Build:"+Build.RADIO);
    System.out.println("Build:"+Build.SERIAL);
    System.out.println("Build:"+Build.TAGS);
    System.out.println("Build:"+Build.TIME);
    System.out.println("Build:"+Build.TYPE);
    System.out.println("Build:"+Build.USER);
    System.out.println("Build:"+Build.BOARD);
    //Build.VERSION類
    System.out.println("Build.VERSION:"+Build.VERSION.CODENAME);
    System.out.println("Build.VERSION:"+Build.VERSION.INCREMENTAL);
    System.out.println("Build.VERSION:"+Build.VERSION.RELEASE);
    System.out.println("Build.VERSION:"+Build.VERSION.SDK_INT);
    //Build.VERSION_CODES類
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.BASE);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.BASE_1_1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.CUPCAKE);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.CUR_DEVELOPMENT);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.ECLAIR);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.ECLAIR_0_1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.ECLAIR_MR1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.FROYO);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.GINGERBREAD);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.GINGERBREAD_MR1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.HONEYCOMB);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.HONEYCOMB_MR1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.HONEYCOMB_MR2);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.ICE_CREAM_SANDWICH);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.JELLY_BEAN);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.JELLY_BEAN_MR1);
    System.out.println("Build.VERSION_CODES:"+Build.VERSION_CODES.JELLY_BEAN_MR2);
}
複製代碼

2)通過判定手機SDK級別來使用API

複製代碼
public void testDemo2() throws UiObjectNotFoundException{
    //獲取SDK版本號
    int sdk=Build.VERSION.SDK_INT;
    //進行判斷
    if (sdk>=18){
        //改一下鍵盤輸入默認時間
        Configurator.getInstance().setKeyInjectionDelay(100);
    }
    //用例操作
    UiObject editText=new UiObject(new UiSelector().className(EditText.class.getName()));
    editText.setText("10086");
}
複製代碼

二、Environment環境變量

Environment類提供了一些常用的Android環境變量的訪問和獲取:
典型的文件目錄,如:root目錄、data目錄、外部SD卡目錄等
SD卡狀態檢測,幫助瞭解外部存儲設備的狀態信息

API

說明

getDataDiretory() 獲取數據目錄
getDownloadCacheDirectory() 獲取下載緩存目錄
getExternalStorageDirectory() 獲取外部存儲目錄
getExternalStoragePublicDirectory(String type) 獲取特定類型的目錄
getExternalStorageState() 獲取外部存儲狀態
getRootDirectory() 獲取Root目錄
getStorageState(File path) 返回給定目錄的存儲狀態
isExternalStorageEmulated() 檢查是否有外部存儲設備模擬
isExternalStorageRemovable() 檢查外部存儲設備是否可以移除
  • 示例:
複製代碼
public void testDemo1(){
    //輸出指定目錄
    System.out.println("------指定目錄------");
    System.out.println(Environment.getDataDirectory());//數據目錄
    System.out.println(Environment.getDownloadCacheDirectory());//下載緩存目錄
    System.out.println(Environment.getExternalStorageDirectory());//外部存儲目錄
    System.out.println(Environment.getRootDirectory());//Root目錄
    //輸出特定目錄
    System.out.println("------特定目錄------");
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS));
    System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES));
    //列出下載目錄下的文件
    System.out.println("------下載目錄下的文件------");
    File downloadFile=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    File[] file=downloadFile.listFiles();
    for(File f:file){
        System.out.println(f.getAbsolutePath());
    }
}
複製代碼

三、getprop命令獲取系統屬性

1.系統屬性

除了build類可提取系統屬性外,使用命令getprop可以列出所有的系統屬性,除了原生系統定義外,廠商定義的屬性也會全部列出。

存放系統屬性的文件位置如下:

/defalt.prop
/system/build.prop
/data/property 下的4個prop文件
  • 獲取的系統屬性非常多,對其進行簡單分類
    1)dalvik.vm→ 虛擬機內存分配情況
    2)dhcp → 局域網參數信息
    3)gsm → GSM信息
    4)init → 守護進程信息
    5)net → 網絡信息
    6)persist → 系統常駐
    7)ro → 一些系統只讀屬性
    8)wifi → wifi相關信息
    8)其他廠商自定義的屬性

2.常用屬性舉例說明

系統屬性 KEY
硬件平臺 ro.board.platform
SN號 ro.boot.serialno
系統android版本號 ro.build.version.release
SDK級別 ro.build.bersion.sdk
手機當前運營商信息 gsm.operator.alpha
系統版本 ro.build.version.inscremental
手機制造商信息 ro.product.manufacturer
手機型號 ro.product.model
手機名子 ro.product.name
系統語言 ro.product.local.language
  • 實例:
複製代碼
public class buildTestcase extends UiAutomatorTestCase{
    //快速調試
    public static void main(String [] args){
        new UiAutomatorHelper("test","Jian.demo.buildTestcase","testDemo1","2");
    }
    //用例
    public void testDemo1(){
        //調用設定的方法,傳入key輸出鍵值
        System.out.println("硬件平臺:"+getProp("ro.board.platform"));
        System.out.println("SN號:"+getProp("ro.boot.serialno"));
        System.out.println("系統android版本號:"+getProp("ro.build.version.release"));
        System.out.println("SDK級別:"+getProp("ro.build.bersion.sdk"));
        System.out.println("手機當前運營商信息:"+getProp("gsm.operator.alpha"));
        System.out.println("系統版本:"+getProp("ro.build.version.inscremental"));
        System.out.println("手機制造商信息:"+getProp("ro.product.manufacturer"));
        System.out.println("手機型號:"+getProp("ro.product.model"));
        System.out.println("手機名子:"+getProp("ro.product.name"));
        System.out.println("系統語言:"+getProp("ro.product.local.language"));

    }
    //解析系統屬性的方法
    public String getProp(String key){
        try{
            //命令窗口輸入命令
            Process p=Runtime.getRuntime().exec("getprop");
            //從命令中提取的輸入流
            InputStream in=p.getInputStream();
            InputStreamReader reader=new InputStreamReader(in);
            BufferedReader buff=new BufferedReader(reader);
            //逐行讀取並輸出
            String line="";
            while((line=buff.readLine())!=null){
                if(line.contains("["+key+"]")){
                    String[] s=line.split("\\[");
                    //調試用的
//                  for(String ss:s){
//                      System.out.println("**:"+ss);
//                  }
                    //返回值
                    return s[2].replaceAll("\\].*", "");
                }
            }
        }catch(IOException e){
            e.printStackTrace();
        }
        //如果沒取到就返回這個
        return "未找到對應KEY";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章