
前言
Android 14 預覽版計劃從2023年2月開始啟動,正式版會在9-10月份發(fā)布。

一、應用行為變更
1.進程只能殺死自己的后臺進程
說明:從Android 14開始,當應用調用 killBackgroundProcesses() 時,該API只能殺死應用自己的后臺進程。如果傳入其他應用的包名,該方法對其他應用的后臺進程沒有影響。
應用不應使用 killBackgroundProcesses() 或以其他方式嘗試影響其他應用的進程生命周期。如果應用不必要地殺死其他應用,會降低系統(tǒng)性能并增加電池消耗,因為稍后需要完全重啟這些應用,這比恢復現有的緩存應用占用的資源要多得多。
2.默認情況下拒絕使用精準鬧鐘

說明:Android 12中引入的精準鬧鐘權限SCHEDULE_EXACT_ALARM,不再預先授予大多數針對Android 13及更高版本的新安裝應用,將默認設置為拒絕。如果用戶通過備份還原操作將應用數據傳輸到Android14的設備上,權限仍然會被拒絕。如果現有的應用已經擁有此權限,它將在設備升級到Android 14 時預先授予。
始終允許以下類型的應用程序調用 setExact() 或 setExactAndAllowWhileIdle() 方法:
- 使用平臺證書簽名的應用程序;
- 特權應用程序;
- 電源許可名單上的應用程序(如果應用符合要求,可以使用intent操作+ 請求ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
影響范圍:- targetSdkVersion為33或更高版本的應用;
- 在 manifest中聲明SCHEDULE_EXACT_ALARM權限;
- 不屬于豁免或者授權前擁有權限;
- 不是日歷或者鬧鐘應用。
3.前臺服務類型是必填項
說明:Android 14 為目標平臺,則必須指定適當的前臺服務類型。與以前的 Android 版本一樣,可組合使用多個類型。
下面列出了可供選擇的前臺服務類型:
| Foreground service type declared | Permission that must be declared |
|---|---|
| camera | FOREGROUND_SERVICE_CAMERA |
| connectedDevice | FOREGROUND_SERVICE_CONNECTED_DEVICES |
| dataSync | FOREGROUND_SERVICE_DATA_SYNC |
| health(Android 14 support) | FOREGROUND_SERVICE_HEALTH |
| location | FOREGROUND_SERVICE_LOCATION |
| mediaPlayback | FOREGROUND_SERVICE_MEDIA_PLAYBACK |
| mediaProjection | FOREGROUND_SERVICE_MEDIA_PROJECTION |
| microphone | FOREGROUND_SERVICE_MICROPHONE |
| phoneCall | FOREGROUND_SERVICE_PHONE_CALL |
| remoteMessaging(Android 14 support) | FOREGROUND_SERVICE_REMOTE_MESSAGING |
| shortService(Android 14 support) | No additional permission requirements |
| specialUse(Android 14 support) | FOREGROUND_SERVICE_SPECIAL_USE |
| systemExempted(Android 14 support) | FOREGROUND_SERVICE_SYSTEM_EXEMPTED |
// 示例
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
如果應用中的用例與這些類型均不相關,強烈建議您遷移邏輯以使用 WorkManager 或用戶發(fā)起的數據傳輸作業(yè)。
4.將前臺服務遷移到用戶啟動的數據傳輸作業(yè)類型中
說明:由于Android 14對應用使用前臺服務應用了嚴格的規(guī)則,所以在Android 14中,我們引入了一種新的API,用于指定作業(yè)是由用戶啟動的數據傳輸作業(yè)。該API 有助于需要持續(xù)時間更長、用戶啟動的數據傳輸的用例,例如從遠程服務器下載文件。
用戶啟動的數據傳輸作業(yè)由用戶啟動。這些作業(yè)需要通知,立即啟動,并且可能會在系統(tǒng)條件允許的情況下運行更長的時間。
用戶啟動的數據傳輸作業(yè)需要新的運行權限: RUN_USER_INITIATED_JOBS。系統(tǒng)將會自動授予此權限。如果未在應用manifest中聲明權限,系統(tǒng)將拋出SecurityException。
影響范圍:targetSdkVersion為34的應用。
5.語法性別
Android 14 推出了針對語法性別的 API:GrammaticalInflectionManager,其提供了針對單個 App 獲取、設置性別偏好的入口。
getApplicationGrammaticalGender() :獲取語法性別偏好,返回的是 Configuration 類中的 int 常量,有這么幾種類型:
- GRAMMATICAL_GENDER_NOT_SPECIFIED, 0:尚未指定性別偏好,將用默認的資源文本
- GRAMMATICAL_GENDER_NEUTRAL, 1:指定中性、客觀的資源文本
- GRAMMATICAL_GENDER_FEMININE, 2:指定針對女性的資源文本
- GRAMMATICAL_GENDER_MASCULINE, 3:指定針對男性的資源文本
setRequestedApplicationGrammaticalGender() :相對應的將上述常量類型動態(tài)設置到性別偏好。
這樣可以針對不同的性別,加載不同的資源目錄:
- 女性 —— res/values-fr-feminine
- 男性 —— res/values-fr-masculine
- 中性 —— res/values-fr
二、用戶體驗
1.授予對照片和視頻的部分訪問權限
新增權限:READ_MEDIA_VISUAL_USER_SELECTED
說明: 在Android14上與應用交互的用戶現在可以授予對其媒體庫的部分訪問權限(READ_MEDIA_IMAGES和READ_MEDIA_VIDEO)。
新對話框包含以下選項:
- 選擇照片和視頻: Android14中的新功能。用戶選擇想要提供給應用的特定照片和視頻;
- 全部允許:用戶授予對設備上所有照片和視頻的完整庫訪問權限;
- 不允許:用戶拒絕所有訪問。
如果用戶選擇了“選擇照片和視頻”并且應用稍后再次請求READ_MEDIA_IMAGES 或者 READ_MEDIA_VIDEO權限,系統(tǒng)會顯示不同的對話框,讓用戶有機會授予完全訪問的權限,維持現狀,或者授予對其他照片和視頻的訪問權限。為了幫助應用支持新的變化,系統(tǒng)引入了一個新的權限READ_MEDIA_VISUAL_USER_SELECTED。
如果應用不聲明READ_MEDIA_VISUAL_USER_SELECTED權限,則會發(fā)生以下行為:
- 在用戶與應用會話期間,將會授予對用戶選擇的照片和視頻的READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 臨時訪問權限。當應用移到后臺或者當用戶主動殺死應用時,系統(tǒng)最終會拒絕這些權限。此行為就像其他一次性權限一樣;
如果應用稍后需要訪問其他照片和視頻,必須手動請求權限重新獲得權限。
2.改變不可關閉通知的方式
說明:對于應用向用戶顯示不可關閉的前臺通知,從Android14開始允許用戶關閉此類通知。
這項變更適用于通過 Notification.Builder#setOngoing(true) 或 NotificationCompat.Builder#setOngoing(true) 設置 Notification.FLAG_ONGOING_EVENT 來阻止用戶關閉前臺通知的應用。FLAG_ONGOING_EVENT 的行為已發(fā)生變化,使用戶實際上能夠關閉此類通知。
在以下情況下,此類通知仍不可關閉:
- 當手機處于鎖定狀態(tài)時
- 如果用戶選擇全部清除通知操作(有助于防止意外關閉)
此外,這一新行為不適用于以下用例中的不可關閉通知:
- 使用 MediaStyle 創(chuàng)建的通知
- 安全和隱私用例的政策限制使用
- 企業(yè)設備政策控制器 (DPC) 和支持軟件包
3.非線性字體放大至 200%

說明:從Android14開始,系統(tǒng)支持高達200%的字體縮放,為弱視用戶提供了符合網絡內容無障礙指南 (WCAG) 的其他無障礙功能選項。
4.區(qū)域偏好
說明:區(qū)域偏好使用戶能夠自定義溫度單位、一周的第一天、數字系統(tǒng)。新 Android設置菜單為用戶提供了一個集中位置來更改應用程序區(qū)域偏好,應用可通過API例如getTemperatureUnit和getFirstDayOfWeek獲取用戶設置,以便調整應用內顯示信息的方式。
5.數據安全信息更顯眼
說明:為了加強用戶隱私保護,Android 14 增加了系統(tǒng)顯示您在 Play 管理中心表單中聲明的信息的位置數量。目前,用戶可以在 Google Play 中的應用詳情的數據安全部分查看此信息。
6.安全的全屏 intent 通知
說明: 在 Android 11(API 級別 30)中,任何應用都可以在手機處于鎖定狀態(tài)時使用 Notification.Builder.setFullScreenIntent 發(fā)送全屏 intent。您可以通過在 AndroidManifest 中聲明 USE_FULL_SCREEN_INTENT 權限,在應用安裝時自動授予此權限。
全屏 intent 通知適用于需要用戶立即注意的極高優(yōu)先級通知,例如用戶來電或用戶配置的鬧鐘設置。從 Android 14 開始,獲準使用此權限的應用僅限于提供通話和鬧鐘的應用。對于不適合此情況的任何應用,Google Play 商店會撤消其默認的 USE_FULL_SCREEN_INTENT 權限。
在用戶更新到 Android 14 之前,在手機上安裝的應用仍擁有此權限。用戶可以開啟和關閉此權限。
您可以使用新 API NotificationManager.canUseFullScreenIntent 檢查應用是否具有該權限;如果沒有,應用可以使用新 intent ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT 啟動設置頁面,在該頁面中,用戶可以授予權限。
三、圖形
1.Path可查詢和可插值
說明:Android的Path API是一種用于創(chuàng)建和渲染矢量圖形的強大而靈活的機制,具有描邊或填充路徑、從線段或二次或三次曲線構建路徑、執(zhí)行布爾運算以獲得更復雜的形狀。但是對象的內部在創(chuàng)建后對調用者是不透明的。
可以調用moveTo()、lineTo()和cubicTo() 添加路徑段等方法創(chuàng)建Path,但是沒有辦法詢問該路徑的段是什么,因此必須在創(chuàng)建時保留該信息。從 Android 14 開始,可以查詢路徑里面有些什么,同時支持路徑內部插值返回新路徑。
四、安全
1.限制隱式intent
說明: Android 通過以下方式限制應用向內部應用組件發(fā)送隱式intent:
- 隱式intent僅傳遞給exported的組件。應用程序必須使用明確的intent傳遞給unexported的組件,或者將組件標記為exported。
- 如果應用創(chuàng)建一個pending intent,但intent未指定組件或包,系統(tǒng)現在會拋出異常。
這些更改可防止惡意應用攔截用在供應用內部組件使用的隱式intent。
2.更安全的動態(tài)代碼加載
說明: 如果應用使用動態(tài)代碼加載 (DCL),則所有動態(tài)加載的文件都必須標記為只讀,否則系統(tǒng)會拋出異常。建議應用盡可能避免動態(tài)加載代碼,因為這樣做會大大增加應用程序因代碼注入或代碼篡改而受到危害的風險。
為防止現有動態(tài)加載文件拋出異常,建議嘗試在應用中再次動態(tài)加載文件之前刪除并重新創(chuàng)建這些文件。重新創(chuàng)建文件時,請按照前面的指導在寫入時將文件標記為只讀?;蛘邔F有文件重新標記為只讀,但在這種情況下,強烈建議首先驗證文件的完整性(例如,通過根據可信值檢查文件的簽名),來保護你的app避免被惡意篡改。
3.Zip路徑遍歷
說明:對于以 Android 14 為目標平臺的應用,Android 會通過以下方式防止 Zip 路徑遍歷漏洞:如果 Zip 文件條目名稱包含“..”或以“/”開頭,ZipFile(String) 和 ZipInputStream.getNextEntry() 會拋出 ZipException。
應用可以通過調用 dalvik.system.ZipPathValidator.clearCallback() 選擇停用此驗證。
4.額外的后臺啟動activity限制
說明:系統(tǒng)進一步限制了應用在后臺啟動 Activity 的時機:
- 當應用發(fā)送PendingIntent使用PendingIntent.send()或類似方法時,如果應用想要授予自己的后臺activity啟動權限以啟動intent,則該應用現在必須調用 setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED) 來明確的表達意圖。
- 當一個可見應用使用bindService()方法綁定另一個在后臺運行的應用的服務時 ,如果該可見應用想要將其自己的后臺活動啟動權限授予綁定服務,則它現在必須添加 BIND_ALLOW_ACTIVITY_STARTS 標志。
通過這樣的限制可以防止惡意應用程序濫用API從后臺啟動破壞性activity以便保護用戶。
5.廣播接收器必須指定導出行為
說明: 以 Android 14 為目標平臺并使用 上下文注冊 的接收器的應用和服務指定以下標志,以指定接收器是否應導出到設備上的所有其他應用:RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED。此要求有助于使用Android 13 中引入的這些接收器的功能,來保護應用主板安全漏洞的影響。
五、可升級Android 14的機子
以下只列出部份品牌:
| 品牌 | 型號 |
|---|---|
| 谷歌 | Pixel 4a (5G)、Pixel 5、Pixel 5a、Pixel 6、Pixel 6 Pro、Pixel 6a、Pixel 7、Pixel 7 Pro、Pixel 7a、Pixel Tablet、Pixel Fold |
| 小米 | 小米13Pro、小米13、小米12T |
| OPPO | Find N2 Flip、realme GT 2 Pro |
| vivo | X90 Pro、iQOO 11 |
| 一加 | OnePlus 11 |