### **[向 Android 8.0 遷移應用](https://developer.android.com/about/versions/oreo/android-8.0-migration.html)**
Android 8.0 引入了若干新的功能和 API,并加入了即便您未對應用做任何更改仍可能對其行為產生影響的一些變動。為幫助您做好準備,本頁面將說明如何執行兼容性測試,以及如何更新應用以便利用 Android 8.0 的新功能:
1. 確保平臺兼容性
驗證您的應用能夠在新版本平臺上全功能運行。在此階段,您不需要使用新的 API,也不需要更改應用的 targetSdkVersion,但可能需要進行一些細微的更改。
2. 使用 Android 8.0 SDK 構建應用
當您準備好利用平臺的新功能時,將 targetSdkVersion 更新至“O”,驗證應用是否仍可按預期方式運行,然后開始使用新的 API。

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

#### **準備一臺運行 Android 8.0 的設備**
* 如果您有一臺兼容設備(Pixel、Pixel XL、Pixel C、Nexus 5X、Nexus 6P 或 Nexus Player),請從下載頁面獲得適合您的設備的 Android 8.0 系統映像,然后按照說明將映像刷入設備。
* 或下載適用于 Android Emulator 的 Android 8.0 系統映像。它列于 SDK 管理器的 Android 8.0 Preview 下,顯示為 Google APIs Intel x86 Atom System Image。
> 注:Android 8.0 系統映像只能通過 Android Studio 3.0 Canary 下載。如需了解詳細信息,請參閱下面一節以獲取 Android 8.0 SDK。
#### **執行兼容性測試**
與 Android 8.0 的兼容性測試多半與您準備發布應用時執行的測試屬于同一類型。這時有必要回顧一下核心應用質量準則和測試最佳做法。
不過,測試還有另一個層面:Android 8.0 向 Android 平臺引入了一些變化,即便不對 targetSdkVersion 做任何變動,仍可能影響應用的行為或令其根本無法運行。因此,您必須回顧表 1 中的關鍵變化,并對任何為適應這些變化而實現的修復進行測試。
表 1. 對運行在 Android 8.0 設備上的所有應用都有影響的關鍵變化。

如需查看更詳盡的 Android 8.0 行為變更列表,另請參閱 Android 8.0 行為變更。
#### **構建具有 Android 8.0 功能的應用**
如表 2 所述,除了提供新的 API 外,Android 8.0 還會在您更新 targetSdkVersion 時引發其他行為變更。本節說明如何將開發環境設置為以新平臺為目標,以及如何著手構建和測試 Android 8.0 API 帶來的變化和新功能。
> 注:上述旨在確保平臺兼容性的步驟是面向 Android 8.0 構建應用的先決條件,因此請您務必先完成這些步驟。

#### **獲取 Android 8.0 SDK**
1. 安裝 Android Studio 3.0 Canary。
只有 Android Studio 3.0 包含對 Android 8.0 提供的所有新開發者功能的支持。因此您需要獲得 Android Studio 3.0 Canary 版本,以便開始使用 Android 8.0 SDK。但您仍可保留已安裝的 Android Studio 穩定版。
2. 啟動 Android Studio 3.0,然后點擊 Tools > Android > SDK Manager 打開 SDK 管理器。
3. 在 SDK Platforms 標簽中,選中 Show Package Details。在 Android 8.0 Preview 下選中下列項:
* Android SDK Platform O
* Google APIs Intel x86 Atom System Image(只需在使用模擬器時選中)
4. 切換到 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
5. 點擊 OK 安裝所有選定的 SDK 軟件包。
現在您就可以開始使用 Android 8.0 進行開發了。
#### **更新構建配置**
將 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 8.0
repositories {
maven {
url 'https://maven.google.com'
}
}
~~~
> 您不能在此配置下發布應用。“O”版本是一個臨時 API 級別,只能用于 Android 8.0 期間的開發和測試。您必須等到最終 API 級別發布時再發布 Android 8.0 變更,屆時再次更新配置。
#### **從清單文件中移除廣播接收器**
由于 Android 8.0 引入了新的廣播接收器限制,因此您應該移除所有為隱式廣播 Intent 注冊的廣播接收器。將它們留在原位并不會在構建時或運行時令應用失效,但當應用運行在 Android 8.0 上時它們不起任何作用。
顯式廣播 Intent(只有您的應用可以響應的 Intent)在 Android 8.0 上仍以相同方式工作。
這個新增限制有一些例外情況。如需查看在以 Android 8.0 為目標平臺的應用中仍然有效的隱式廣播的列表,請參閱隱式廣播例外。
#### **測試 Android 8.0 應用**
完成以上準備工作后,您就可以構建應用,然后對其做進一步測試,以確保 Android 8.0 為目標平臺時它能正常工作。這時有必要回顧一下核心應用質量準則和測試最佳做法。
如果您構建應用時設置了適用于 Android 8.0 的 targetSdkVersion,應該注意特定的平臺變化。即便您不實現 Android 8.0 中的新功能,其中的一些變化仍可能嚴重影響應用的行為或令其根本無法運行。
表 2 列出了這些變化以及可獲得更多信息的鏈接。
表 2. targetSdkVersion 設置為“O”時影響應用的關鍵變化。

