應用targetSdkVersion升級指導(一)

電信終端產業協會(TAF)發佈的《移動應用軟件高 API 等級預置與分發自律公約》要求,截止到2019年5月1日全部新發布的應用 API 必須爲26或更高,2019年8月1日現有應用 API 必須升級爲26或更高。android

本文由華爲專家季昀對Android8.0系統、Android9.0系統在targetSdkVersion方面的變動進行介紹。咱們將於下週四(12月27日)推出targetSdkVersion升級指導系列(二),敬請關注。web

*應用 targetSdkVersion 升級流程shell

 

image

 

測試機準備apache

1.使用最新支持 Android 9.0 的手機測試:全部 EMUI 9.0 華爲手機網絡

2.Pixel刷機:developers.google.com/android/ima…app

3.使用綠盟遠程真機:deveco.huawei.com/ide

4.使用模擬器函數

targetSdkVersion 相關變動介紹

Android8.0 變動工具

1.後臺服務限制測試

①哪些應用會受到後臺服務限制?

• TargetSDK>=26的應用

• TargetSDK<26且被用戶主動設置爲限制後臺活動的應用(華爲EMUI8.x未提供配置)

注意:Doze 白名單中的應用不受限制(用戶能夠設置,手機管家配置有默認值白名單)

②前臺如何定義?

• 前臺有可見 Activity

• 前臺服務能夠後臺播放

• 綁定服務的狀況

③後臺服務限制,限制了哪些行爲?

• 應用進入 uidldle 後,會被調用 Service.stopself()

• 應用進入 uidldle 後,不容許經過 startService啓動服務

• 應用進程仍然存在,JobScheduler、Alarm、廣播等均能觸發

•廣播接收線程處理短暫業務,沒法拉起後臺服務

• 非安卓組件線程 CPU 超標時,谷歌原生機制會強制kill進程

④臨時白名單機制

系統調用應用時,少許場景會將應用添加到臨時白名單(有效時間30秒~300秒):

• 處理高優先級 FCM 消息

• 接收短信彩信

• 用戶點擊通知欄,執行 PendingIntent

⑤用戶設置限制後臺活動以後的影響(Android P優化)

• 應用退後臺,1分鐘就會被中止 Service(包括正在執行的前臺任務)

• 限制訪問網絡

• 限制 Alarm 觸發

• 限制 JobScheduler 執行

2.廣播限制

Android 8.0 的應用沒法繼續在其清單中爲隱式廣播註冊廣播接收器,但也存在例外狀況:

• 應用能夠繼續在清單中註冊顯式廣播

• 應用能夠在運行時使用 Context.registerReceiver() 爲任意廣播(無論是隱式仍是顯式)注 冊接收器

• 須要簽名權限的廣播不受此限制所限,由於這些廣播只會發送到使用相同證書籤名的應用 ,而不會發送至設備上的全部應用

•白名單豁免隱式廣播的列表:developer.android.com/guide/compo…

後臺執行限制的適配建議

• 使用 JobScheduler 代替

• 增長前臺服務

•加 Doze 白名單(不推薦)

3.最大屏幕縱橫比

以 Android 7.1(API 級別 25)或更低版本爲目標平臺中應用默認的最大屏幕縱橫比爲1.86。針對 Android 8.0 或更高版本的應用沒有默認的最大縱橫比,如需設置請在應用 androidmanifest 文件定義 maxAspectRatio 屬性(注意:若是應用沒有顯示申明不支持 resizeableActivity,系統將會忽略應用設置的 maxAspectRatio屬性)

 

image

 

4.其餘變動

 

image

 

Android9.0 變動

1.非 SDK 管控

 

image

 

使用谷歌提供的非 SDK 掃描工具查看應用使用的深灰名單和黑名單非 SDK 接口: android.googlesource.com/platform/pr… master/appcompat/

2. Apache HTTP 客戶端棄用

默認狀況下該內容庫已從 bootclasspath 中移除且不可用於應用,應用不能使用系統的 classloader 加載 org.apache.http.* 庫,不然會拋 NoClassDefFoundError。

適配建議

• 方法一:若是要繼續使用 Apache HTTP 客戶端,以 Android 9.0及更高版本爲目標的應用能夠向其 AndroidManifest.xml 添加如下內容:

• 方法二:若是必需要繼續使用 Apache HTTP 客戶端,開發者能夠將 org.apache.http.legacy庫打包進本身的apk。

• 推薦方法:使用 HttpURLConnection 類替代 apache-http

3.內聯方法不容許跨dex

Google 在 Android P 新增檢測:若是調用某個 inline 方法的類與 inline 方法所在的類由不一樣的 classloader 加載,就會主動發起 abort(inline不容許跨dex文件)致使應用 crash。

 

image

 

兼容性影響

對使用插件和熱修復的應用有很大影響,須要重點測試。

測試方法

• 啓動應用,構造熱修復場景,在 app 側觸發熱修復

• adb shell cmd package compile -m speed -f my-package 應用包名 (inline編譯)

• 重啓應用,檢查是否會出現閃退問題

適配建議

• 儘可能避免使用不一樣的 classloader 加載相關的類。

• 若是必定要這樣作的話,須要避免內聯,好比在函數裏面加 try catch, 這樣 compiler就不會將這個函數 inline。

4.其餘變動

 

image

 

其餘的變動和非 TargetSdkVersion 相關的變動以及新特性,能夠在谷歌開發者網站查閱:

developer.android.google.cn/distribute/…

developer.android.google.cn/about/versi…

相關文章
相關標籤/搜索