Android O 迁移应用官方指南
Android O 引入了若干新的功能和 API,并加入了即便您未對應用做任何更改仍可能對其行為產生影響的一些變動。為幫助您做好準備,本文將說明如何執行兼容性測試,以及如何更新應用以便利用 Android O 的新功能:
確保平臺兼容性
驗證您的應用能夠在新版本平臺上全功能運行。在此階段,您不需要使用新的 API,也不需要更改應用的?targetSdkVersion,但可能需要進行一些細微的更改。
使用 Android O SDK 構建應用
當您準備好利用平臺的新功能時,將?targetSdkVersion?更新至 “O”,驗證應用是否仍可按預期方式運行,然后開始使用新的 API。
確保平臺兼容性
這一步的目標是確保應用在 Android O 上可照常運行。由于一些平臺變化可能影響應用的行為方式,因此可能需要進行一些調整,但您不需要使用新的 API 或更改?targetSdkVersion。
準備一臺運行 Android O 的設備
-
如果您有一臺兼容設備(Pixel、Pixel XL、Pixel C、Nexus 5X、Nexus 6P 或 Nexus Player),請從下面鏈接中包含的下載頁面獲得適合您的設備的 Android O 系統映像,然后按照說明將映像刷入設備。
(https://developer.android.google.cn/preview/download.html)
-
或下載適用于 Android Emulator 的 Android O 系統映像。它列于?SDK 管理器的?Android O Preview?下,顯示為?Google APIs Intel x86 Atom System Image。
注:Android O 系統映像只能通過?Android Studio 3.0 Canary?下載。如需了解詳細信息,請參閱下面一節以獲取 Android O SDK。
執行兼容性測試
與 Android O 的兼容性測試多半與您準備發布應用時執行的測試屬于同一類型。這時有必要回顧一下核心應用質量準則和測試最佳做法。
核心應用質量準則:
(https://developer.android.google.cn/develop/quality-guidelines/core-app-quality.html)
測試最佳做法:
(https://developer.android.google.cn/training/testing/index.html)
不過,測試還有另一個層面:Android O 向 Android 平臺引入了一些變化,即便不對?targetSdkVersion?做任何變動,仍可能影響應用的行為或令其根本無法運行。因此,您必須回顧表 1 中的關鍵變化,并對任何為適應這些變化而實現的修復進行測試。
表 1.?對運行在 Android O 設備上的所有應用都有影響的關鍵變化。
| 后臺位置更新頻率下降 | 如果應用接收來自后臺服務的位置更新,則其在 Android O 上接收更新的頻率要比舊版本 Android 低。具體地講,后臺服務接收位置更新的頻率不能超過每小時幾次。不過,當應用位于前臺時,位置更新頻率不變。 | 后臺位置限制 |
| 不再支持?net.hostname | 查詢?net.hostname?系統屬性返回的結果為空。 | 無 |
| send(DatagramPacket)?引發新異常 | 如果之前執行的?connect(InetAddress, int)?方法失敗,send(DatagramPacket)?方法會引發?SocketException。 | 行為變更:網絡連接和 HTTP(S) 連接 |
| AbstractCollection?方法引發正常的?NullPointerException | 現在,AbstractCollection.removeAll(null)?和?AbstractCollection.retainAll(null)?始終引發?NullPointerException;之前,當集合為空時不會引發?NullPointerException。此項變更使行為符合文檔要求。 | 行為變更:集合的處理 |
| Currency.getDisplayName(null)引發正常的?NullPointerException | 調用?Currency.getDisplayName(null)?會引發?NullPointerException。 | 行為變更:語言區域和國際化 |
如需查看更詳盡的 Android O 行為變更列表,另請參閱以下鏈接中包含的 Android O 行為變更。
(https://developer.android.google.cn/preview/behavior-changes.html)
構建具有 Android O 功能的應用
如 “如何測試 Android O 應用” 章節中的表 2 所述,除了提供新的 API 外,Android O 還會在您更新?targetSdkVersion?時引發其他行為變更。本節說明如何將開發環境設置為以新平臺為目標,以及如何著手構建和測試 Android O API 帶來的變化和新功能。
注:上述旨在確保平臺兼容性的步驟是面向 Android O 構建應用的先決條件,因此請您務必先完成這些步驟。
獲取 Android O SDK
安裝 Android Studio 3.0 Canary。
只有 Android Studio 3.0 包含對 Android O 提供的所有新開發者功能的支持。因此您需要獲得 Android Studio 3.0 Canary 版本,以便開始使用 Android O SDK。但您仍可保留已安裝的 Android Studio 穩定版。
啟動 Android Studio 3.0,然后點擊?Tools > Android > SDK Manager?打開 SDK 管理器。
在?SDK Platforms?標簽中,選中?Show Package Details。在?Android O Preview?下選中下列項:
-
Android SDK Platform O
-
Google APIs Intel x86 Atom System Image(只需在使用模擬器時選中)
切換到?SDK Tools?標簽,選中所有已提供更新的項(點擊每個顯示破折號??的復選框)。這應該包括下列必需項:
-
Android SDK Build-Tools 26.0.0(rc2 或更高版本)
-
Android SDK Platform-Tools 26.0.0(rc2 或更高版本)
-
Android Emulator 26.0.0
-
Support Repository
點擊?OK?安裝所有選定的 SDK 軟件包。
現在您就可以開始使用 Android O Developer Preview 進行開發了。
更新構建配置
將?compileSdkVersion、buildToolsVersion、targetSdkVersion?和 Support Library 版本更新為下列版本:
您不能在此配置下發布應用。“O” 版本是一個臨時 API 級別,只能用于 Android O Developer Preview 期間的開發和測試。您必須等到最終 API 級別發布時再發布 Android O 變更,屆時再次更新配置。
從清單文件中移除廣播接收器
由于 Android O 引入了新的廣播接收器限制,因此您應該移除所有為隱式廣播 Intent 注冊的廣播接收器。將它們留在原位并不會在構建時或運行時令應用失效,但當應用
運行在 Android O 上時它們不起任何作用。
顯式廣播?Intent(只有您的應用可以響應的 Intent)在 Android O 上仍以相同方式工作。
這個新增限制有一些例外情況。如需查看在以 Android O 為目標平臺的應用中仍然有效的隱式廣播的列表,請通過點擊以下鏈接參閱隱式廣播例外。
(https://developer.android.google.cn/preview/features/background-broadcasts.html)
測試 Android O 應用
完成以上準備工作后,您就可以構建應用,然后對其做進一步測試,以確保 Android O 為目標平臺時它能正常工作。這時您可以再次查閱我們的核心應用質量準則和測試最佳做法說明文檔。
如果您構建應用時設置了適用于 Android O 的?targetSdkVersion,應該注意特定的平臺變化。即便您不實現 Android O 中的新功能,其中的一些變化仍可能嚴重影響應用的行為或令其根本無法運行。
表 2 列出了這些變化以及可獲得更多信息的鏈接。
表 2.?targetSdkVersion?設置為 “O” 時影響應用的關鍵變化。
| 隱私性 | Android O 不支持使用 net.dns1、net.dns2、net.dns3 或 net.dns4 系統屬性。 | 行為變更:隱私性 |
| 實行了可寫且可執行的代碼段 | 對于原生庫,Android O 實行的規則是:數據不應可執行,代碼不應可寫。 | 行為變更:原生庫 |
| ELF 標頭和節驗證 | 動態鏈接器對 ELF 標頭和節頭中的更多值進行檢查,如果值無效則失敗。 | 行為變更:原生庫 |
| 通知 | 以 SDK 的 Android O 版本為目標平臺的應用必須實現一個或多個通知渠道,以便向用戶發布通知。 | API 概覽:通知 |
| List.sort()?方法 | 該方法的實現不得再調用?Collections.sort(),否則應用將因堆棧溢出而引發異常。 | 行為變更:集合的處理 |
| Collections.sort()?方法 | 在列表實現中,Collections.sort()?現在會引發?ConcurrentModificationException。 | 行為變更:集合的處理 |
總結
以上是生活随笔為你收集整理的Android O 迁移应用官方指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ECMAScript2018语言规范
- 下一篇: 如何通过OpenFace实现人脸识别框架