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