Android O 遷移應用官方指南

谷歌開發者_發表於2017-06-27

640?wx_fmt=gif


640?wx_fmt=png

Android O 引入了若干新的功能和 API,並加入了即便您未對應用做任何更改仍可能對其行為產生影響的一些變動。為幫助您做好準備,本文將說明如何執行相容性測試,以及如何更新應用以便利用 Android O 的新功能:

  1. 確保平臺相容性

    驗證您的應用能夠在新版本平臺上全功能執行。在此階段,您不需要使用新的 API,也不需要更改應用的 targetSdkVersion,但可能需要進行一些細微的更改。

  2. 使用 Android O SDK 構建應用

    當您準備好利用平臺的新功能時,將 targetSdkVersion 更新至 “O”,驗證應用是否仍可按預期方式執行,然後開始使用新的 API。

640?wx_fmt=jpeg



確保平臺相容性

這一步的目標是確保應用在 Android O 上可照常執行。由於一些平臺變化可能影響應用的行為方式,因此可能需要進行一些調整,但您不需要使用新的 API 或更改 targetSdkVersion。

640?wx_fmt=jpeg



準備一臺執行 Android O 的裝置

640?wx_fmt=jpeg

  • 如果您有一臺相容裝置(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 構建應用的先決條件,因此請您務必先完成這些步驟。

640?wx_fmt=jpeg



獲取 Android O SDK

640?wx_fmt=png

  1. 安裝 Android Studio 3.0 Canary。

    只有 Android Studio 3.0 包含對 Android O 提供的所有新開發者功能的支援。因此您需要獲得 Android Studio 3.0 Canary 版本,以便開始使用 Android O SDK。但您仍可保留已安裝的 Android Studio 穩定版。

  2. 啟動 Android Studio 3.0,然後點選 Tools > Android > SDK Manager 開啟 SDK 管理器。

  3. 在 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 變更,屆時再次更新配置。



從清單檔案中移除廣播接收器

640?wx_fmt=jpeg

由於 Android O 引入了新的廣播接收器限制,因此您應該移除所有為隱式廣播 Intent 註冊的廣播接收器。將它們留在原位並不會在構建時或執行時令應用失效,但當應用

執行在 Android O 上時它們不起任何作用。


顯式廣播 Intent(只有您的應用可以響應的 Intent)在 Android O 上仍以相同方式工作。


這個新增限制有一些例外情況。如需檢視在以 Android O 為目標平臺的應用中仍然有效的隱式廣播的列表,請通過點選以下連結參閱隱式廣播例外。

(https://developer.android.google.cn/preview/features/background-broadcasts.html)



測試 Android O 應用

640?wx_fmt=jpeg

完成以上準備工作後,您就可以構建應用,然後對其做進一步測試,以確保 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 行為變更:集合的處理


640?wx_fmt=jpeg

如果您對 Android O 遷移應用的過程中遇到問題或不解之處,歡迎您通過留言等的方式與我們聯絡。我們也會陸續釋出更多開發者所關心的 Android O 內容。



推薦閱讀:

釋出Android Things Developer Preview 4.1

官方詳細介紹Android Studio 3.0 Canary 1

馬上報名 | 10大祕訣提高應用使用者留存率

Material Design 設計師分享如何快速入門 UX 設計 | Google Play 開發者 FAQ 特別篇


640?wx_fmt=gif




相關文章