互聯(lián)網(wǎng)客戶端基于Android O(API等級(jí)26)需解決問題

背景:之前的項(xiàng)目targetSDK的版本是23坦辟,今年所有應(yīng)用需要按照《移動(dòng)應(yīng)用軟件高API等級(jí)預(yù)置與分發(fā)自律公約》的約定树姨,應(yīng)用應(yīng)基于Android O開發(fā)茧痒,否則無法通過應(yīng)用商店的上架雇庙。所以我們的targetSDK版本需要升級(jí)到26鱼鼓,下面是公司的架構(gòu)師總結(jié)的升級(jí)sdk26需要注意的問題哪怔,以及從哪些方面去解決宣蔚,分享給大家參考。

目前大部分互聯(lián)網(wǎng)客戶端基于Android M(API等級(jí)23)開發(fā)
達(dá)到基于API等級(jí)26的目標(biāo)需要包括下列所有適配內(nèi)容:
Android M/23 -> Android N/24 -> Android N/25 -> Android O/26
適配內(nèi)容僅包括 “必須” 適配的部分认境,不包括 “可選” 內(nèi)容胚委。“必須”即如果不完成適配叉信,應(yīng)用可能無法按預(yù)期工作亩冬,或短期內(nèi)可能無法按預(yù)期工作; “可選” 例如采用操作系統(tǒng)新增功能改進(jìn)用戶體驗(yàn)硼身,或改尚未廢棄的老接口為新接口 硅急。

適配方法:
  • 調(diào)查Android版本間比較顯著的行為變化,即確認(rèn)之前的框架或機(jī)制能否繼續(xù)按預(yù)期工作佳遂,不能工作的尋找替代方案
  • 切換編譯環(huán)境及目標(biāo)API版本营袜,修復(fù)因API接口變化導(dǎo)致的編譯錯(cuò)誤
  • 尋找廢棄接口,換用替代方案
  • 處理好老版本兼容性
  • 對(duì)應(yīng)用進(jìn)行全功能測(cè)試丑罪,排查遺漏的問題并修復(fù)
