1. 程式人生 > >Android 各個版本以及新特性

Android 各個版本以及新特性

Android發行版本

測試版本

Android 各代版本 LogoAndroid 各代版本 Logo

Android在正式發行之前,最開始擁有兩個內部測試版本,並且以著名的機器人名稱來對其進行命名,它們分別是:阿童木(AndroidBeta),發條機器人(Android 1.0)。後來由於涉及到版權問題,谷歌將其命名規則變更為用甜點作為它們系統版本的代號的命名方法。甜點命名法開始於Android 1.5釋出的時候。作為每個版本代表的甜點的尺寸越變越大,然後按照26個字母數序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),鬆餅(Android 2.0/2.1),凍酸奶(Android 2.2),薑餅

(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛軋糖(Nougat,Android 7.0)。 [8-10]

1.1

2008年9月釋出的Android第一版。

1.5

Cupcake(紙杯蛋糕):2009年4月30日釋出。

主要的更新如下:

拍攝/播放影片,並支援上傳到Youtube;支援立體聲藍芽耳機,同時改善自動配對效能;最新的採用

WebKit技術的瀏覽器,支援複製/貼上和頁面中搜索;GPS效能大大提高;提供螢幕虛擬鍵盤;主螢幕增加音樂播放器和相框widgets;應用程式自動隨著手機旋轉;簡訊、Gmail、日曆,瀏覽器的使用者介面大幅改進,如Gmail可以批量刪除郵件;相機啟動速度加快,拍攝圖片可以直接上傳到Picasa;來電照片顯示。

1.6

Donut(甜甜圈):2009年9月15日釋出。

主要的更新如下:

重新設計的Android Market手勢;支援CDMA網路;文字轉語音系統(Text-to-Speech);快速搜尋框;全新的拍照介面;檢視應用程式耗電;支援虛擬私人網路(VPN);支援更多的螢幕解析度;支援OpenCore2媒體引擎;新增面向視覺或聽覺困難人群的易用性外掛。

2.0

2009年10月26日釋出。

主要的更新如下:

優化硬體速度;"Car Home"程式;支援更多的螢幕解析度;改良的使用者介面;新的瀏覽器的使用者介面和支援HTML5;新的聯絡人名單;更好的白色/黑色背景比率;改進Google Maps3.1.2;支援Microsoft Exchange;支援內建相機閃光燈;支援數碼變焦;改進的虛擬鍵盤;支援藍芽2.1;支援動態桌面的設計。

Android 2.2/2.2.1 Froyo(凍酸奶) :2010年5月20日釋出。主要的更新如下:

整體效能大幅度的提升;3G網路共享功能;Flash的支援;App2sd功能;全新的軟體商店;更多的Web應用API介面的開發。

2.3.x

Gingerbread(薑餅) :2010年12月7日釋出。

主要的更新如下:

增加了新的垃圾回收和優化處理事件;原生程式碼可直接存取輸入和感應器事件、EGL/OpenGLES、OpenSL ES;新的管理視窗和生命週期的框架;支援VP8WebM視訊格式,提供AACAMR寬頻編碼,提供了新的音訊效果器;支援前置攝像頭、SIP/VOIP和NFC(近場通訊);簡化介面、速度提升;更快更直觀的文字輸入;一鍵文字選擇和複製/粘帖;改進的電源管理系統;新的應用管理方式。

3.0

Honeycomb(蜂巢):2011年2月2日釋出。

主要更新如下:

優化針對平板 ;全新設計的UI增強網頁瀏覽功能 ;in-app purchases功能。

3.1

Honeycomb(蜂巢) :2011年5月11日布釋出。

版本主要更新如下:

經過優化的Gmail電子郵箱 ;全面支援Google Maps ;將Android手機系統跟平板系統再次合併從而方便開發者;工作管理員可滾動,支援USB輸入裝置(鍵盤滑鼠等) ;支援Google TV.可以支援XBOX 360無線手柄;widget支援的變化,能更加容易的定製螢幕widget外掛。

3.2

Honeycomb(蜂巢):2011年7月13日釋出。

版本更新如下:

支援7英寸裝置;引入了應用顯示縮放功能。

4.0

Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港釋出。

安卓2.0版本安卓2.0版本

版本主要更新如下:

全新的UI;全新的Chrome Lite瀏覽器,有離線閱讀,16標籤頁,隱身瀏覽模式等;截圖功能;更強大的圖片編輯功能;自帶照片應用堪比Instagram,可以加濾鏡、加相框,進行360度全景拍攝,照片還能根據地點來排序;Gmail加入手勢、離線搜尋功能,UI更強大;新功能People:以聯絡人照片為核心,介面偏重滑動而非點選,集成了Twitter、Linkedin、Google+等通訊工具。有望支援使用者自定義新增第三方服務;新增流量管理工具,可具體檢視每個應用產生的流量,限制使用流量,到達設定標準後自動斷開網路。

4.1

Android 4.1Jelly Bean(果凍豆):2012年6月28日

新特性:

更快、更流暢、更靈敏;特效動畫的幀速提高至60fps,增加了三倍緩衝;增強通知欄;全新搜尋;搜尋將會帶來全新的UI、智慧語音搜尋和Google Now三項新功能;桌面外掛自動調整大小;加強無障礙操作;語言和輸入法擴充套件;新的輸入型別和功能;新的連線型別。

4.2

Android 4.2 Jelly Bean 原生系統使用者介面Android 4.2 Jelly Bean 原生系統使用者介面

Android 4.2Jelly Bean(果凍豆):2012年10月30日

Android 4.2沿用“果凍豆”這一名稱,以反映這種最新作業系統與Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具體如下:

Photo Sphere全景拍照功能;鍵盤手勢輸入功能;改進鎖屏功能,包括鎖屏狀態下支援桌面掛件和直接開啟照相功能等;可擴充套件通知,允許使用者直接開啟應用;Gmail郵件可縮放顯示;Daydream螢幕保護程式;使用者連點三次可放大整個顯示頻,還可用兩根手指進行旋轉和縮放顯示,以及專為盲人使用者設計的語音輸出和手勢模式導航功能等;支援Miracast無線顯示共享功能;Google Now現可允許使用者使用Gamail作為新的資料來源,如改進後的航班追蹤功能、酒店和餐廳預訂功能以及音樂和電影推薦功能等。

4.4

Android 4.4KitKat(奇巧巧克力): 2013年下半年

2013年9月4日凌晨,谷歌對外公佈了Android新版本Android 4.4KitKat(奇巧巧克力),並且於2013年11月01日正式釋出,新的4.4系統更加整合了自家服務,力求防止安卓系統繼續碎片化、分散化。 [11]

5.0

Android 5.0Lollipop(棒棒糖):美國太平洋時間2014年10月15日

Android 5.0 系統使用一種新的Material Design設計風格。從圖片上就能看到一些全新的設計。從圖片上看,這套設計圖對 Android 系統的桌面圖示及部件的透明度進行的稍稍的調整,並且各種桌面小部件也可以重疊擺放。雖然調整桌面部件透明度對 Android 系統來說並不算什麼新鮮的功能,但是加入了透明度的改進。介面加入了五彩繽紛的顏色、流暢的動畫效果,呈現出一種清新的風格。採用這種設計的目的在於統一 Android 裝置的外觀和使用體驗,不論是手機、平板還是多媒體播放器。

6.0

Android 6.0Marshmallow(棉花糖):2015年5月28日

新系統的整體設計風格依然保持扁平化的MeterialDesign風格。Android6.0在對軟體體驗與執行效能上進行了大幅度的優化。據測試,Android6.0可使裝置續航時間提升30%。

7.0

Android 7.0Nougat(牛軋糖):2016年8月22日 [10] [12]

8.0

Android 8.0  Oreo(奧利奧):2017 年 8 月 21 日

9.0

Android 9.0  Pistachio Ice Cream(開心果冰淇淋):2017 年 8 月 21 日

野路子

android6.0

android7.0 

 android8.0

自己總結 

android6.0新特性:

1-android6.0對應api級別為23;

2-android6.0版本引入了一種新的許可權模式---執行時許可權。

使用者可直接在執行時管理應用許可權。這種模式讓使用者能夠更好地瞭解和控制權限,同時為應用開發者精簡了安裝和自動更新過程。使用者可為所安裝的各個應用分別授予或撤銷許可權。

3-android6.0版本引入了針對空閒裝置和應用的最新節能優化技術---休眠和應用待機模式(Doze and App Standby)

這些功能會影響所有應用,因此請務必在這些新模式下測試您的應用。

休眠模式(Doze):如果使用者拔下裝置的電源插頭,並在螢幕關閉後的一段時間內使其保持不活動狀態,裝置會進入低電耗模式,在該模式下裝置會嘗試讓系統保持休眠狀態。在該模式下,裝置會定期短時間恢復正常工作,以便進行應用同步,還可讓系統執行任何掛起的操作。

應用待機模式(App Standby):應用待機模式允許系統判定應用在使用者未主動使用它時處於空閒狀態。當用戶有一段時間未觸控應用時,系統便會作出此判定。如果拔下了裝置電源插頭,系統會為其視為空閒的應用停用網路訪問以及暫停同步和作業。
要詳細瞭解這些節能變更,請參閱對低電耗模式和應用待機模式進行鍼對性優化

4-BoringSSL
Android正在將OpenSSL庫替換為BoringSSL庫。這將影響你的應用在NDK中所連結的加密庫,比如libcrypto.so和libssl.so,它們不是NDK API的一部分。這些庫不是公開的API,因此在不同版本和裝置上的變化也不會及時通知開發者。而且,這也將暴露你應用的安全缺陷。因此,需要修改你的native程式碼,通過JNI的方式呼叫Java的加密API或者靜態連結你選擇的加密庫。

5-文字選擇(Text Selection)
使用者在應用中選擇文字後,你現在可以顯示一個浮動工具欄(floating toolbar),展示並進行剪下、拷貝、貼上操作,互動過程的實現和contextual action bar的實現一樣( Enabling the contextual action mode for individual views)。

6-USB連線(USB Connection)
android6.0版本,通過UAB埠連線裝置,預設採用僅充電模式。通過USB連線裝置並獲取內容,必須明確的經過使用者授權這種互動許可權。如果你的應用支援通過USB埠的互動,要考慮到這種互動必須被明確的啟用。

7-Android 金鑰庫變更

android6.0版本開始,Android 金鑰庫提供程式不再支援 DSA。但仍支援 ECDSA。

停用或重置安全鎖定螢幕時(例如,由使用者或裝置管理員執行此類操作時),系統將不再刪除需要閒時加密的金鑰,但在上述事件期間會刪除需要閒時加密的金鑰。

8-WLAN 和網路連線變更。

9-相機服務變更

android6.0中,相機服務中共享資源的訪問模式已從之前的“先到先得”訪問模式更改為高優先順序程序優先的訪問模式。

(1)客戶端應用程序基於優先順序的方式訪問相機子系統,包括開啟和配置裝置相機。使用者可見的應用程序通常被賦予高優先順序,使得相機資源的獲取和使用更可靠。
(2)高優先順序的應用能夠“驅逐”低優先順序應用,而使用相機(譯註:高優先順序應用能以搶佔方式使用相機)
(3)在有合適的相機的硬體上,多個應用程序可以同時且獨立地使用相機裝置。但是,多程序同時訪問的情況下,會導致相機裝置的效能顯著降低,而現在相機服務會檢測並不允許此種情況發生。這種變化導致低優先順序的應用被“驅逐”,直到沒有其它應用直接訪問同一個相機裝置。
(4)改變當前使用者(譯註:多使用者情況下的使用者切換)後,引起之前使用者所擁有的應用無法再使用相機。訪問相機被限制在裝置的當前使用者上。實際上,這意味著一個“guest”使用者賬戶在切換到其它使用者賬戶時,不能再保留一個執行的程序訪問相機服務。

10-APK 驗證

該平臺現在執行的 APK 驗證更為嚴格。如果在清單中宣告的檔案在 APK 中並不存在,該 APK 將被視為已損壞。移除任何內容後必須重新簽署 APK。

11-鎖屏下語音搜尋

使用者可以直接在鎖屏狀態下進行語音搜尋,雖然現在的一些安卓手機支援語音喚醒功能,但這些語音喚醒都是第三方廠商開發的,而此次的Android 6.0在系統層面加入鎖屏下語音搜尋,這無疑會在體驗上有一個明顯的提升。

12-指紋識別

說到指紋識別,很多使用者都會覺得現在的中高階安卓手機都支援,但事實上這些安卓手機的指紋識別都是各個廠商自行開發的並沒有系統底層的支援。Android 6.0則在系統層面加入指紋識別,能提供原生指紋識別API,這不但降低了廠商開發指紋識別模組的成本,最重要的是原生指紋識別將會大大提升安卓手機的指紋識別支付安全性。

13-Now on Tap功能

Now on Tap功能是和Google搜尋緊密結合的功能,它可以讓谷歌從任何應用中進行搜尋。例如,在微信中聊天的時候提到餐館,那麼就可以在不跳轉的情況下進行谷歌搜尋。

14-App Links

通過App Links功能,Android平臺能夠向網路伺服器提出申請,自主識別連結內容。直接跳轉到App客戶端中,改善使用者體驗,有利於讓使用者在體驗更完善的App客戶端完成更多操作。

此外,在Android 6.0谷歌還加入了Android Pay進一步強化移動支付,同時也是為了對抗Apple Pay。在釋出會上谷歌表示Android 6.0將在下週開始推送,Nexus5/6/7/9以及Nexus Player將能夠在第一時間得到升級。

15-很有必要說明的(筆者覺得和應用開發密切相關的)共兩處,第一Android 2.3,,第二處是6.0 以後的版本了。

首先,Android2.3 與之前的系統有很大改進,具體是,增加nfc 支援,增加sip支援(在沒增加這些之前,android開發者要開發nfc或者sip的相關應用的難度和增加之後完全不同,Android2.3 後寫nfc 或sip相關程式比之前要容易得多 ),第二個改進是把輸入法的框架改了(主要是將之前的java實現變為c實現),結果是2.3以後輸入法的輸入效率更高了。 

至於6.0以後系統,第一開發工具只能用,谷歌官方的Android Studio 了。值得一提的是,從Android 4.4 開始,Android app 執行方式從原來的Dalvik 模式增加了一種可選模式 ART模式(全稱是Android Runtime模式)。這種模式使得Android執行app的速度變快了(後面也有部落格特別介紹)。還有就是從Android 5.0開始使用linux 3.0核心。這裡就是多核處理器優化基礎(因為linux核心中對於多核處理器進行了負載均衡處理)。

android6.0開發注意事項:

1-執行時許可權檢查(Runtime Permisssions)

作為開發者,當你的app的目標版本(target)為Android6.0(API 23)或更高時。

請確保在執行時進行許可權的檢查和請求。其中,

(1)新的方法checkSelfPermission()可以用來判斷你的應用是否被授予了許可權

(2)而requestPermissions()可請求許可權。

即使你app的目標版本在android6.0以下,也應該在新的許可權管理模型下測試你的應用。讓你的應用支援新的許可權管理模型,以及獲得更多的官方提示,可檢視Working with System Permissionss(https://developer.android.com/training/permissions/index.html)和 Permissions Best Practices(https://developer.android.com/training/permissions/best-practices.html#testing)

2-Android6.0版本移除了對Appache的HTTP Client(Apache HTTP Client Removal)

如果您的應用使用該客戶端,並以 Android 2.3(API 級別 9)或更高版本為目標平臺,

(1)請改用 HttpURLConnection 類,此 API 效率更高,因為它可以通過透明壓縮和響應快取減少網路使用,並可最大限度降低耗電量。

(2)如果要繼續使用 Apache HTTP API,您必須先在 build.gradle 檔案中宣告以下編譯時依賴項:

android {  

    useLibrary 'org.apache.http.legacy'  

}  

3-獲取硬體識別符號(Access to Hardware Identifier)

android6.0中,為了更好的保護使用者的資料,

(1)Android移除了從程式碼中通過Wi-Fi和藍芽的API訪問裝置本地網路識別符號。因此WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()將始終返回02:00:00:00:00:00

(2)而為了能夠通過Wi-Fi和藍芽掃描時,獲取周邊裝置的硬體識別符號,應用必須具有ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION許可權:
        WifiManager.getScanResults()
        BluetoothDevice.ACTION_FOUND
        BluetoothLeScanner.startScan()
注意:當執行Android6.0(API level 23)的裝置啟動後臺Wi-Fi或藍芽掃描時, 此操作對外部裝置是可見的,且被顯示為一個隨機MAC的地址。

4-BoringSSL

Android 正在從使用 OpenSSL 庫轉向使用 BoringSSL 庫。

(1)如果您要在應用中使用 Android NDK,請勿連結到並非 NDK API 組成部分的加密庫,如 libcrypto.so 和 libssl.so。這些庫並非公共 API,可能會在不同版本和裝置上毫無徵兆地發生變化或出現故障。此外,您還可能讓自己暴露在安全漏洞的風險之下。

(2)如果要連結到並非 NDK API 組成部分的加密庫請改為修改原生程式碼(native),以通過 JNI 呼叫 Java 加密 API,或靜態連結到您選擇的加密庫。

5-通知(Notifications)

(1)移除了Notification.setLatestEventInfo()方法。

(2)用Notification.Builder類來構造通知,在需要反覆更新通知的情況下,儲存並重用Notification.Builder的例項;在獲取更新後的Notification例項時,呼叫其build()方法。
(3)adb shell dumpsys notification命令不再輸出你的通知文字,而adb shell dumpsys notification --noredact命令將輸出一個notification物件的文字。

6-AudioManager Changes

  android6.0不再支援通過AudioManager類來直接對特定的音訊流設定音量和靜音,因此:
(1)setStreamSolo()方法過時(deprecated),替換呼叫requestAudioFocus()方法.
(2)setStreamMute()方法過時,替換呼叫為adjustStreamVolume()方法,傳入的值也變為ADJUST_MUTE 或 ADJUST_UNMUTE。

7-文字選擇(Text Selection)

使用者在應用中選擇文字後,你現在可以顯示一個浮動工具欄(floating toolbar),展示並進行剪下、拷貝、貼上操作,互動過程的實現和contextual action bar的實現一樣( Enabling the contextual action mode for individual views)
實現選擇文字後的浮動工具欄,在app程式碼中需要做如下修改:
(1)在View 或 Activity物件,ActionMode的呼叫從startActionMode(Callback) 變為 startActionMode(Callback, ActionMode.TYPE_FLOATING);
(2)替換原有的ActionMode.Callback為ActionMode.Callback2;
(3)重寫OnGetContentRect()方法,提供內容Rect物件(文字選擇的矩形框)在view中的位置;
(4)在矩形框作為唯一的元素不再有效時(矩形的定位不再有效),呼叫invalidateContentRect() 方法。
    如果你在使用Android Support Library revision 22.2,需要注意浮動工具欄不向後相容且因為appcompat預設接管ActionMode物件,阻止了浮動工具欄被顯示。為了在AppCompatActivity中支援ActionMode,需要呼叫getDelegate()方法,之後對返回的AppCompatDelegate物件呼叫setHandleNativeActionModesEnabled()方法,並設定輸入引數為false,該呼叫將ActionMode物件的控制交還給系統框架層。在Android6.0(API level 23)的裝置上,框架層支援ActionBar或浮動工具欄模式,在Android 5.1(API level 22)及以下的裝置上,只支援ActionBar模式。

8-瀏覽器書籤變化(Browser Bookmark Changes)

android6.0移除了全域性書籤的支援。

(1)android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark()方法被移除;

(2)同樣的READ_HISTORY_BOOKMARKS和WRITE_HISTORY_BOOKMARKS許可權也被移除。

(3)如果你app的目標版本是android6.0或更高,請不要訪問全域性的provider獲取書籤,而是應該在應用的內部儲存書籤資料。

9-Wi-Fi和網路變化(Wi-Fi and Networking Changes)
  android6.0在Wi-Fi和網路API執行行為上有如下的變化
(1)現在,你的app只能修改你自己建立的WifiConfiguration物件的狀態,而不再允許修改或刪除由使用者或其它app建立的WifiConfiguration物件;
(2)之前,應用可以使用enableNetwork(),設定disableAllOthers=true,來使裝置斷開其它網路,如蜂窩網路,而強制連線指定的Wi-fi網路。在此版本上,裝置將不會從其它網路斷開連線。如果你的app的targetSdkVersion是20或者更低,將固定在選擇的Wi-Fi網路。如果targetSdkVersion是21或者更高,使用multinetwork APIs (如openConnection(), bindSocket()和bindProcessToNetwork()方法)來保證網路流量被髮送到指定的網路上。

10-企業Android的變化(Android for Work Changes)

  此版本Android for Work包括一下行為的變化:

  個人環境中的企業聯絡人:當用戶檢視過去的通話記錄時,Google撥號器的通話記錄顯示企業聯絡人(work contacts)。設定setCrossProfileCallerIdDisabled()為true,在Google撥號器中隱藏企業聯絡人的通話記錄。預設情況下,在裝置上通過藍芽分享聯絡人時,企業聯絡人與個人聯絡人一起顯示,除非設定setBluetoothContactSharingDisabled()為false。
  Wi-Fi配置移除:通過Profile Owner新增的Wi-Fi配置(例如,呼叫addNetwork()方法)在其對應的企業配置(work profile)被移除後刪除。
  Wi-Fi配置鎖定:當WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN值為非0時,使用者無法修改或刪除由啟用的裝置擁有者(Device Owner)建立的任何Wi-Fi配置。使用者依然能夠建立或修改他們自己的Wi-Fi配置。啟用的裝置擁有者擁有編輯或移除任何的Wi-Fi配置,即使這些配置不是它建立的。
  通過Google賬戶新增的下載企業策略控制器(Work Policy Controller):在管控環境之外,當需要進行管理的Google賬號要求通過企業策略控制器(WPC)app新增到裝置時,新增賬號流程會提示給使用者去安裝合適的WPC。這一行為對通過設定>賬號和初始化裝置時新增的賬號同樣起作用。
  DevicePolicyManager API的變化:
(1)呼叫setCameraDisabled()方法,僅影響當前呼叫相機的使用者;在managed profile中呼叫此方法並不影響primary user中使用相機的app執行。
(2)此外,setKeyguardDisabledFeatures()方法對配置擁有者(Profile Owner)和裝置擁有者都可用。
(3)配置擁有者能夠設定如下的鎖屏限制:
      KEYGUARD_DISABLE_TRUST_AGENTS 和 KEYGUARD_DISABLE_FINGERPRINT, 影響配置父使用者(parent user)的鎖屏設定
      KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS, 僅影響在managed profile中應用產生的通知。
(4)createAndInitializeUser() 和 createUser()方法被廢棄(deprecated)
(5)當給定的應用在前臺時,setScreenCaptureDisabled()方法阻塞輔助框架(assist structure)  
(6)EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM 預設為SHA-256. SHA-1 作為相容性的備用,但未來將會被刪除。
(7)EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM 目前只接受SHA-256。
(8)存在與Android6.0(API level 23)的Device initializer APIs現在被移除。
(9)EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS被移除,因此,NFC觸碰配置不能在程式碼上解鎖一個恢復出廠設定被保護的裝置。
(10)現在可以使用EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE在managed device上通過NFC觸碰傳遞資料給device owner app
(11)Android for Work API在M的執行時許可權上進行了優化,包括企業配置(Work profiles),輔助層(assist layer)等。新的DevicePolicyManager 許可權API並不影響Android M之前的應用。
(12)當用戶在初始化設定流程中通過ACTION_PROVISION_MANAGED_PROFILE 或 ACTION_PROVISION_MANAGED_DEVICE intent退出同步部分,系統將會返回RESULT_CANCELED這一返回值。

11- 其它API的變化:
    資料流量統計(Data Usage):android.app.usage.NetworkUsageStats類被重新命名為NetworkStats。

  全域性設定變化:
    (1)這些配置不再能通過setGlobalSettings()來設定:
      BLUETOOTH_ON
      DEVELOPMENT_SETTINGS_ENABLED
      MODE_RINGER
      NETWORK_PREFERENCE
      WIFI_ON
    (2)這些配置現在能通過setGlobalSettings()來設定:

      WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN

Android 9.0 新特性

Google於2018年3月8日悄無聲息的推送了Android P,不出意外的話這也將是Android 9.0的代號。接下來一起看看在這次更新中有哪些新功能吧。 
本文參考:Google Developer

新特性

室內WIFI定位

Android P增加了對RTT Wi-Fi協議的支援,以此作為室內定位的基礎。 
在支援硬體支援的Android P裝置上,開啟定位並且開啟WIFI掃描後就可以使用該功能進行定位。應用可以測量與附近支援RTT的Wi-Fi接入點(AP)的距離。裝置必須啟用位置並啟用Wi-Fi掃描(在設定>位置下)。使用這個功能不會連線到WIFI,而且為了保持隱私,只有手機能確定AP到裝置的距離,反之則不能。 
如果裝置測量到3個或更多AP的距離,則可以使用多點定位演算法來估算最適合這些測量值的裝置位置。其結果通常可以精確到1至2米範圍。

//注:該處在2018.3.8的版本中還有bug,WIFI_RTT_RANGING_SERVICE沒有新增到@ServiceName標記中
WifiRttManager wifiRttManager = (WifiRttManager) getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint();
builder.addWifiAwarePeer();
wifiRttManager.startRanging(builder.build(), () -> {...}, new RangingResultCallback{...});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

該功能API在android.net.wifi.rtt下。

“劉海”螢幕支援

Android P 支援了手機螢幕是不規則形狀時的獲取(主要是應對劉海屏吧)。可以使用類似windowInsets.getDisplayCutout()來獲取一些你想要的資訊。

//您可以在自己的View中獲取到不應該繪製的部分螢幕
getRootWindowInsets().getDisplayCutout().getBounds();
getRootWindowInsets().getDisplayCutout().getSafeInsetBottom();
getRootWindowInsets().getDisplayCutout().getSafeInsetLeft();
getRootWindowInsets().getDisplayCutout().getSafeInsetRight();
getRootWindowInsets().getDisplayCutout().getSafeInsetTop();
//也可以設定Window的屬性
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

通知

Android P還增加了許多對通知的支援。

增強體驗

從Android 7.0開始,就優化了Android通知欄的體驗。 
在P當中,又新增了下述功能: 
支援影象:Android P現在在手機上的訊息通知中顯示影象。您可以在訊息上使用setData()來顯示影象。 
會話參與者的簡化支援:新的Notification.Person類用於標記參與聊天的人,包括他們的頭像和URI。還有其他的一些API,現在都用Person類作為標誌引數而不是CharSequence。

Notification.Builder builder = new Notification.Builder(this, "a");
//新的聊天物件
Notification.Person p = new Notification.Person();
//在MessagingStyle中用Person代替了以往的CharSequence
Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);
Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message("aaa", 100, p);
//可以顯示影象了
message.setData();
messageStyle.addMessage(message);
builder.setStyle(messageStyle);
Notification notification = builder.build();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

將回復另存為草稿:當用戶無意中關閉訊息通知時,您的應用可以檢索系統傳送的EXTRA_REMOTE_INPUT_DRAFT來獲取一些資訊。 
確定對話是否是群組對話:您可以使用setGroupConversation()來有目的地將對話標識為群組對話或非群組對話。 
為意圖設定語義動作:setSemanticAction()方法允許您為某個動作提供語義含義,如標記為讀取,刪除,回覆等。 
SmartReply

通道設定、廣播以及免打擾

Android O引入了Notification Channels,可讓您為要顯示的每種型別的通知建立一個使用者可自定義的頻道。 Android P通過以下更改簡化了通知渠道設定: 
阻止渠道:使用者現在可以在應用的通知設定中阻止整組渠道。您可以使用isBlocked()方法來確定某個組何時被阻止,不對被阻止的組傳送訊息。 
此外,您的應用可以使用新的getNotificationChannelGroup()方法查詢當前渠道設定。 
新的廣播型別:Android系統現在在通知頻道和頻道組的阻塞狀態發生變化時傳送廣播。擁有被阻止的頻道或群組的應用可以監聽這些Intent並作出相應的反應。有關這些Intent的更多資訊,請參閱NotificationManager參考中更新後的常量列表。有關對廣播Intent作出反應的資訊,請參閱廣播。 
新的免打擾優先順序類別:NotificationManager.Policy有兩個新的策略常量:PRIORITY_CATEGORY_ALARMS(按優先順序排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(優先排列媒體,系統和遊戲聲音)

多相機支援和相機更新

現在,可以同時從兩個或更多的物理攝像頭同時獲得資料流。在具有雙前置或雙後置攝像頭的裝置上,可以實現無法使用單個攝像頭實現的功能,例如無縫縮放,散景 ,和立體視覺。 該API還允許您呼叫合理的或者融合的相機流,以便在兩臺或更多臺相機之間自動切換。 
相機的其他改進包括新的android.hardware.camera2.params.SessionConfiguration,有助於減少初始捕捉期間的延遲。而Surface共享可讓相機客戶端處理各種使用情況,而無需停止和啟動相機流式傳輸。 此外還添加了基於顯示的閃光燈支援的API。 
Android P還支援支援deveices上的外部USB / UVC相機

新的圖片解碼

Android P新增了ImageDecoder類,為解碼影象提供了一種更優的方法。由此可以用ImageDecoder來替換BitmapFactory和BitmapFactory.Options。更多使用方法請參見官方API。

String filePath = "test";
File file = new File(filePath);
ImageDecoder.Source source = ImageDecoder.createSource(file);
ImageDecoder.decodeBitmap(source);
ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo, source1) -> {
    //裁剪影象
    imageDecoder.setCrop();
    //調整大小
    imageDecoder.setResize();
});
BitmapFactory.decodeFile(filePath);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

