安卓手机来电防火墙_Android自动化测试05--安卓基础

dd1608e1bbfa7a4a7109916b49b64457.png

Android自动化测试05

转帖请注明出处,谢谢~

安卓基础知识

本章重点

本书重点探讨Android UI自动化测试过程中所涉及到的原理和技术。掌握这些知识是为学习Appium自动化测试框架打下基础。

学习目标

  1. 了解API和安卓版本的关系
  2. 了解安卓组件,安卓程序源代码目录
  3. 了解安卓UI常用控件

安卓平台介绍

Android中文名称为安卓,是一个基于Linux内核的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑与其他便携式设备。

Android最初由安迪·鲁宾等人开发,最初开发这个系统的目的是创建一个数码相机的先进操作系统;但是后来发现市场需求不够大,加上智能手机市场快速成长,于是Android成为一款面向智能手机的操作系统。于2005年7月11日被Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发改良Android,随后,Google以Apache免费开放源代码许可证的授权方式,发布了Android的源代码,开放源代码加速了安卓普及,让生产商推出搭载安卓的智能手机,从安卓的发展看来,它已经不再局限于移动应用领域了,还有Google TV(运行Android系统的电视机),甚至未来的无人驾驶汽车上安装有安卓系统、智能家居中的微波炉、电冰箱等等。安卓操作系统已经成为全球最大的智能手机操作系统。

据2017年3月数据显示,安卓全球网络流量和设备超越Microsoft Windows,正式成为全球第一大操作系统。

安卓是一个平台、是一个操作系统、使用Linux内核、包含一套开发框架、各种运行库、Dalvik虚拟机,提供了Android SDK,包含丰富的工具集(有调试器、库、手机仿真器、文档、示例代码和教程),还有Android Development Tools(ADT),是基于Eclipse的开发辅助插件,它具有以下特点

  • 开放性

Android完全开源,且该平台从底层操作系统到上层的用户界面和应用程序都不存在任何阻碍产业创新的专有权障碍。同时开源的最大好处是,使得Android平台会拥有越来越壮大的开发者队伍,并且随着用户与应用的日益丰富,必然会使得Android这个崭新的平台走向成熟与稳定。

  • Dalvik虚拟机

Dalvik虚拟机是Google开发的一款Java VM,相对于Sun VM来说对文件作了优化,比如将多个class文件合并为一个dex文件,Android应用程序主要由Java语言开发,但Google提供了系统级别的Java API,这和非智能手机支持的Sun J2ME Java VM有很大的不同,Android软件可以支持来电防火墙显示归属地这样的底层应用,这些是Windows Phone 7和iPhone所不具备的。

  • 多元化

目前Android系统除了应用在智能手机外,还有平板电脑以及智能电视,目前三星、LG、HTC、宏碁、华硕等公司均推出了平板电脑,同时国内的创维、TCL等厂商已经推出了Android智能电视,最终将会有更多的智能家电、机顶盒、车载电子设备的出现。

  • 应用程序间的无界限

Android打破了应用程序间的界限,开发人员可以将在自己开发的程序与本地的联系人、日历、位置信息等很好的联系起来。此外,应用程序可以自申明其功能可以被其他应用程序所使用。

  • 紧密结合Google应用

全球最大的在线搜索服务商Google在过去的10年中,已经逐渐的渗透进人们的日常生活中了。人们不再仅仅满足于使用电脑终端来享受诸如Gamil、谷歌地图、在线翻译等在线服务,PC到移动终端的延伸成了一种必然的趋势。而Android与Google服务的无缝集成,则可以十足的满足人们的愿望。

安卓API版本和级别关系

在安卓自动化测试中部署测试环境,经常需要对SDK的版本进行不同适配,同时在安卓模拟器中进行自动化测试也需要选择相应的安卓Api级别,所以了解SDK的版本号和Api级别很重要。

API级别是一个整数值,它唯一标识了一个具体版本的Android平台,及其框架的API的版本。安卓平台提供了一套框架API,使得应用程序可以与系统底层进行交互。该框架的API的更新设计,使高版本的API与早期版本兼容。也就是说,在新版本API中大多数都是新增功能,和引进新的或替代的功能。作为API的部分升级,老的替换的部分已过时,但不会从新版本中删除,使得已有的应用程序仍然可以使用它们。在极少数情况下,旧版本API的部分可能被修改或删除,通常这种变化是为了保障API的稳定性及应用程序或系统的安全。所有其他早期版​​本的API将不做修改的保留。下表说明了具体平台版本和支持的API级别的对应关系。

9e3ef3d12d6af7c4815e9ffddf8da024.png

58e58ba643e49135a5bfe4e24d23a043.png

API级别标识为保证用户和应用程序开发者的最佳体验,起了关键作用:

  • 它让Android平台可以描述它支持的框架API的最高版本
  • 它让应用程序可以描述它需要的框架API版本
  • 它使得系统可以在硬件设备上安装应用程序时能够检查版本是否匹配,使得版本不兼容的应用程序不会被错误安装在设备之上.

安卓组件

很多自动化测试框架都是在谷歌原生的测试框架基础上进行了二次封装,比如Robotium就是对Instrumentation的封装。因此当对安卓系统的了解,对于学习很多测试框架会有更加深入的认识。

安卓应用开发的哲学是把一切都看作是组件。把应用程序组件化的好处是降低模块间的耦合性,同时提高模块的复用性。安卓的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程即使由于内存紧张被强行杀掉了,但是运行在里面的组件还是存在的。这样就可以在组件再次需要使用时,原地满血复活,就像什么都没发生过一样。这种设计思想非常适合内存较小的移动设备。理解安卓组件设计思想,对安卓应用程序架构会有更好的认识。

