一、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"; } }