今天,2017年3月26日星期日,負責Android項目的副總裁Dave Burke先生向廣大開發者宣布Android O正式釋出。看來不僅僅是程式員周末沒閑着,就連google副總裁也忙得不可開交,隻能在周末推廣Android新特性。我懷着好奇心進入Android開發者網站,發現新版本變化不小:背景限制、網絡連接配接、高品質的藍牙音頻編解碼、自适應圖示、鍵盤導航、運作時優化等。以下是原文翻譯(來自https://developer.android.google.cn/preview/behavior-changes.html):
Android O引入許多新特性與新功能,包含大量的系統和API行為和變化。這篇文檔突出介紹一些重要變化,建議開發者深入了解以便為自己項目所用。
這些變化中大多數會影響着所有app,不管是什麼目标版本。但是,一些變化隻會影響Android O 版本。為了最大限度地清晰地清晰表達,這頁會分為兩個章節:app的通用版本和針對Android O 的版本。
app通用版本
這些變化适用于所有app,當它們運作于Android O 平台的時候,不管它們目标版本API大小。當應用于app時,所有開發者應該複習這些變化,并且調整你們的app以正确地支援這些功能。
背景執行限制
作為Android O 用來延長電池壽命的其中一個功能,當你的app進入休眠狀态時,沒有激活任何元件,系統會釋放app持有任何喚醒鎖。
Android背景限制
為了節約電量、提高使用者體驗、系統健康,會盡量降低背景app接收位置更新的頻率,當你使用的裝置運作于Android O 平台時。這些行為變化會影響所有app接收位置更新,包括google play 服務。
這些變化影響一下API:
1、融合位置提供(FLP)
2、地理栅欄
3、GNSS測量
4、位置管理器
藍牙
Android O 做出以下調整,使用ScanRecorder.getBytes()來檢索資料長度:
1、getBytes()方法不對接收的位元組數作任何假設,是以,app不應該以來任何傳回位元組數的最大值或最小值。相反,你們應該自己估計接收數組的長度。
2、相容藍牙5.0的裝置,傳回的資料長度應該超過60位元組的原有最大值。
3、如果遠端裝置沒有提供掃描響應,也有可能傳回少于60位元組數。
輸入與導航
随着運作于Chrome OS的Android app的出現,與其他裝置例如可穿戴式裝置,我們看到在Android app使用鍵盤導航的複蘇。在Android O中,我們重定向鍵盤作為導航輸入裝置,産生一個更可靠、可預測的箭頭與導航标簽模型。
為了學習如何在你的app中更好運用鍵盤導航,請檢視Supporting Keyboard Navigation指南。
可通路性
在你的app TextView對象中,現在可通路性服務支援可點選執行個體。
為了學習更多關于可通路性服務,請檢視Accessibility指南。
安全
Android O 包含以下安全相關的變化:
1、平台不再支援SLLv3。
2、當建立一個HTTPS連接配接到伺服器,而沒有實作TLS協定的協商,HttpsUrlConnection不再嘗試早期的TLS版本和重試。
3、對于所有app,Android O具有一個安全計算(SECCOMP)過濾。系統調用僅限用于通過反射暴露的方法。雖然也有其他一些背景調用,但我們不推薦使用。
4、你app 的WebView對象,現在運作于多程序模型。為了提高安全,web内容在一個獨立隔離的程序進行處理,與app程序區分開來。
關于使用native庫來提高安全性的資訊,請檢視Native Libraries。
為了使得你的app更加安全的額外指導,請檢視 Security for Android Developers。
隐私
Android O在平台中做出如下關于隐私的調整:
1、現在平台處理辨別符與衆不同了。
2、查詢net.hostName的系統屬性會産生一個空指針。
3、你不再能假定,名稱為-1或者-2結束的apk駐留在目錄中了。app應該使用sourceDir來擷取目錄,而不能直接依賴目錄格式。
網絡與HTTP(S)連接配接
android O包含以下對網絡與HTTP連接配接的調整:
1、Options請求沒有請求體,會有一個Content-Length:0請求頭。原先版本沒有Content-Length的請求頭。
2、HttpUrlConnection規定Urls,在主機或者授權後面追加的反斜杠來包含空路徑。例如,它把http://example.com轉換成http://example.com/
3、Urls不能再包含空标簽。
4、Android O不再執行不安全的TLS/SLL協定版本回退。
5、在回退到TCP協定之前,InetAddress.isReachable()會先嘗試ICMP。
Android O 特有版本
背景執行限制
1、app背景運作不再能随便通路背景服務。
2、app不能在manifest檔案裡注冊隐式廣播。
安全
如果你的app網絡安全配置支援明文傳輸的opts out,WebView不能再通過HTTP進行通路,必須使用HTTPS來通路。
本地庫
在Android O版本的app裡,本地庫不再加載包含可寫的和可執行的代碼區。一些app應該會停止運作,因為無法正确加載庫。這是一個安全加強手段。更多詳情,請檢視 Writable and Executable Segments
集合處理
在Android O中,Collections.sort()屬于List.sort()的頂層。
大多數情況下,你可以使用一個接口來重寫List.sort(),根據不同API對預設實作的委托。例如:
@Override
public void sort(Comparator<? super E> comparator) {
if (Build.VERSION.SDK_INT <= 25) {
Collections.sort(this);
} else {
super.sort(comparator);
}
}
賬号通路與掃描
app不能再通路使用者賬号,除非持有賬号或者使用者授權通路。GET_ACCOUNTS權限不再有效。為了授權通路使用者,app應該使用
AccountManager.newChooseAccountIntent()方法。在獲得通路使用者授權後,app可以調用
AccountManager.getAccounts()來通路賬号。
内容更新通知
Android O 改變
ContentResolver.notifyChange()和
registerContentObserver(Uri, boolean, ContentObserver)的行為。
這些API需要為所有授權的URLs定義一個有效的
ContentProvider。定義一個具有相關權限的有效
ContentProvider,将可以幫助抵抗惡意app的攻擊,并且可
以防止隐私資料的洩漏給惡意的app。
自适應圖示
為幫助您更好地與裝置 UI 內建,您現在可以建立自适應圖示,系統可以基于裝置選擇的蒙版将這些圖示顯示為不同形狀。系統還将實作與圖示的自動互動, 并在啟動器、快捷方式、設定、共享對話框以及概覽螢幕中使用它們。