如需查看更詳盡的 Android 8.0 行為變更列表,請參閱 [Android 8.0 行為變更](https://developer.android.com/preview/behavior-changes.html)。
要想探究 Android 8.0 提供的新功能和新 API,請參閱 [Android 8.0 功能和 API](https://developer.android.com/preview/api-overview.html)。
- 前言
- Google官網對Android API各版本的介紹
- jelly Bean(果凍豆)Android 4.1、4.2、4.3
- Android 4.1
- Android 4.2
- Android 4.3
- KitKat(Android 4.4.*)巧克力
- Android 4.4 APIS
- Lollipop(棒棒糖)Android 5.*
- Android 5.0 APIs
- Android 5.0 Changes(變更)
- Android 5.1APIs
- Marshmallow(棉花糖)Android 6.0
- Android 6.0 APIs
- Android 6.0 Changes(變更)
- Android 6.0 Samples
- Android 6.0 Testing
- Nougat(牛扎塘)Android 7.*
- Android 7.0
- API
- 行為變更
- 示例
- Android 7.1
- 開發者API
- 示例Sample
- Oreo(奧利奧)8.*
- Android 8.0
- 功能和 API
- Android 8.0 行為變更
- 向 Android 8.0 遷移應用
- Android 8.0 示例
- Android 8.1
- 后臺執行限制
- 后臺位置限制
- API指南
- Android 簡介
- 應用基礎知識
- 設備兼容性
- 系統權限
- 請求權限
- 定義權限
- 平臺架構
- Java8 概覽
- 在ART上驗證應用行為
- 應用組件
- Intent 和 Intent 過濾器(Google官網介紹)
- 通用intent
- Activity
- 任務和返回棧(官網譯文)
- 概覽屏幕
- 活動簡介
- 活動生命周期
- 活動狀態更改
- 進程和應用程序生命周期
- 包裹和捆綁
- 最近的屏幕
- 片段
- 加載器
- 服務Service
- 綁定服務
- AIDL
- 內容提供程序
- 內容提供程序基礎知識
- 創建內容提供程序
- 日歷提供程序
- 聯系人提供程序
- 存儲訪問框架
- 使用存儲訪問框架打開文件
- 創建自定義文檔提供程序
- 應用小部件
- 應用小部件主機
- 進程和線程
- 應用資源
- 概覽
- 提供資源
- 訪問資源
- 處理運行時變更
- 本地化
- ICU4J Android框架API
- Android上的國際化
- 語言和語言區域
- 復雜的XML資源
- 資源類型
- 動畫
- 顏色狀態列表
- 可繪制對象
- 布局
- 菜單
- 字符串
- 樣式
- 其他類型
- 應用清單
- <action>
- <activity>
- <activity-alias>
- <application>
- <category>
- <compatiable-screens>
- <data>
- <grant-uri-permission>
- <intent-filter>
- <manifest>
- <meta-data>
- <path-permission>
- <permission>
- <permission-group>
- <permission-tree>
- <provider>
- <receiver>
- <service>
- <supporte-gl-texture>
- <supports-screens>
- <uses-configuration>
- <uses-feature>
- <uses-library>
- <uses-permission>
- <uses-permission-sdk-23>
- <uses-sdk>
- 用戶界面
- 界面概覽
- 界面布局
- 線性布局
- 相對布局
- 列表視圖
- 網格視圖
- 回收站視圖
- 外觀和感覺
- 可下載的字體
- XML中的字體
- 表情符號兼容性
- 自動調整TextView
- 樣式和主題-
- 輸入控件
- 按鈕
- 文本字段
- 復選框
- 單選按鈕
- 切換按鈕
- 微調框
- 選取器
- 輸入事件
- 菜單Menu
- 設置
- 對話框
- 通知
- Toast
- 自適應圖標
- 應用快捷方式
- 搜索
- 創建搜索界面
- 添加近期查詢建議
- 添加自定義建議
- 可搜索配置
- 多窗口支持
- 拖放
- 無障礙功能
- 為應用設置無障礙功能
- 無障礙功能開發者檢查單
- 構建無障礙服務
- 讓應用更容易訪問
- 使用節點樹調試
- 構建可訪問自定義視圖
- 樣式和主題
- 自定義組件
- 動畫和圖形
- 概覽介紹
- 屬性動畫
- 視圖動畫
- 可繪制動畫
- 畫布和可繪制對象
- 基于物理的動畫
- Spring Animation
- Fling Animation
- OpenGL ES
- 硬件加速
- 計算
- RenderScript
- 高級RenderScript
- Runtime API Reference(參考)
- Numerical Types(數字類型)
- Object Types(對象類型)
- Conversion Functions(轉換函數)
- Mathematical Constants and Functions(數學常量和函數)
- Vector Math Functions(矢量數學函數)
- Matrix Functions(矩陣函數)
- Quaternion Functions(四元數函數)
- Atomic Update Functions(原子更新函數)
- Time Functions and Types(時間函數和類型)
- Allocation Data Access Functions(分配數據訪問函數)
- Object Characteristics Functions(對象特性函數)
- Kernel Invocation Functions and Types(內核調用函數和類型)
- Input/Output Functions(輸入輸出函數)
- Debugging Functions(調試函數)
- Graphics Functions and Types(圖形函數和類型)
- Index(索引)
- Media Apps(媒體應用)
- Media Apps Overview(媒體應用程序概述)
- Working with a Media Session(使用媒體會話)
- Building an Audio App(建立一個音頻應用)
- Building a Media Browser Service(構建媒體瀏覽器服務)
- Building a Media Browser Client(構建媒體瀏覽器客戶端)
- Media Session Callbacks(媒體會話回調)
- Building a Video App(建立一個視頻應用)
- Building a Video Player Activity(建立一個視頻播放器Activity)
- Media Session Callbacks-(媒體會話回調)
- Responding to Media Buttons(響應媒體按鈕)
- Handling Changes in Audio Output(處理音頻輸出的變化)
- Managing Audio Focus(管理音頻焦點)
- The Google Assistant and Media Apps(Google智能助理和媒體應用)
- 媒體和相機
- Supported Media Formats(支持的媒體格式)
- MediaPlayer(媒體播放器)
- MediaRecorder
- ExoPlayer
- Controller Amplitude with VolumeShaper(VolumeShaper控制器振幅)
- Media Routing(媒體路由)
- MediaRouter API
- MediaRouteProvider API
- Camera API(相機API)
- 位置和傳感器
- Location and Maps(位置和地圖)
- Location Strategies(位置策略)
- Sensors Overview(傳感器概覽)
- Motion Sensors(運動傳感器)
- Position Sensors(位置傳感器)
- Environment Sensors(環境傳感器)
- Raw GNSS Measurements(原始的GNSS測量)
- 連接
- Bluetooth
- Bluetooth Low Energy(藍牙低功耗)
- NFC
- NFC Basics(NFC基礎知識)
- Advanced NFC(高級NFC)
- Host-based Card Emulation(基于主機的卡模擬)
- Telecom(電信)
- Self-Managed ConnectionServices(自我管理的連接服務)
- Wi-Fi P2P
- Wi-Fi Aware
- Companion Device Pairing
- USB
- Accessory(配件)
- Host(主機)
- SIP
- 文本和輸入
- Autofill Framework(自動填充框架)
- Test your app with autofill(使用自動填充測試你的應用)
- Building autofill services(構建自動填充服務)
- Copy and Paste(復制和粘貼)
- Creating an IME(創建IME)
- Image Keyboard(圖像鍵盤)
- Spelling Checker(拼寫檢查程序)
- 數據存儲
- Storage Options(存儲選項)
- Data Backup(數據備份)
- Account Transfer API(賬戶轉移API)
- Auto Backup(自動備份)
- Key/Value Backup(鍵值備份)
- Testing Backup and Restore(測試備份和還原)
- App Install Location(應用安裝位置)
- 庫
- 支持庫
- 功能
- 修訂歷史記錄
- 庫設置
- 數據綁定庫
- 測試支持庫
- 管理
- 設備策略
- 網絡應用
- Supporting Different Screens in Web Apps(在網絡應用中支持不同屏幕)
- Building Web Apps in WebView(在WebView中構建網絡應用)
- Managing WebViews
- Migrating to WebView in Android 4.4(遷移到Android4.4中的WebView)
- Debugging Web Apps(調試網絡應用)
- Best Practices for Web Apps(網絡應用最佳做法)
- 最佳實踐
- Supporting Multiple Screens(支持多種屏幕)
- Distributing to Specific Screens(分配到特定屏幕)
- Screen Compatibility Mode(屏幕兼容性模式)
- Designing for Seamlessness
- Supporting Tablets and Handsets
- 培訓