### **[Android 8.1功能和API](https://developer.android.com/about/versions/oreo/android-8.1.html)**
Android 8.1(API級別27)為用戶和開發人員引入了各種新特性和功能。本文檔重點介紹了開發人員的新功能。
#### **Android奧利奧(Go版)**
Android Go是我們主動為全球數十億在線用戶優化Android體驗。從Android 8.1開始,我們將使Android成為入門級設備的絕佳平臺。Android Oreo(Go版)配置中的功能包括:
* 內存優化。改善整個平臺的內存使用情況,確保應用程序可以在1GB或更少RAM的設備上高效運行。
* 靈活的定位選項。新的 硬件功能常量,可讓您通過Google Play將應用程序分配到普通或低RAM設備。
* Google Play。雖然所有的應用程序都可以在運行Android Oreo(Go版)的設備上使用,但Google Play將提供開發人員專門優化的應用程序的可見性,為數十億用戶提供數十億 指導方針的良好體驗 。
我們已經更新了數十億 指南的建設, 并提供了關于如何 針對運行Android Oreo(Go版)的設備優化您的應用的其他指導 。對于大多數開發者來說,優化現有的APK或使用Google Play的 多APK功能將您的APK版本定位到低內存設備是準備運行Android Oreo(Go版)的設備的最佳方式。請記住,無論使用哪種設備,讓您的應用 更輕盈,更高效,都可以讓您的整個觀眾受益
#### **神經網絡API**
Neural Networks API為設備上的機器學習框架(如TensorFlow Lite -Google的移動平臺ML庫以及Caffe2等)提供了加速的計算和推理。訪問TensorFlow Lite 開源回購下載和文檔。TensorFlow Lite可與Neural Networks API 協同工作,在移動設備上高效運行 MobileNets, Inception v3和 Smart Reply等模型。
#### **自動填充框架更新**
Android 8.1(API級別27)對自動填充框架進行了一些改進,您可以將其添加到應用程序中。
該BaseAdapter 級現在包括setAutofillOptions() 方法,它允許您提供值的字符串表示在一個適配器。這對于 在其適配器中動態生成值的微調控件非常有用。例如,您可以使用該setAutofillOptions()方法提供用戶可以選擇作為信用卡過期日期一部分的年份列表的字符串表示形式。自動填充服務可以使用字符串表示來適當填寫需要數據的視圖。
此外,AutofillManager 該類還包括notifyViewVisibilityChanged(View, int, boolean)可以調用的方法,以通知框架關于虛擬結構中視圖可見性的更改。非虛擬結構的方法也有重載。但是,非虛擬結構通常不要求您明確地通知框架,因為該方法已被View 該類調用 。
Android 8.1還為Autofill服務提供了更多的能力,通過添加對CustomDescription and Validator 內部的支持來定制保存UI可供性SaveInfo。
自定義描述可幫助自動填充服務澄清正在保存的內容; 例如,當屏幕包含信用卡時,它可以顯示信用卡銀行的標志,信用卡號碼的最后四位數字和到期號碼。要了解更多信息,請參閱 CustomDescription 課程。
Validator 對象用于避免在驗證條件不滿足時顯示自動填充保存UI。要了解更多信息,請參閱 Validator類及其子類 LuhnChecksumValidator和RegexValidator。
#### **通知**
Android 8.1包含對通知的以下更改:
* 應用程序現在只能每秒發出一次通知警報聲音。超過這個速度的警報聲音不會排隊并丟失。此更改不會影響通知行為的其他方面,通知郵件仍按預期發布。
* NotificationListenerService并且 在 被稱為ConditionProviderService返回的低內存Android設備上不受支持。 trueActivityManager.isLowRamDevice()
#### **EditText更新**
從API級別27開始,該EditText.getText()方法返回一個Editable; 以前它返回一個CharSequence。這種變化是向后兼容的,作為Editable實現 CharSequence。
該Editable接口提供了寶貴的附加功能。例如,因為Editable也實現了Spannable接口,所以可以將標記應用于實例中的內容EditText。
#### **程序化安全瀏覽操作**
通過使用安全瀏覽API 的實施,您的應用可以檢測何時嘗試導航到Google已經歸類為已知威脅的URL 的實例。默認情況下,會 顯示警告用戶已知威脅的插頁式廣告。該屏幕允許用戶選擇加載URL,或返回到安全的上一頁。 WebViewWebViewWebView
在Android 8.1中,您可以通過編程來定義您的應用程序如何響應已知的威脅:
* 您可以控制您的應用是否將已知威脅報告給安全瀏覽。
* 您可以讓自己的應用程序自動執行特定操作(例如回到安全狀態),每次遇到安全瀏覽會將其歸類為已知威脅的網址時。
> 注意:為了最大限度地防范已知威脅,請等到您在調用WebView對象的loadUrl()方法之前初始化安全瀏覽 。
以下代碼片段顯示了如何指示您的應用程序的實例 WebView在遇到已知威脅后總是返回到安全狀態:
AndroidManifest.xml中
~~~
<manifest>
<application>
...
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
</application>
</manifest>
~~~
**MyWebActivity.java**
~~~
private WebView mSuperSafeWebView;
private boolean mSafeBrowsingIsInitialized;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSuperSafeWebView = new WebView(this);
mSuperSafeWebView.setWebViewClient(new MyWebViewClient());
mSafeBrowsingIsInitialized = false;
mSuperSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() {
@Override
public void onReceiveValue(Boolean success) {
mSafeBrowsingIsInitialized = true;
if (!success) {
Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!");
}
}
});
}
~~~
**MyWebViewClient.java**
~~~
public class MyWebViewClient extends WebViewClient {
// Automatically go "back to safety" when attempting to load a website that
// Safe Browsing has identified as a known threat. An instance of WebView
// calls this method only after Safe Browsing is initialized, so there's no
// conditional logic needed here.
@Override
public void onSafeBrowsingHit(WebView view, WebResourceRequest request,
int threatType, SafeBrowsingResponse callback) {
// The "true" argument indicates that your app reports incidents like
// this one to Safe Browsing.
callback.backToSafety(true);
Toast.makeText(view.getContext(), "Unsafe web page blocked.",
Toast.LENGTH_LONG).show();
}
}
~~~
#### **視頻縮略圖提取器**
的MediaMetadataRetriever類有一個新的方法,getScaledFrameAtTime()即找到鄰近給定的時間位置的幀,并返回具有相同的縱橫比作為源幀的位圖,但是縮放,以符合給定寬度和高度的矩形。這對于從視頻生成縮略圖圖像很有用。
我們建議使用這種方法,而不是getFrameAtTime()浪費內存,因為它返回一個與源視頻分辨率相同的位圖。例如,來自4K視頻的幀將是16MB的位圖,遠大于縮略圖所需的位圖。
#### **共享內存API**
Android 8.1(API等級27)引入了一個新的 SharedMemory API。這個類允許你創建,映射和管理一個匿名 SharedMemory 實例。您可以將SharedMemory 對象的內存保護設置 為讀取和/或寫入,并且由于 SharedMemory 對象是Parcelable,因此可以通過AIDL輕松地將其傳遞給另一個進程。
該SharedMemory API與互操作 ASharedMemory的NDK設施。 ASharedMemory允許訪問文件描述符,然后可以將其映射到讀取和寫入。這是在應用程序之間或單個應用程序中的多個進程之間共享大量數據的好方法。
#### **WallpaperColors API**
Android 8.1(API等級27)允許您的動態壁紙為系統UI提供顏色信息。您可以通過WallpaperColors 從位圖,可繪制對象或使用三種手動選擇的顏色創建對象來實現此目的。你也可以檢索這個顏色信息。
要創建一個WallpaperColors 對象,請執行以下任一操作:
* 要WallpaperColors 使用三種顏色創建對象,請WallpaperColors 通過傳遞一級,二級和三級顏色來創建該類的實例。原色不能為空。
* 要從WallpaperColors 位圖創建對象,請fromBitmap() 通過傳遞位圖源作為參數來調用該方法。
* 要從WallpaperColors drawable 創建一個對象,請fromDrawable() 通過傳遞可繪制的源作為參數來調用該方法。
要從壁紙檢索主要,次要或第三個顏色細節,請調用以下方法:
* getPrimaryColor() 返回壁紙最具視覺代表性的顏色。
* getSecondaryColor() 返回壁紙的第二個最顯著的顏色。
* getTertiaryColor() 方法返回壁紙的第三個最顯著的顏色。
要通知系統有關您的動態壁紙的任何重大的顏色變化,請調用該notifyColorsChanged() 方法。onComputeColors()在有機會提供新WallpaperColors 對象的情況下,此方法會觸發生命周期事件。
要添加用于顏色更改的偵聽器,可以調用該addOnColorsChangedListener()方法。您也可以調用該getWallpaperColors()方法來檢索壁紙的主要顏色。
#### **指紋更新**
該FingerprintManager班先后引進了以下錯誤代碼:
* FINGERPRINT_ERROR_LOCKOUT_PERMANENT - 用戶嘗試使用指紋讀取器解鎖設備的次數過多。
* FINGERPRINT_ERROR_VENDOR - 發生特定于供應商的指紋識別器錯誤。
#### **加密更新**
Android 8.1已經進行了許多密碼修改:
* 新的算法已經在Conscrypt中實現。Conscrypt實現優先用于現有的Bouncy Castle實現。新算法包括:
* AlgorithmParameters:GCM
* KeyGenerator:AES
* KeyGenerator:DESEDE
* KeyGenerator:HMACMD5
* KeyGenerator:HMACSHA1
* KeyGenerator:HMACSHA224
* KeyGenerator:HMACSHA256
* KeyGenerator:HMACSHA384
* KeyGenerator:HMACSHA512
* SecretKeyFactory:DESEDE
* Signature:NONEWITHECDSA
* Cipher.getParameters().getParameterSpec(IvParameterSpec.class)不再適用于使用GCM的算法。相反,使用 getParameterSpec(GCMParameterSpec.class)。
* 與TLS相關的許多內部的加密類被重構。由于開發人員有時會反射地訪問這些內容,所以墊片已經被留下以支持以前的使用,但是一些細節已經改變。例如,之前的套接字是類型的OpenSSLSocketImpl,但是現在它們是類型的, ConscryptFileDescriptorSocket或者 ConscryptEngineSocket兩者都擴展 OpenSSLSocketImpl。
* SSLSessionIllegalArgumentException當傳遞一個空引用時拋出的方法被 拋出NullPointerException。
* RSA KeyFactory不再允許從字節數組中生成大于編碼密鑰的密鑰。調用 generatePrivate()并 generatePublic()提供一個 KeySpec關鍵結構不填充整個緩沖區的地方將導致一個InvalidKeySpecException。
* 當套接字讀取被關閉的套接字中斷時,Conscrypt用于從讀取中返回-1。現在閱讀拋出 SocketException。
* 根CA證書集已被更改,大部分刪除了大量的廢棄證書,同時也刪除了WoSign和StartCom的根證書。有關此決定的更多信息,請參閱Google安全博客文章, [WoSign和StartCom證書的最終刪除信任](https://security.googleblog.com/2017/07/final-removal-of-trust-in-wosign-and.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
- 培訓