Android Lollipop介绍
Android 5.0 Lollipop,此版本为用户提供了丰富的新功能,并为开发者新增了数以千计的 API,它进一步扩展了 Android 的应用范围,从手机、平板电脑和可穿戴式设备,扩展到电视和汽车。
1、Android 5.0新增功能与特性
Material Design:
简介:Material Design语言的一些重要功能包括 系统字体Roboto的升级版本 ,同时颜色更鲜艳,动画效果更突出。杜拉特还简要谈到了新框架的一些变化——这个新框架也于今天在 google.com/design 公开发布。谷歌的想法是让谷歌平台上的开发者掌握这个新框架,从而让所有应用就有统一的外观,就像是苹果向开发者提出的设计原则一样。谷歌还基于这种新的设计语言对本公司旗舰应用进行了重新设计,包括安卓和网页端的Gmail和Calendar。大家可能还会记得,看到过有关这些变动的文章, 有些博客 已经掌握了外泄截屏,显示经过了重新设计的Gmail,界面更干净、更简约。在安卓平台上,这种新界面被称为Material,支持各种新动画效果,具有内置的实时UI阴影,以及可在不同屏幕之间切换的hero元素。
Android 5.0 为 Android 引入了 Material Design,并为您提供了扩充的 UI 工具包,更便于您在应用中集成新的设计模式。
新增的三维视图允许您设置 Z 维度来让视图元素升高偏离视图层次并投射实时阴影,即使是动态元素也能实现。
内置的 Activity 转换可让用户在赏心悦目的动画中无缝完成状态转换。Material Design 主题为您的 Activity 添加了转换,提供了在所有 Activity 中使用共享视觉元素的功能。
为您的应用中的按钮、复选框以及其他触摸控件提供了波纹动画。
您还可以在 XML 中定义可绘制矢量,并以各种方式为其添加动画。可绘制矢量可在不损失清晰度的情况下进行缩放,非常适合单色应用内图标。
新增了一种名为渲染线程的系统管理处理线程,即使是在主 UI 线程出现延迟的情况下,仍可保持动画的流畅。
以文档为中心的应用:
Android 5.0 引入了重新设计的“概览”空间(以前称作“最近使用的应用”),通用性和多任务处理实用性更强。
新增的 API 允许您将应用中不同的 Activity 作为单个文档与其他最近使用的应用屏幕一并显示。
您可以充分利用并发文档,让用户能即时访问您的更多内容或服务。例如,您可以利用并发文档在生产力应用中表示文件,在游戏中表示玩家比赛,或者在消息传递应用中表示聊天。
图1:以文档为中心的最近使用的应用
高性能图形:
对 Khronos OpenGL ES 3.1 的支持现在可在受支持设备上为游戏和其他应用提供最高性能的 2D 和 3D 图形能力。
OpenGL ES 3.1 添加了计算着色器、模具纹理、加速视觉效果、高质量 ETC2/EAC 纹理压缩、高级纹理渲染、标准化纹理尺寸和 render-buffer 格式以及其他功能。
Android 5.0 还引入了 Android 扩展包(AEP),这组 OpenGL ES 扩展让您可以访问镶嵌着色器、几何着色器、ASTC 纹理压缩、每采用内插和着色之类的功能,以及其他高级渲染功能。您可以借助 AEP 在各类 GPU 上实现高性能图形。
OpenGL ES简介:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL ES 是从 OpenGL 裁剪的定制而来的,去除了glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。经过多年发展,现在主要有两个版本,OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES 1.0是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以OpenGL 1.5 规范为基础的,它们分别又支持common和 common lite两种profile。lite profile只支持定点实数,而common profile既支持定点数又支持浮点数。 OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的,common profile发布于2005-8,引入了对可编程管线的支持。
屏幕采集和共享:
Android 5.0 让您可以为应用添加屏幕采集和屏幕共享功能。
在用户许可的情况下,如果您愿意,可以从显示屏采集非安全视频并通过网络提供采集的视频。
新的传感器类型:
在 Android 5.0 中,新增的倾斜检测器传感器有助于改善受支持设备上的 Activity 识别,心率传感器可报告触摸设备者的心率。
新增的互动复合传感器现在可以检测“唤醒”手势、“拿起”手势和“扫视”手势等特殊交互。
Chromium WebView:
Android 5.0 的初始版本提供了一版基于 Chromium M37 版本的 Chromium for WebView,添加了对 WebRTC、WebAudio 和 WebGL 的支持。
Chromium M37 还提供对以下所有 Web 组件规范的原生支持:自定义元素、阴影 DOM、HTML 导入和模板。这意味着您无需 polyfill 便可在 WebView 中使用 Polymer 及其 Material Design 元素。
尽管 Android 4.4 以来 WebView 一直基于 Chromium,但 Chromium 层现在可从 Google Play 进行更新
2、Android 5.0行为变更(API级别:21)
Android 5.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。本节重点介绍应该了解并在开发应用时加以考虑的一些主要变更。
Android Runtime (ART):
ART和Dalvik: Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 会执行 Dalvik 可执行文件并遵循 Dex 字节码规范。
ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。
Android 5.0部分主要的新功能包括:1.预先 (AOT) 编译 2.改进的垃圾回收 (GC) 3.改进的调试支持。
大多数 Android 应用无需任何更改就可以在 ART 下工作。不过,部分适合 Dalvik 的技术并不适用于 ART。如存在以下情况,应特别注意:
- 您的应用使用 Java 原生接口 (JNI) 运行 C/C++ 代码。
- 您使用生成非标准代码的开发工具(例如,一些代码混淆工具)。
- 您使用与压缩垃圾回收不兼容的技术。
通知:(通知设计指南:https://material.io/guidelines/patterns/notifications.html)
Material Design 样式:
在白色(或非常浅)的背景上使用深色文本绘制通知,以便与新的 Material Design 小部件匹配。请确保您的所有通知都与新的配色方案协调一致。如果您的通知看上去不协调,请进行修正:
1、使用 setColor() 在您的图标图像后面的圆形中设置重点色彩。
2、更新或移除使用色彩的资源。系统在操作图标和主要通知图标中忽略所有非阿尔法通道。您应假设这些图标仅支持阿尔法通道。系统用白色绘制通知图标,用深灰色绘制操作图标。
声音和振动:
如果您当前使用 Ringtone、MediaPlayer 或 Vibrator 类向通知中添加声音和振动,则移除此代码,以便系统可以在“优先”模式中正确显示通知。取而代之的是,使用 Notification.Builder 方法添加声音和振动。
将设备设为 RINGER_MODE_SILENT 可使设备进入新的优先模式。如果您将设备设为 RINGER_MODE_NORMAL 或 RINGER_MODE_VIBRATE,则设备将退出优先模式。
以前,Android 使用 STREAM_MUSIC 作为主流式传输来控制平板电脑设备上的音量。在 Android 5.0 中,手机和平板电脑设备的主音量流式传输现已合并,由 STREAM_RING 或 STREAM_NOTIFICATION 进行控制。
锁定屏幕可见性:
默认情况下,在 Android 5.0 中,通知现在显示在用户的锁定屏幕上。用户可以选择保护敏感信息不被公开,在此情况下,系统会自动删减通知显示的文本。要自定义此删减的通知,请使用 setPublicVersion()。
如果通知不包含个人信息,或者您想允许媒体播放控件显示在通知上,则调用setVisibility()方法并将通知的可见性级别设为 VISIBILITY_PUBLIC。
媒体播放:
如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的Notification.MediaStyle模板,而不是自定义RemoteViews.RemoteView对象。无论您选择使用哪个方法,请务必将通知的可见性设为VISIBILITY_PUBLIC,以便可通过锁定屏幕访问您的控件。请注意,从Android 5.0 开始,系统不再将RemoteControlClient对象显示在锁定屏幕上。
浮动通知:
现在,当设备处于活动状态时(即,设备未锁定且其屏幕已打开),通知可以显示在小型浮动窗口中(也称为“浮动通知”)。这些通知看上去类似于精简版的通知,只是浮动通知还显示操作按钮。用户可以在不离开当前应用的情况下处理或清除浮动通知。
可能触发浮动通知的条件示例包括:
1、用户的 Activity 处于全屏模式中(应用使用 fullScreenIntent)
2、通知具有较高的优先级并使用铃声或振动
如果您的应用在以上任何情形下实现通知,请确保系统正确显示浮动通知
媒体控件和 RemoteControlClient:
RemoteControlClient类现已弃用。请尽快切换到新的MediaSession API。
Android 5.0 中的锁定屏幕不会为MediaSession或RemoteControlClient显示传输控件。不过,您的应用可以通过一个通知从锁定屏幕提供媒体播放控件。这让您的应用可以对媒体按钮的显示进行更多控制,同时为使用锁定设备和未锁定设备的用户提供一致的体验。
为实现此目的,Android 5.0引入了一个新的Notification.MediaStyle 模板。Notification.MediaStyle将您使用Notification.Builder.addAction()添加的通知操作转换为精简按钮,嵌入到应用的媒体播放通知中。将您的会话令牌传递到setSession()方法以告知系统该通知控制进行中的媒体会话。
请务必将通知的可见性设为VISIBILITY_PUBLIC,以将通知标记为安全,从而显示在任何锁定屏幕上(以安全方式或其他方式)
getRecentTasks():
Android 5.0 中引入新的“并发文档和 Activity 任务”功能后,为提升用户隐私的安全性,现已弃用ActivityManager.getRecentTasks()方法。对于向后兼容性,此方法仍会返回它的一小部分数据,包括调用应用自己的任务和可能的一些其他非敏感任务(如首页)。如果您的应用使用此方法检索它自己的任务,则改用getAppTasks()检索该信息。
Android NDK 中的 64 位支持:
Android 5.0 引入了对 64 位系统的支持。64 位增强功能可增加地址空间和提升性能,同时仍完全支持现有的 32 位应用。64 位支持也可改进用于加密的 OpenSSL 的性能。此外,该版本还引入了新的原生媒体 NDK API,以及原生 OpenGL ES (GLES) 3.1 支持。
绑定到服务:
Context.bindService()方法现在需要显式Intent,如果提供隐式 intent,将引发异常。为确保应用的安全性,请使用显式 intent启动或绑定Service,且不要为服务声明intent过滤器。
WebView:
Android 5.0 更改了应用的默认行为。
1、如果您的应用是面向 API 级别 21 或更高级别:
默认情况下,系统会阻止混合内容和第三方Cookie。要允许混合内容和第三方Cookie,请分别使用setMixedContentMode()和setAcceptThirdPartyCookies ()方法。
系统现在可以智能地选择要绘制的 HTML 文档部分。这个新的默认行为有助于减少内存占用和提升性能。如果您要一次渲染整个文档,可通过调用enableSlowWholeDocumentDraw()停用此优化。
2、如果您的应用是面向低于 21 的 API 级别:系统允许混合内容和第三方 Cookie,并始终一次渲染整个文档。
自定义权限唯一性要求:
根据权限概述中所述,Android 应用可以定义以专有方式管理组件访问权限的自定义权限,无需使用平台预定义的系统权限。应用在其清单文件中声明的<permission>元素中定义自定义权限。
少数情况下定义自定义权限是合规且安全的方法。不过,创建自定义权限有时并无必要,甚至可能会给应用带来潜在风险,具体取决于分配给权限的保护级别。
Android 5.0 其中一项行为变更确保只有一个应用可以定义给定自定义权限,除非使用与定义权限的其他应用相同的密钥进行签名。
您的应用需要注意的事项:
在 Android 5.0 和更新的版本中,应用可以和以前一样继续定义自己的自定义权限,并通过<uses-permission>机制请求其他应用的自定义权限。不过,对于Android 5.0中引入的新要求,您应仔细评估可能给您的应用带来的影响。
下面是一些需要考虑的因素:
您的应用是否在其清单文件中声明任何<permission>元素?如果是,那么这些权限是否确实是您的应用或服务正常运行不可或缺的?或者,能否使用系统默认权限代替它们?
如果您的应用中具有<permission>元素,您是否知道它们来自哪里?
您实际上是否打算让其他应用通过<uses-permission>请求您的自定义权限?
您是否在您包含<permission>元素的应用中使用样板文件或示例代码?那些权限元素确实是不可或缺的吗?
您的自定义权限使用的名称是简单名称还是基于其他应用可能共享的通用术语?
新安装和更新:
如上所述,在运行 Android 4.4 或更早版本的设备上新安装和更新您的应用不会受影响,且行为没有任何变化。在运行 Android 5.0 或更新版本的设备上进行新安装和更新时,如果应用定义一个已由现有驻留应用定义的自定义权限,则系统会阻止安装您的应用。
使用 Android 5.0 系统更新的现有安装
如果您的应用使用自定义更新且已广泛分发和安装,那么,当用户收到将设备升级到 Android 5.0 的更新时,您的应用可能会受影响。在安装系统更新后,系统重新验证已安装的应用,包括检查它们的自定义权限。如果您的应用定义一个已由另一个通过验证的应用定义的自定义权限,且您的应用没有使用与该应用相同的密钥签名,则系统不会重新安装您的应用。
建议:在运行 Android 5.0 或更新版本的设备上,我们建议您立即检查您的应用,进行任何所需的调整,并尽快向您的用户发布更新版本。
如果您在应用中使用自定义权限,则考虑它们的来源以及您是否确实需要它们。从您的应用中移除所有<permission>元素,除非您确定它们是应用正常运行所必需的元素。
尽可能考虑使用系统默认权限替代您的自定义权限。
-
- 如果您的应用需要自定义权限,则重命名您的自定义权限,使其成为您的应用独有的权限,例如,将它们追加到应用的完整软件包名称。
- 如果您有一组使用不同密钥签名的应用,且这些应用通过自定义权限访问共享组件,则确保此自定义权限在共享组件中仅定义一次。使用共享组件的应用不应自己定义自定义权限,而应通过 <uses-permission> 机制请求访问权限。
- 如果您有一组使用相同密钥签名的应用,则每个应用都可以根据需要定义相同的 自定义权限,系统允许以常规方式安装这些应用。
TLS/SSL 默认配置变更:
Android 5.0 针对 HTTPS 和其他 TLS/SSL 通信引入了对应用使用的默认 TLS/SSL 配置的变更:
1.TLSv1.2 和 TLSv1.1 协议现已启用,
2.AES-GCM (AEAD) 加密套件现已启用,
3.MD5、3DES、导出和静态密钥 ECDH 加密套件现已停用,
4.首选使用 Forward Secrecy 加密套件(ECDHE 和 DHE)。
在下面列出的少数情况下,这些变更可能会导致 HTTPS 或 TLS/SSL 连接断开。请注意,来自Google Play服务的安全性ProviderInstaller自Android 2.3 开始就已在Android平台版本上提供这些变更。
1.服务器不支持任何已启用的加密套件
2.应用对用于连接服务器的加密套件做出错误的假设
3.服务器不支持 TLSv1.1、TLSv1.2 或新的 TLS 扩展
支持托管配置文件:
设备管理员可以向设备添加托管配置文件。此配置文件由管理员所有,让管理员控制托管配置文件的同时,允许由用户控制其自己的个人配置文件及其存储空间。此变更会通过下列方式影响您的现有应用的行为。
3、Android 5.1行为变更(API级别:22)
Android 5.1 (LOLLIPOP_MR1) 是对 Lollipop 版本的更新,为用户和应用开发者提供了诸多新功能。本节旨在介绍其中最值得关注的新 API。
多 SIM 卡支持:
Android 5.1 添加了对同时使用多个蜂窝运营商 SIM 卡的支持。有了此功能,用户可以在具有两个或多个 SIM 卡插槽的设备上激活和使用额外的 SIM。
您可以通过SubscriptionManager类获取有关当前激活的 SIM 的信息,包括设备是否被认为在当前网络上漫游。对于希望为对数据访问费用敏感的设备用户减少或关闭应用数据访问的开发者而言,这些信息非常有用。可以通过请求READ_PHONE_STATE权限和对SubscriptionManager对象设置SubscriptionManager.OnSubscriptionsChangedListener,提醒您的应用注意设备当前网络连接的状态变化。
已弃用的 HTTP 类:
Android 5.1 中已弃用org.apache.http类和android.net.http. AndroidHttpClient类。这些类将不再保留,您应尽快将使用这些API的任何应用代码迁移至URLConnection类。
运营商服务:
Android 5.1 支持通信服务提供商创建可以在 Android 设备上执行运营商配置任务的应用。利用这些 API,运营商开发的应用可以安全、灵活地执行这些任务和通过 Google Play 发布。使用这些功能的应用必须获得证书的签名,此证书和设备的通用集成电路卡 (UICC) 中的证书相匹配。
运营商服务 API 已添加到TelephonyManager类、SmsManager类和新增的CarrierMessagingService类。应用可以通过调用hasCarrierPrivileges()方法,检查是否可以访问这些 API。可以调用但无法访问这些 API 的应用将收到SecurityException。