1. 程式人生 > >Android 5.0 Lollipop介紹

Android 5.0 Lollipop介紹

seq 手勢 不包含 傾斜 pan 配色方案 lol for gles

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、更新或移除使用色彩的資源。系統在操作圖標和主要通知圖標中忽略所有非阿爾法通道。您應假設這些圖標僅支持阿爾法通道。系統用白色繪制通知圖標,用深灰色繪制操作圖標。

  聲音和振動

  如果您當前使用 RingtoneMediaPlayer 或 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 中的鎖定屏幕不會為MediaSessionRemoteControlClient顯示傳輸控件。不過,您的應用可以通過一個通知從鎖定屏幕提供媒體播放控件。這讓您的應用可以對媒體按鈕的顯示進行更多控制,同時為使用鎖定設備和未鎖定設備的用戶提供一致的體驗。

為實現此目的,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

Android 5.0 Lollipop介紹