動畫

Android P引入了一個新的AnimatedImageDrawable類來繪製和顯示GIF和WebP動畫影象。 AnimatedImageDrawable與AnimatedVectorDrawable類似,因為AnimatedImageDrawable動畫也是基於RenderThread工作的。 RenderThread本身在內部使用工作執行緒進行解碼,因此解碼不會干擾RenderThread。 這種實現允許您的應用擁有動畫影象,而無需管理其更新或干擾應用的UI執行緒。

Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
    // Prior to start(), the first frame is displayed
    ((AnimatedImageDrawable) d).start();  
}
  • 1
  • 2
  • 3
  • 4
  • 5

HDR VP9視訊,HEIF影象壓縮和媒體API

Android P增加了對HDR VP9 Profile 2的內建支援。

Android P支援HEIF影象(隔壁IOS在2017年10月推的新的圖片編碼)編碼。 
Android P還引入了MediaPlayer2。該播放器支援使用DataSourceDesc構建的播放列表。

MediaPlayer2.create();
  • 1

注:筆者對影象/視訊編解碼方面不甚了了,有興趣的可以自行參閱API

JobScheduler中的資料成本敏感度

在Android P當中,JobScheduler得到了改進,使其能夠更好地為使用者處理與網路相關的工作,並配合運營商分別提供網路狀態訊號。 
Jobs現在可以定義出其估計的資料大小,預取訊號,並指定詳細的網路要求 - 運營商可以將網路報告為擁塞或不用流量計費的。然後,JobScheduler根據網路狀態管理工作。例如,當網路擁塞時,JobScheduler可能推遲大型網路請求。在不用流量計費的的網路上時,JobScheduler可以預讀來改進使用者體驗。

