他們都沒告訴你適配 Android N 需要注意什麼

solution發表於2021-09-09

Android N 這次的新特性包括多視窗的支援、通知欄支援直接回復訊息、對部分廣播的後臺限制、網路資料節省開關等,並不多,也有很多翻譯文章已經介紹。

這裡主要分享對 Android N 的適配大家可能要注意什麼。

文末雜談帶阿里騰訊保障員工買房相關的福利介紹。

還記得 6.0 對 Apache Http 庫的廢除導致的應用崩潰嗎?

還記得 6.0 中 MAC id 始終返回為空導致的唯一 id 混合生成演算法大幅失效嗎?

1. Android 中 Java 的實現向 OpenJDK 8 遷移

Android 是站在 Linux 和 Java 肩膀上快速成長的,在執行時依賴 Oracle JDK,早在 2010 年甲骨文就起訴谷歌侵權 Java。在 N 中 Google 採用 OpenJDK 8 作為 Java 的實現,在 Java 實現上的一些差別可能導致應用出問題。如:

(1) ArrayList 實現中的私有屬性 array 被移除

反射使用該屬性的需要注意下。

(2) 隨機數種子呼叫可能出錯

Crypto 安全提供商在 OpenJDK 中不提供,而它在大家呼叫 SecureRandom.setSeed() 設定隨機種子時會用到,OpenJDK 中需要透過 SecretKeySpec 去直接載入原始金鑰或者使用真正的金鑰匯出函式。

有了解 OpenJDK 8 與 Oracle JDK 更多實現差別的歡迎留言。

PS:

(1) 記得 2014 年 InfoQ 大會上 Oracle 的人介紹 Java 8 的特性,當時還在想 Android 現在依賴 JDK6.0 什麼時候才能到 8,現在終於等到了這一天,可惜不是你..

(2) Kotlin 還有機會嗎?

2. JNI 中不允許呼叫非公有 API

JNI 中不允許呼叫非公有 API,由於名稱空間的變化,在 Android N 上執行會崩潰,需要切換到對應公有 API。

3. “老人機的適配”

Android N 允許使用者設定顯示密度,有點像老人機模式。需要測試 App 在 sw320dp 密度下顯示是否正常,及配置變更後應用是否會有異常。

4. 後臺最佳化——三個廣播被禁止監聽或傳送

(1) CONNECTIVITY_CHANGE 廣播

對 targetVersion 設定為 Android N 的 App,在後臺時不再能接收到 CONNECTIVITY_CHANGE 廣播,前臺不影響。

(2) ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO 廣播

所有執行在 Android N 上的 App 不能傳送或是接收新增圖片(ACTION_NEW_PICTURE)和新增影片(ACTION_NEW_VIDEO) 的廣播。

5. 許可權改動

(1) GET_ACCOUNTS 許可權被廢棄

對 targetVersion 設定為 Android N 的 App,GET_ACCOUNTS 許可權被廢棄。

(2) 增加 ACTION_OPEN_EXTERNAL_DIRECTORY 許可權

這個感覺就是對部儲存裝置寫許可權的保護,需要使用者同意,說不定以後就慢慢廢棄 WRITE_EXTERNAL_STORAGE 許可權了。

6. 更嚴格的 Doze 模式

大家知道在 Android 6.0 中,在手機關屏且靜止時,Doze 模式透過推遲 CPU 和網路操作延長底池壽命。而 Android N 則在手機關屏時就會一定程度限制 CPU 和網路操作,進入 Doze 模式一段時間後進一步限制 WakeLock、Alarm、GPS 和 Wi-Fi 掃描等,做好迎接休眠狀態下更多功能受限導致的 bug 吧,哈哈。

7. 自帶 ICU4J 庫的子集

更方便 App 的全球化

原文連結:http://www.apkbus.com/blog-705730-60145.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2816186/,如需轉載,請註明出處,否則將追究法律責任。

相關文章