和先前版本一樣,Android 17 也包含可能會影響應用程式的行為變更。以下行為變更僅適用於指定 Android 17 以上版本的應用程式。如果您的應用程式指定 Android 17 以上版本,建議您視情況修改應用程式,以支援這些行為。
此外,無論應用程式的 targetSdkVersion 為何,請務必查看對所有 Android 17 應用程式有影響的行為變更清單。
核心功能
Android 17 包含下列異動項目,這類變更會修改或擴充 Android 系統的各種核心功能。
MessageQueue 的新無鎖實作
自 Android 17 起,指定 Android 17 以上版本的應用程式會收到 android.os.MessageQueue 的新實作方式,不會發生鎖定情形。新實作方式可提升效能並減少遺失的影格,但可能會中斷反映 MessageQueue 私有欄位和方法的用戶端。
如需更多資訊 (包括緩解策略),請參閱「MessageQueue 行為異動指南」。
靜態最終欄位現在無法修改
如果應用程式在 Android 17 以上版本上執行,且指定 Android 17 以上版本,則無法變更 static final 欄位。如果應用程式嘗試使用反射功能變更 static final 欄位,就會導致 IllegalAccessException。如果嘗試透過 JNI API (例如 SetStaticLongField()) 修改其中一個欄位,應用程式就會當機。
無障礙設定
Android 17 進行下列變更,提升無障礙功能。
支援複雜 IME 實體鍵盤輸入的無障礙功能
這項功能導入了新的 AccessibilityEvent 和 TextAttribute API,可提升中文、日文、韓文和越南文輸入的螢幕閱讀器語音回饋。CJKV 輸入法應用程式現在可以指出在文字撰寫期間是否已選取文字轉換候選字。含有編輯欄位的應用程式可以在傳送文字變更無障礙功能事件時,指定文字變更類型。舉例來說,應用程式可以指定文字在文字撰寫期間發生變更,或是文字變更是由提交作業所致。這樣一來,螢幕閱讀器等無障礙服務就能根據文字修改的性質,提供更精確的回饋。
應用程式採用數
輸入法編輯器應用程式:在編輯欄位中設定撰寫文字時,輸入法編輯器可以使用
TextAttribute.Builder.setTextSuggestionSelected()指出是否已選取特定轉換候選字。可編輯欄位的應用程式:維護自訂
InputConnection的應用程式可以呼叫TextAttribute.isTextSuggestionSelected()擷取候選人選取資料。這些應用程式應在分派TYPE_VIEW_TEXT_CHANGED事件時呼叫AccessibilityEvent.setTextChangeTypes()。如果應用程式適用於 Android 17,且使用標準TextView,這項功能就會預設為啟用。(也就是說,TextView會處理從 IME 擷取資料,以及在將事件傳送至無障礙服務時設定文字變更類型)。無障礙服務:處理
TYPE_VIEW_TEXT_CHANGED事件的無障礙服務可以呼叫AccessibilityEvent.getTextChangeTypes(),判斷修改性質並相應調整意見回饋策略。
隱私權
Android 17 包含下列異動項目,可提升使用者隱私權。
以 Android 17 為目標的應用程式必須取得區域網路權限
| 是否可供測試?(必要版本) | 是(Android 17 以上版本) |
|---|---|
是否需要變更 targetSDKVersion?(API 級別) |
是 (API 級別 "CINNAMON_BUN")如要進一步瞭解這個值,請參閱資訊清單屬性說明文件。 |
Android 17 導入 ACCESS_LOCAL_NETWORK 執行階段權限,可防止使用者在未經授權的情況下存取本機網路。由於這項權限屬於現有的NEARBY_DEVICES權限群組,因此如果使用者已授予其他NEARBY_DEVICES權限,系統就不會再次提示。這項新規定可防止惡意應用程式利用不受限制的區域網路存取權,暗中追蹤使用者及建立指紋。只要宣告並要求這項權限,應用程式就能探索區域網路 (LAN) 上的裝置並與之連線,例如智慧住宅裝置或投放接收器。
以 Android 17 以上版本為目標的應用程式,現在有兩種方式可與區域網路裝置保持通訊:採用系統中介的隱私權保護裝置挑選器,略過權限提示,或在執行階段明確要求這項新權限,以維持區域網路通訊。
詳情請參閱「區域網路權限」說明文件。
安全性
Android 17 在裝置和應用程式安全性方面有以下改進。
活動安全性
Android 17 平台持續朝「預設安全」架構邁進,推出一系列強化功能,旨在防範網路釣魚、互動劫持和混淆副手攻擊等高嚴重性攻擊。這項更新要求開發人員明確選擇採用新的安全標準,以維持應用程式相容性並保護使用者。
對開發人員的主要影響包括:
- 強化 BAL 並改善啟用程序:我們將擴大保護範圍至
IntentSender,進一步完善背景活動啟動 (BAL) 限制。開發人員必須從舊版MODE_BACKGROUND_ACTIVITY_START_ALLOWED常數遷移。您應改為採用細微控制項,例如MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE,將活動啟動限制在呼叫應用程式可見的情況,大幅減少攻擊面。 - 採用工具:開發人員應使用嚴格模式和更新的 Lint 檢查,找出舊版模式,確保符合日後目標 SDK 規定。
預設啟用 CT
如果應用程式指定 Android 17 以上版本,系統預設會啟用憑證透明度 (CT)。(在 Android 16 上,CT 可供使用,但應用程式必須選擇加入)。
更安全的 Native DCL - C
如果您的應用程式指定 Android 17 以上版本,Android 14 針對 DEX 和 JAR 檔案導入的「更安全的動態程式碼載入 (DCL)」保護機制,現在也適用於原生程式庫。
使用 System.load() 載入的所有原生檔案都必須標示為唯讀。否則系統會擲回 UnsatisfiedLinkError。
我們建議應用程式盡量避免使用動態載入程式碼,否則應用程式很可能會因為程式碼插入或竄改程式碼而無法正常運作。
裝置板型規格
Android 17 包含下列異動項目,可改善各種尺寸和板型規格裝置的使用者體驗。
平台 API 異動,可忽略大螢幕 (sw>=600dp) 的螢幕方向、大小調整和長寬比限制
我們在 Android 16 中導入了平台 API 變更,針對指定 API 級別 36 以上版本的應用程式,忽略大螢幕 (sw >= 600dp) 的螢幕方向、顯示比例和大小調整限制。開發人員可使用 SDK 36 選擇避開這些變更,但如果應用程式的目標版本是 Android 17 以上,則無法再避開。
詳情請參閱「系統會忽略方向和大小調整限制」。