可能存在問題需要排查的點(diǎn):
  1. 應(yīng)用自啟動(dòng)限制
  • 23 -> 24/25
    應(yīng)用未運(yùn)行時(shí)無法收到網(wǎng)絡(luò)變化通知CONNECTIVITY_ACTION荚板;
    應(yīng)用不再能發(fā)送、接收ACTION_NEW_PICTURE和ACTION_NEW_VIDEO巍糯;
    建議采用更加可靠的方式registerNetworkCallback()來監(jiān)聽網(wǎng)絡(luò)改變
  • 25 -> 26
    應(yīng)用不再能夠靜態(tài)注冊(cè)接收隱式廣播(例如ACTION_PACKAGE_REPLACED)啸驯,但仍可以靜態(tài)注冊(cè)接收顯式廣播;
    應(yīng)用可以動(dòng)態(tài)注冊(cè)接收任意廣播祟峦,無論顯式或隱式罚斗;
    需要簽名級(jí)權(quán)限的廣播可以繼續(xù)采用靜態(tài)注冊(cè)接收;
    存在一些例外: ACTION_BOOT_COMPLETED宅楞、 ACTION_LOCALE_CHANGED针姿、 ACTION_MEDIA_MOUNTED等可以繼續(xù)靜態(tài)注冊(cè)接收
  1. 后臺(tái)應(yīng)用運(yùn)行時(shí)間限制
  • 23 -> 24/25:Doze
    Android 6.0引入Doze,在手機(jī)熄屏厌衙、未充電距淫、靜置不動(dòng)時(shí)進(jìn)入偶爾短暫?jiǎn)拘训男菝吣J剑珹ndroid 7.0不再要求靜置不動(dòng)婶希;
    在手機(jī)休眠期間榕暇,系統(tǒng)對(duì)應(yīng)用的網(wǎng)絡(luò)、CPU、GPS彤枢、WiFI等資源和活動(dòng)性進(jìn)行限制
  • 25 -> 26:后臺(tái)服務(wù)限制
    應(yīng)用剛進(jìn)入后臺(tái)時(shí)狰晚,有幾分鐘的窗口時(shí)間內(nèi)可以使用后臺(tái)服務(wù),過了窗口期缴啡,服務(wù)將被強(qiáng)行停止壁晒,且不允許啟動(dòng)后臺(tái)服務(wù)(拒絕執(zhí)行啟動(dòng),并拋出異常)业栅;
    使用Context.startForegroundService()啟動(dòng)前臺(tái)服務(wù)時(shí)秒咐,必須在規(guī)定時(shí)間內(nèi)調(diào)用startForeground();
    當(dāng)應(yīng)用執(zhí)行接收SMS/MMS碘裕、執(zhí)行來自通知欄的PendingIntent等用戶可見任務(wù)時(shí)携取,將有幾分鐘的時(shí)間允許使用后臺(tái)服務(wù)
  1. 后臺(tái)能力限制
  • 25 -> 26:定位限制
    后臺(tái)應(yīng)用每小時(shí)只能收到幾次位置更新;
    電子圍欄事件每?jī)扇昼娛盏揭淮危?br> 無法收到GNSS消息娘汞;
    WiFi掃描每小時(shí)只會(huì)執(zhí)行幾次
  1. 隱私
  • 25 -> 26:設(shè)備識(shí)別
    應(yīng)用獲得的ANDROID_ID將和特定手機(jī)用戶歹茶、應(yīng)用的簽名相關(guān),不同應(yīng)用獲得的ANDROID_ID不同你弦;
    未恢復(fù)出廠設(shè)置的前提下惊豺,同一應(yīng)用重新安裝后將獲得相同的ANDROID_ID;
    恢復(fù)出廠設(shè)置后禽作,ANDROID_ID將發(fā)生改變尸昧;
    手機(jī)從老版本升級(jí)到Android O時(shí),之前的ANDROID_ID將保留旷偿,但是刪除/重新安裝后將發(fā)生改變烹俗;
    Build.SERIAL廢棄(在P上功能移除),需要改用Build.getSerial()萍程,而后者需要READ_PHONE_STATE動(dòng)態(tài)權(quán)限
  1. 安全性
  • 23 -> 24/25:
    TLS/SSL中RC4算法禁用幢妄;
    TLS/SSL中CHACHA20-POLY1305算法啟用;
    Crypto JCA provider廢棄茫负;
    應(yīng)用之間無法直接訪問私有文件蕉鸳,不能直接傳遞file://形式的文件路徑,應(yīng)用之間分享文件內(nèi)容需要通過FileProvider進(jìn)行忍法;
    應(yīng)用不能再通過COLUMN_LOCAL_FILENAME路徑訪問DownloadManager存儲(chǔ)的文件
  1. 接口標(biāo)準(zhǔn)化
  • 23 -> 24/25:只能使用標(biāo)準(zhǔn)NDK API
    應(yīng)用只能使用標(biāo)準(zhǔn)的NDK API潮尝,不能再使用未公開的系統(tǒng)so;
    違反結(jié)果:在新版本手機(jī)上無法工作饿序,crash
  1. 能力變化
  • 25 -> 26:創(chuàng)建桌面圖標(biāo)勉失、系統(tǒng)彈出窗口
    之前版本創(chuàng)建桌面圖標(biāo)的接口com.android.launcher.action.INSTALL_SHORTCUT不再工作,需要使用新的接口原探;
    持有SYSTEM_ALERT_WINDOW權(quán)限的應(yīng)用乱凿,必須使用TYPE_APPLICATION_OVERLAY類型彈出系統(tǒng)窗口顽素,不再能夠使用TYPE_PHONE、TYPE_PRIORITY_PHONE告匠、TYPE_SYSTEM_ALERT戈抄、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等類型
  1. 權(quán)限
  • 25 -> 26:
    需要使用ACTION_INSTALL_PACKAGE的應(yīng)用后专,需要持有REQUEST_INSTALL_PACKAGES權(quán)限(簽名級(jí)+用戶可設(shè)置)
  1. 其他變化
  • API接口行為調(diào)整(例如Notification默認(rèn)設(shè)置)
  • API新接口、接口修改输莺、廢棄
  • 新功能及功能改進(jìn)(例如多窗口戚哎、Data Saver、畫中畫嫂用、富狀態(tài)欄等)

