天天看點

Android O 開發者預覽版新特性

        今天,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 內建,您現在可以建立自适應圖示,系統可以基于裝置選擇的蒙版将這些圖示顯示為不同形狀。系統還将實作與圖示的自動互動, 并在啟動器、快捷方式、設定、共享對話框以及概覽螢幕中使用它們。

Android O 開發者預覽版新特性
Android O 開發者預覽版新特性

繼續閱讀