Android提供了界面组件Activity、服务组件Service、触发器组件BroadcastReceiver和数据源组件ContentProvider等四大组件。Android四大组件之间的协作是通过Binder机制来协作的,通过一个工程manifest绑定在一起。它们是Android应用程序的基石,下面分别介绍:

  1. Activity

官方解释:Activity是Android程序与用户交互的窗口,它主要为保持各界面的状态做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。

Activity的主要作用是展示一个界面并和用户交互,它扮演的是一种前台界面的角色。Android的Activity类似网站的Web页面。众所周知一个网站,每个Web页面都有独立的主题和功能点,如登录页面,注册页面,管理页面等。在每个页面中的链接,用来作为页面的跳转。这个模式和Activity很像,只不过实现策略不同。Android架构的核心思想,源于Web的MashUp概念(Mashup指整合网络上多个资料来源或功能,以创造新服务的网络应用程序。“混搭”一词源自于流行音乐将两种不同风格的音乐混合,以产生新的趣味的作法。),视为页面的客户端化。Activity是移动应用程序通过屏幕提供给用户进行交互界面的Android组件,比如打电话,拍照,发邮件,或者查看地图。每个Activity都有一个窗口,在上面绘制了程序的用户界面。这个窗口通常会占满整个屏幕,但是也可以比屏幕小,或者悬浮在其他窗口上。一个程序一般会由多个Activity结合在一起。典型情况下,主Activity是当程序启动时首先呈现在用户眼前的Activity。每个Activity为了执行不同的行为都能跳转到其他任何一个Activity。当新的Activity 开启时,先前的那个Activity会停止,但是系统会保存前面那个Activity的状态在栈中。当新Activity 开启时,它会被放入回退栈中并获的用户的焦点。回退栈秉承“后进先出"的原则,所以,当用户在当前Activity按下返回键时,它会从回退栈中弹出并销毁,同时,前面那个Activity会重新获得用户焦点。当一个Activity因为新Activity 开启而停止时,可以通过Activity的生命周期回调方法知道它的状态改变。有一些回调方法会在这个过程中被接收执行,因为状态无论如何改变--创建,停止,获得焦点的一个Activity,或者销毁一个Activity--每个回调方法都提供给开发者在Activity状态改变前做一些特定的操作的机会。比如说,当Activity停止时,Activity需要释放一些资源,像断开网络,数据库连接。当Activity得到焦点,可以请求必要的资源和让被打断的操作重新执行。这些状态过渡就是Activity的所有生命周期。

  1. Service

官方解释:Service在后台服务Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent(Android提供的一个组件)提供同步和异步的接口。

Service是在一段不定的时间运行在后台,不和用户交互应用组件,用于在后台执行一系列计算任务。它可以在和多场合的应用中使用,比如用户使用音乐播放器播放音乐的时候,想让该音乐播放器至于后台运行,然后做其他事情,查找SD卡音乐文件或者看相片库中的相片。

Service本质上就是剥离了界面的Activity,Service和Activity两者在很多Android的概念方面接近,都封装有一个完整的功能逻辑实现,区别在于Service不抛头露脸,只是隐藏在后台运行。

Android中的服务和Windows服务,Web的后台服务相近,它们通常在后台长时间运行,接受上层指令,完成相关事务的模块。但和一般的Service有所不同的地方是,Android的Service和所有四大组件一样,其进程模型是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。它凸显了Android的运行特征。如果一个Service,是有期望运行在于调用方不同进程的时候,就需要利用Android提供的RPC机制(RPC,Remote Procedure Call远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。),为其部署一套进程间通信的策略。

  1. Content Provider

官方解释:ContentProvider是Android中提供的第三方应用数据的访问方案,可以派生ContentProvider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部存储的存储细节,向外提供统一的数据接口模型,大大简化上层应用对数据的整合提供了更方便的途径。

在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的,但有时需要进行进程间的调用,比如一个联系人管理的应用,如果不允许第三方的应用对其联系人数据库进行增删该查,整个应用就失去了可扩展力,必将被其他应用抛弃,然后另外开发功能。Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用对外提供的数据,可以通过派生ContentProvider类,封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST,但实际上,它比REST更为灵活。

Content Provider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。Content Provider内部,常用数据库来实现,Android提供了强大的Sqlite支持,在各大组件中,Service和Content Provider都是那种需要持续访问的。Service如果是一个耗时的场景,往往会提供异步访问的接口,而Content Provider不论效率如何,都提供的是约定的同步访问接口。

  1. BroadcastReceiver

官方解释:BroadcastReceiver接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播机制。

这个机制类似电视广播,广播发送一个节目,用户可以通过收音机调到对应的频率来进行接受广播而获取相应的信息。

BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息。应用程序可以通过广播发送信息,也可以获取到别的应用发送的广播信息,而且广播的作用范围不局限于本应用程序内进行信息传递。在开发应用中可以使用BroadcastReceiver组件对外部事件进行过滤,程序可以只对感兴趣的外部事件(如当电话呼入时做什么,或者数据网络可用时做什么)进行接收并响应。BroadcastReceiver没有用户界面。然而它们可以启动Activity或Service来响应收到的信息,用NotificationManager 来通知用户,在Android中Notification是一种具有全局效果的通知,可以在系统的通知栏中显示,NotificationManager:是状态栏通知的管理类,负责发通知、清楚通知等。

通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值