總結(jié):

以上列出了很多版本變化需要關(guān)注的點(diǎn)型凳,其中最主要是靜態(tài)廣播的注冊(cè)、后臺(tái)服務(wù)的限制以及應(yīng)用間文件訪問方式的變更嘱函。廣播盡可能的采用動(dòng)態(tài)注冊(cè)的方式甘畅,服務(wù)可以選擇前臺(tái)服務(wù)和JobService兩種方式,根據(jù)實(shí)際的業(yè)務(wù)需求來選擇往弓。如果及時(shí)性要求比較高并且能夠接受前臺(tái)服務(wù)通知欄就可以使用前臺(tái)服務(wù)的方式來工作疏唾,如果實(shí)時(shí)性要求不是很高可以使用JobService來交給系統(tǒng)分發(fā),系統(tǒng)一次最多可以執(zhí)行6個(gè)JobService,每個(gè)可以執(zhí)行的時(shí)間大概是10分鐘函似,10分鐘后就會(huì)執(zhí)行其他job槐脏,還可以通過設(shè)置JobService的優(yōu)先級(jí)來保證系統(tǒng)優(yōu)先調(diào)度。
當(dāng)然了撇寞,這些只是比較重要的部分顿天,更多細(xì)節(jié)變化的適配需要通過編譯、測(cè)試驗(yàn)證蔑担,再結(jié)合自己的實(shí)際需求來調(diào)整牌废。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啤握,隨后出現(xiàn)的幾起案子鸟缕,更是在濱河造成了極大的恐慌,老刑警劉巖恨统,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叁扫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畜埋,警方通過查閱死者的電腦和手機(jī)莫绣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悠鞍,“玉大人对室,你說我怎么就攤上這事模燥。” “怎么了掩宜?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蔫骂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我牺汤,道長(zhǎng)辽旋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任檐迟,我火速辦了婚禮补胚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘追迟。我一直安慰自己溶其,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布敦间。 她就那樣靜靜地躺著瓶逃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廓块。 梳的紋絲不亂的頭發(fā)上厢绝,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音剿骨,去河邊找鬼代芜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浓利,可吹牛的內(nèi)容都是我干的挤庇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贷掖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嫡秕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苹威,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤昆咽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后牙甫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掷酗,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年窟哺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泻轰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡且轨,死狀恐怖浮声,靈堂內(nèi)的尸體忽然破棺而出虚婿,到底是詐尸還是另有隱情,我是刑警寧澤泳挥,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布然痊,位于F島的核電站,受9級(jí)特大地震影響屉符,放射性物質(zhì)發(fā)生泄漏剧浸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一矗钟、第九天 我趴在偏房一處隱蔽的房頂上張望辛蚊。 院中可真熱鬧,春花似錦真仲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碑宴,卻和暖如春软啼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背延柠。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工祸挪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贞间。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓贿条,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親增热。 傳聞我的和親對(duì)象是個(gè)殘疾皇子整以,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,419評(píng)論 0 17
  • 介紹自己負(fù)責(zé)的部分峻仇,如何實(shí)現(xiàn)的公黑。 自定義view viewGroup activity的啟動(dòng)流程 事件傳遞及滑動(dòng)沖...
    東經(jīng)315度閱讀 1,211評(píng)論 1 4
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,698評(píng)論 0 3
  • 我叫c,接下來要給大家講述一個(gè)我和我朋友的故事摄咆,這件事情我一直躊躇很久不知道該怎么說凡蚜,一直在想說出來別人會(huì)不會(huì)把我...
    C先生來了閱讀 560評(píng)論 0 1
  • 一天大羊在家發(fā)現(xiàn)一本比較完好的書,上面赫然寫著《經(jīng)濟(jì)學(xué)講義》吭从,開篇就講明人世間的所有紛爭(zhēng)與合作都源于四個(gè)要素: 東...
    清晨太陽閱讀 128評(píng)論 0 0