神經網路API 1.1

對神經網路API新增了9個功能:Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, and Squeeze。

改進表單自動填充

Android 8.0(API26)引入了自動填充框架,這使得在應用中填寫表單變得更加容易。 Android P引入了自動填充服務並實現了多項改進,以在填寫表單時進一步增強使用者體驗。 有關更多詳細資訊,請參閱自動填充框架。 
注:該自動填充框架筆者應是Google服務中的內容,國內使用者可能會體驗不到(或許有廠商自己的版本)。

安全增強

Android P引入了許多新的安全功能,包括統一的指紋驗證對話方塊和敏感交易的高確信度的使用者確認。 有關更多詳細資訊,請參閱安全更新頁面。

Android 備份加密

Android P支援使用客戶端金鑰對Android備份進行加密。 這項隱私措施,需要裝置的PIN,圖案密碼或標準密碼才能從使用者裝置備份的資料中恢復資料。 
要了解有關在Android裝置上備份資料的更多資訊,請參閱資料備份概述。 
注:據筆者所知,國內廠商基本都做了自己的備份系統(或者和其他大廠合作),所以沒興趣的同學散了吧。

總結

Android 5.0

1,扁平化的開始

2,Dvk被Art替換

Android 6.0

1,動態許可權管理

2,指紋識別

3,電源管理

4,移除了了httpClient

Android 7.0

1,分屏多工

2,Android有popupwindow顯示bug

Android 8.0

1,畫中畫

2,通知

3,自適應圖示

4,後臺程序限制

5,特殊訪問許可權

Android 9.0

1,劉海平支援

https://blog.csdn.net/haovip123/article/details/54618642

https://blog.csdn.net/lzllzllhl/article/details/76889957

https://blog.csdn.net/GenlanFeng/article/details/79496359

寫在最後

本文主要是針對Developer的新特性,以上如有各種紕漏歡迎各位在評論區指出,筆者會不定時/根據Android API更新而更新。也歡迎各位同學使用新的API,幫助我們OS的進步。