每次看見(jiàn)谷歌發(fā)布新的android系統(tǒng)時(shí),心里總有有一些小激動(dòng)刁品。對(duì)你沒(méi)聽(tīng)錯(cuò)浩姥,小激動(dòng);想想看我們對(duì)應(yīng)用究竟會(huì)不會(huì)崩潰呢镀裤?那些功能失效了缴饭?會(huì)有多少用戶(hù)投訴骆莹? 驚不驚喜幕垦,意不意外?不過(guò)都是玩笑話了疚察,只有谷歌不斷對(duì)升級(jí)仇奶,android才能更加進(jìn)步,作為一個(gè)android程序員岛抄,我是支持他的别惦!
首先整體看一下8.0 : 官網(wǎng)的英文描述是smarter、faster;Android8.0是全新版本夫椭,它優(yōu)化了電源及性能掸掸,并提供了多種全新的方式來(lái)擴(kuò)展您的應(yīng)用,針對(duì) Android 8.0 開(kāi)發(fā)應(yīng)用,并在您的應(yīng)用中利用最新的平臺(tái)功能蹭秋。規(guī)劃對(duì)新的后臺(tái)限制模型的支持扰付,并嘗試諸如自動(dòng)填充、XML 中的字體資源仁讨、自動(dòng)調(diào)整 TextView 的大小悯周、WebView 增強(qiáng)功能等一些全新 API。
想嘗嘗鮮陪竿?沒(méi)問(wèn)題。打開(kāi)您的AndroidStudio更新構(gòu)建配置將?compileSdkVersion族跛、buildToolsVersion闰挡、targetSdkVersion?和 Support Library 版本更新為下列版本:
android {? compileSdkVersion 'android-O'? buildToolsVersion '26.0.0-rc2'? defaultConfig {? ? targetSdkVersion 'O'? }? ...}dependencies {? compile 'com.android.support:appcompat-v7:26.0.0-beta1'}// REQUIRED:Google's new Maven repois required for the latest// support library that is compatible with Android 8.0repositories {? ? maven {? ? ? ? url 'https://maven.google.com'? ? }}
注意啦,注意啦礁哄,這是谷歌大大的原話——您不能在此配置下發(fā)布應(yīng)用长酗。“O”版本是一個(gè)臨時(shí) API 級(jí)別桐绒,只能用于 Android 8.0 期間的開(kāi)發(fā)和測(cè)試夺脾。您必須等到最終 API 級(jí)別發(fā)布時(shí)再發(fā)布 Android 8.0 變更,屆時(shí)再次更新配置茉继。
于是我就想說(shuō)咧叭,市場(chǎng)上涌現(xiàn)出來(lái)的那些8.0系統(tǒng),你們是想鬧哪樣烁竭?先挖點(diǎn)坑給大家嘗嘗鮮菲茬?
來(lái)來(lái)來(lái),我們先一起愉快的填填坑吧派撕!
坑1——后臺(tái)執(zhí)行限制:
如果針對(duì) Android 8.0 的應(yīng)用嘗試在不允許其創(chuàng)建后臺(tái)服務(wù)的情況下使用?startService()?函數(shù)婉弹,則該函數(shù)將引發(fā)一個(gè)?IllegalStateException。
坑2——后臺(tái)位置限制:
Fused Location Provider (FLP)
Geofencing
GNSS Measurements
Location Manager
Wi-Fi Manager
為確保您的應(yīng)用按預(yù)期方式運(yùn)行终吼,請(qǐng)完成以下步驟:
查看您的應(yīng)用的邏輯镀赌,并確保您使用的是最新的位置 API。
測(cè)試您的應(yīng)用是否在每個(gè)用例中都表現(xiàn)出預(yù)期行為际跪。
考慮使用Fused Location Provider (FLP)或地理圍欄來(lái)處理依賴(lài)于用戶(hù)當(dāng)前位置的用例商佛。
說(shuō)多了都是淚呀蛙粘,每次升級(jí)都要整一些幺蛾子出來(lái),測(cè)試您使用的用例是否表現(xiàn)出預(yù)期行為威彰。出牧。。歇盼。心中某些動(dòng)物一直在奔騰舔痕。。豹缀。
坑3——記錄未捕獲的異常
如果某個(gè)應(yīng)用安裝的?Thread.UncaughtExceptionHandler?未移交給默認(rèn)的?Thread.UncaughtExceptionHandler伯复,則當(dāng)出現(xiàn)未捕獲的異常時(shí),系統(tǒng)不會(huì)終止應(yīng)用邢笙。從 Android 8.0 開(kāi)始啸如,在此情況下系統(tǒng)將記錄異常堆棧跟蹤情況;在之前的平臺(tái)版本中氮惯,系統(tǒng)不會(huì)記錄異常堆棧跟蹤情況叮雳。我們建議,自定義?Thread.UncaughtExceptionHandler?實(shí)現(xiàn)始終移交給默認(rèn)處理程序處理妇汗;遵循此建議的應(yīng)用不受 Android 8.0 此項(xiàng)變更的影響帘不。
這個(gè)就牛逼了,谷歌大大發(fā)話了杨箭,你捕捉了老子的異常寞焙,老子就不干活了!應(yīng)用不會(huì)掛了互婿,系不系很牛逼捣郊,你會(huì)讓用戶(hù)玩一個(gè)僵尸應(yīng)用吧。
坑4——提醒窗口
如果應(yīng)用使用SYSTEM_ALERT_WINDOW權(quán)限并且嘗試使用以下窗口類(lèi)型之一來(lái)在其他應(yīng)用和系統(tǒng)窗口上方顯示提醒窗口:
TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR
...那么慈参,這些窗口將始終顯示在使用TYPE_APPLICATION_OVERLAY窗口類(lèi)型的窗口下方呛牲。如果應(yīng)用針對(duì)的是 Android 8.0,則應(yīng)用會(huì)使用TYPE_APPLICATION_OVERLAY窗口類(lèi)型來(lái)顯示提醒窗口懂牧。
如需了解詳細(xì)信息侈净,請(qǐng)參閱針對(duì) Android 8.0 的應(yīng)用的行為變更內(nèi)的提醒窗口的常用窗口類(lèi)型部分。
坑5——硬件序列號(hào)
Build.SERIAL 已棄用僧凤。需要知道硬件序列號(hào)的應(yīng)用應(yīng)改為使用新的Build.getSerial()函數(shù),該函數(shù)要求具有READ_PHONE_STATE權(quán)限元扔。
坑6——隱私升級(jí)
LauncherAppsAPI 不再允許工作資料應(yīng)用獲取有關(guān)主個(gè)人資料的信息躯保。當(dāng)某個(gè)用戶(hù)在托管配置文件中時(shí),LauncherAppsAPI 的行為就像同一配置文件組的其他配置文件中未安裝任何應(yīng)用一樣澎语。和之前一樣途事,嘗試訪問(wèn)無(wú)關(guān)聯(lián)的個(gè)人資料會(huì)引發(fā) SecurityExceptions验懊。
對(duì)于這個(gè)坑,我只想說(shuō)谷歌大大干得漂亮尸变!
采完坑的感覺(jué)有沒(méi)有很爽义图?來(lái)點(diǎn)其他的刺激一下?不得不說(shuō)安全和隱私召烂,每個(gè)版本谷歌都在下功夫去做(對(duì)碱工,沒(méi)錯(cuò),如果你被面試問(wèn)到android的最近幾個(gè)版本的區(qū)別奏夫,你就大聲喊出來(lái)安全和隱私都在逐步提升)怕篷。
簡(jiǎn)單的看一下吧,畢竟是好東西:
1酗昼、如果您的應(yīng)用的網(wǎng)絡(luò)安全性配置選擇退出對(duì)明文流量的支持廊谓,那么您的應(yīng)用的WebView對(duì)象無(wú)法通過(guò) HTTP 訪問(wèn)網(wǎng)站。每個(gè)WebView對(duì)象必須轉(zhuǎn)而使用 HTTPS麻削。
2蒸痹、除非身份驗(yàn)證器擁有用戶(hù)帳號(hào)或用戶(hù)授予訪問(wèn)權(quán)限,否則呛哟,應(yīng)用將無(wú)法再訪問(wèn)用戶(hù)帳號(hào)电抚。僅擁有GET_ACCOUNTS權(quán)限尚不足以訪問(wèn)用戶(hù)帳號(hào)。要獲得帳號(hào)訪問(wèn)權(quán)限竖共,應(yīng)用應(yīng)使用AccountManager.newChooseAccountIntent()或特定于身份驗(yàn)證器的函數(shù)蝙叛。獲得帳號(hào)訪問(wèn)權(quán)限后,應(yīng)用可以調(diào)用AccountManager.getAccounts()來(lái)訪問(wèn)帳號(hào)公给。Android 8.0 已棄用LOGIN_ACCOUNTS_CHANGED_ACTION借帘。相反,應(yīng)用在運(yùn)行時(shí)應(yīng)使用addOnAccountsUpdatedListener()獲取帳號(hào)更新信息
3淌铐、系統(tǒng)屬性?net.dns1肺然、net.dns2、net.dns3?和?net.dns4?不再可用腿准,此項(xiàng)變更可加強(qiáng)平臺(tái)的隱私性际起。
4、修正的權(quán)限授予的bug
5吐葱、此平臺(tái)不再支持 SSLv3街望。
6、在與未正確實(shí)現(xiàn) TLS 協(xié)議版本協(xié)商的服務(wù)器建立 HTTPS 連接時(shí)弟跑,HttpsURLConnection不再?lài)L試回退到之前的 TLS 協(xié)議版本并重試的權(quán)宜方法灾前。
7、Android 8.0 將使用安全計(jì)算 (SECCOMP) 過(guò)濾器來(lái)過(guò)濾所有應(yīng)用孟辑。允許的系統(tǒng)調(diào)用列表僅限于通過(guò) bionic 公開(kāi)的系統(tǒng)調(diào)用哎甲。此外蔫敲,還提供了其他幾個(gè)后向兼容的系統(tǒng)調(diào)用,但我們不建議使用這些系統(tǒng)調(diào)用炭玫。
8奈嘿、現(xiàn)在,您的應(yīng)用的WebView對(duì)象將在多進(jìn)程模式下運(yùn)行吞加。網(wǎng)頁(yè)內(nèi)容在獨(dú)立的進(jìn)程中處理裙犹,此進(jìn)程與包含應(yīng)用的進(jìn)程相隔離,以提高安全性榴鼎。
9伯诬、您無(wú)法再假定 APK 駐留在名稱(chēng)以 -1 或 -2 結(jié)尾的目錄中。應(yīng)用應(yīng)使用sourceDir獲取此目錄巫财,而不能直接使用目錄格式盗似。
10、對(duì)于ota升級(jí)方面優(yōu)化了ANDROID_ID
我家娃要醒了平项,就這樣吧赫舒,還有很多精彩大家自己去探索吧!