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 版本更新為下列版本:
android { compileSdkVersion 'android-O' buildToolsVersion '26.0.0-rc2' defaultConfig { targetSdkVersion 'O' } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0-beta1' }// REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android Orepositories { maven { url 'https://maven.google.com' } }
您不能在此配置下發布應用。“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 遷移應用的過程中遇到問題或不解之處,歡迎您通過留言等的方式與我們聯絡。我們也會陸續釋出更多開發者所關心的 Android O 內容。
推薦閱讀:
釋出Android Things Developer Preview 4.1
官方詳細介紹Android Studio 3.0 Canary 1
Material Design 設計師分享如何快速入門 UX 設計 | Google Play 開發者 FAQ 特別篇
相關文章
- Dart 2 Web 應用遷移指南DartWeb
- Android O 行為變更官方指南Android
- Android O 遷移測試:RoomAndroidOOM
- 應用遷移至 Android P 操作指南Android
- Flutter Android 1.12 遷移指南FlutterAndroid
- 分散式 PostgreSQL 叢集(Citus)官方教程 - 遷移現有應用程式分散式SQL
- Google官方應用程式架構指南Go架構
- 應用遷雲之映象遷移-(1)概述
- webpack 4遷移指南Web
- AFNetworking 3.0遷移指南
- Google 官方應用架構的最佳實踐指南Go應用架構
- Android O 讓安裝應用更安全Android
- CNoder 應用遷移記 | 掘金技術徵文
- Android O 適配詳細指南Android
- Gradle Kotlin DSL遷移指南GradleKotlin
- iOS Core Data 資料遷移 指南iOS
- WordPress 遷移外掛終極指南
- “遷移策略+新容器執行時”應對有狀態應用的冷熱遷移挑戰
- 蘋果出了個指南教你怎麼從Android向iOS遷移資料蘋果AndroidiOS
- 新的ASP.NET Core 遷移指南ASP.NET
- Dore 混合應用框架 —— 基於 React Native 的混合應用遷移方案框架React Native
- 虛擬機器遷移技術原理與應用虛擬機
- Oracle官方推薦的資料遷移方式評估Oracle
- 用Rman 異機遷移
- Flutter 開發桌面應用——遷移已有App應用到桌面版FlutterAPP
- 跨平臺遷移oracle資料庫指南Oracle資料庫
- TalkingData:2014年O2O移動應用行業研究報告行業
- 0 元徹底掌握遷移學習原理及應用遷移學習
- Django應用資料庫從MySQL到PostgreSql的遷移Django資料庫MySql
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(一)WebCloud
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(二)WebCloud
- 濟南移動應用android開發者沙龍Android
- 移動應用變現AdMob入門指南(上)
- Android 應用防止被二次打包指南Android
- 用rman遷移資料庫資料庫
- Android 端影象多風格遷移Android
- Sentry 開發者貢獻指南 - 資料庫遷移資料庫
- WebSphere Application Server V7 快速遷移指南WebAPPServer