Android 9 (API 級別 28) 為 Android 系統推出了多項變更。
下列行為變更僅適用於指定的應用程式
API 級別 28 以上。將 targetSdkVersion
設為 API 級別 28 或
較高的值須修改
確保應用程式能妥善支援這些行為 (如適用)。
適用於在 Android 9 上執行的所有應用程式的變更 (無論哪個 API 為何) 他們自己的目標層級、請參閱 行為變更:所有應用程式。
前景服務
如果應用程式指定 Android 9 以上版本為目標,且使用前景服務,則必須要求
FOREGROUND_SERVICE
權限。這是一般權限。
因此系統會自動將權限授予提出要求的應用程式
如果指定 Android 9 以上版本的應用程式嘗試在沒有人要求的情況下建立前景服務
請求 FOREGROUND_SERVICE
,
系統會擲回 SecurityException
。
隱私權異動
如果您的應用程式指定 Android 9 為目標版本,請務必遵循以下規定 您就會意識到必須做出的改變這些更新的裝置序列和 DNS 資訊 加強使用者隱私
淘汰版本序號
在 Android 9 中,Build.SERIAL
是
一律設為 "UNKNOWN"
,以保護隱私權。
如果應用程式需要存取裝置的硬體序號,建議您
而是要求
READ_PHONE_STATE
敬上
權限,然後呼叫
getSerial()
。
DNS 隱私權
以 Android 9 為目標的應用程式應遵循私人 DNS API。我們要用 應用程式應確保如果系統解析器正在執行 DNS-over-TLS 內建 DNS 用戶端會使用加密 DNS 和 或是停用並改用系統解析器。
架構安全變更
Android 9 內含幾項行為變更,讓 但這些變更只有在應用程式指定 API 級別時才會生效 28 以上版本。
預設啟用網路 TLS
如果您的應用程式指定 Android 9 以上版本,
isCleartextTrafficPermitted()
敬上
根據預設,方法會傳回 false
。如果您的應用程式需要啟用
特定網域,您必須將 cleartextTrafficPermitted
明確設為 true
在應用程式的網路安全性
設定。
按照程序分隔的網站式資料目錄
為了提升 Android 9 的應用程式穩定性和資料完整性,應用程式不得
共用單一的 WebView
資料
之間的目錄
多個程序。一般而言,
這類資料目錄儲存 Cookie、HTTP 快取以及其他永久性
與網路瀏覽相關的暫存空間。
在大多數情況下,應用程式應使用
android.webkit
套件,例如
以 WebView
和
CookieManager
,僅有一個
上傳資料集之後,您可以運用 AutoML
自動完成部分資料準備工作舉例來說,您將
使用 WebView
的 Activity
物件
在同一個程序中您可以更嚴格地執行「僅限一項處理程序」規則
撥號
disableWebView()
英吋
應用程式的其他程序。這項呼叫會防止 WebView
初始化
即便是來自依附元件呼叫
資源庫。
如果您的應用程式必須使用
多項程序中的 WebView
您必須為每個程序指派不重複的資料目錄後置字串,
WebView.setDataDirectorySuffix()
。
方法,接著在該程序中使用指定 WebView
的執行個體。這個方法
將每個程序的網頁資料放在應用程式資料的專屬目錄中
目錄。
個別應用程式的 SELinux 網域
以 Android 9 以上版本為目標的應用程式無法與其他使用 Android 系統的應用程式共用資料 全球可存取的 Unix 權限。這項變更能提高 Android 應用程式沙箱, 尤其是針對應用程式本身 可存取私人資料 僅由該應用程式使用
如要與其他應用程式分享檔案,請使用內容 供應商。
連線能力變更
連線資料計數和多路徑
在指定 Android 9 以上版本的應用程式中,系統會計算這些數據
網路流量
這不是目前的預設設定,例如裝置開機時的儲存格流量
Wi-Fi),同時在
NetworkStatsManager
敬上
類別,針對該流量查詢。
我們要用
getMultipathPreference()
敬上
現在會根據上述網路流量傳回值。開頭為
Android 9 時,這個方法會針對儲存格資料傳回 true
,但會在超過一定數量的
一天內累積的流量,就會從 false
開始傳回。執行平台的應用程式
Android 9 必須呼叫該方法並遵循這項提示。
ConnectivityManager.NetworkCallback
類別現在會將 VPN 相關資訊傳送至應用程式。這項異動讓開發人員
可讓應用程式監聽連線事件,而不必混合使用同步和
非同步呼叫及使用受限制的 API此外,
資訊轉移在裝置連接至多部裝置時,可正常運作
Wi-Fi 網路或多個行動網路。
淘汰 Apache HTTP 用戶端
搭載 Android 6.0 我們不再支援 Apache HTTP 用戶端。 自 Android 9 起,該程式庫會從 bootclasspath,且預設為應用程式無法使用。
如要繼續使用 Apache HTTP 用戶端,指定 Android 9 以上版本的應用程式
可以將下列內容新增到對方的 AndroidManifest.xml
:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
除了使用執行階段 Apache 程式庫之外,應用程式也可以將
在 APK 中取得 org.apache.http
程式庫的版本。如果這麼做
您必須重新封裝程式庫 (使用以下公用程式
Jar Jar),避免發生類別相容性問題
執行階段所提供的類別
使用者介面變更
查看重點
無法聚焦的檢視畫面為 0 (寬度或高度為 0) 的檢視畫面。
此外,活動不會再間接指派初始焦點 觸控模式。相反地,如果您
CSS RGBA 十六進位值處理
指定 Android 9 以上版本的應用程式必須啟用草稿 CSS 顏色模組層級 4 處理 4 位數和 8 十六進位數字 CSS 顏色的行為。
CSS 顏色模組層級 4 「瀏覽器」自 52 版開始支援 WebView 目前停用此功能 因為我們發現現有的 Android 應用程式含有 32 位元的十六進位顏色 一般而言,會導致轉譯錯誤。
舉例來說,顏色 #80ff8080
目前算繪於
WebView 不透明
淺紅色 (#ff8080
) 適用於目標 API 級別 27 以下的應用程式。領先
元件 (Android 會解讀為 Alpha 元件)
目前遭到忽略。如果應用程式指定的 API 級別為 28 以上,#80ff8080
就會是
會解讀為 50% 透明淺綠色 (#80ff80
)。
檔案的 MIME 類型擷取功能:URI
Android 9 以下版本的 Android 可能會從檔案推論 MIME 類型
內容。從 Android 9 (API 級別 28) 開始,應用程式必須使用
正確的副檔名,file:
WebView。
使用檔案內容來推斷 MIME 類型可能會是安全性錯誤的原因之一。 而新式瀏覽器通常不允許此做法。
如果檔案具有可辨識的副檔名 (例如 .html
),
.txt
、.js
或 .css
MIME 類型將由副檔名決定。
如果檔案沒有副檔名或無法辨識的副檔名,系統會採用一般的 MIME 類型。
文字。
例如,file:///sdcard/test.html
之類的 URI 會算繪為
但 file:///sdcard/test
等 URI 會呈現純文字
(即使檔案包含 HTML 資料)
文件捲動元素
Android 9 會妥善處理文件根層級案件 元素是捲動元素 在較舊版本的 body 元素上設定捲動位置 根元素的捲動值為零Android 9 可讓您 符合標準模式的行為,其中捲動元素「是」根元素 元素。
此外,直接存取 document.body.scrollTop
、document.body.scrollLeft
、
document.documentElement.scrollTop
或document.documentElement.scrollLeft
行為會因目標 SDK 而異如要存取可視區域,捲動畫面
值,請使用 document.scrollingElement
(如果有的話)。
已暫停應用程式的通知
在 Android 9 以下版本,系統會取消已暫停應用程式的通知。 從 Android 9 開始,系統會隱藏已暫停應用程式的通知,直到 應用程式就會恢復運作