Android P 新特性及兼容性適配注意事項(xiàng)

Android P 新特性及兼容性適配注意事項(xiàng)

? ? *影響所有應(yīng)用 (無(wú)論TargetApi 是否 28+)

1.非SDK接口限制(參考https://www.cnblogs.com/huaweiopenlab/p/9056298.html)

? ? SDK 接口是指在Android框架軟件包索引中記錄的接口胸懈。(https://developer.android.google.cn/reference/packages能夠在谷歌網(wǎng)站查詢到的接口都是SDK 接口)

? ? 非SDK接口:除以上的 SDK 接口外啤呼,其他都是非SDK接口應(yīng)用

? ? 濫用 non-SDK interfaces 的危害:非SDK接口在版本之間可能有所變化幽七,將帶來(lái)兼容性問題妄痪。非SDK接口調(diào)用警告所有私有API均在Logcat 中顯示警告卜壕。DP版本在Activity 開始時(shí)會(huì)顯示Toast警告斗塘。

? ? 名單分類 查看名單https://android.googlesource.com/platform/frameworks/base/+/master/config/

? ? Light grey list: targetSDK>=P時(shí)雾鬼,警告葱轩;

? ? Dark grey list: targetSDK<P時(shí)媚值,警告狠毯;>=p時(shí),不允許調(diào)用褥芒;

? ? Black list:三方應(yīng)用不允許調(diào)用嚼松;

? 2.默認(rèn)情況下啟用網(wǎng)絡(luò)傳輸層安全協(xié)議

? ? Android P 限制了明文流量的網(wǎng)絡(luò)請(qǐng)求,非加密的流量請(qǐng)求都會(huì)被系統(tǒng)禁止掉。 即默認(rèn)禁掉http請(qǐng)求

? ? 解決方法: manifest application android:usesCleartextTraffic="true"

? 3.androd P? Apache HTTP 客戶端棄用影響采用非標(biāo)準(zhǔn) ClassLoader 的應(yīng)用(即 androd P Apache HTTP API 不可用)

? ? 解決方法: Android 9 及更高版本為目標(biāo)的應(yīng)用可以向其 AndroidManifest.xml 添加以下內(nèi)容:

? ? ? ? ? <uses-library android:name="org.apache.http.legacy" android:required="false"/>

? 4.Android O 開始支持特長(zhǎng)屏幕.

? ? ? ? 如果自適應(yīng)式 UI 不適合您的場(chǎng)景献酗,可以考慮在 manifest 中的 <activity> 內(nèi)設(shè)置 resizableActivity = false寝受,并加上 android:MaxAspectRatio 來(lái)聲明最大支持縱橫比。這會(huì)在特長(zhǎng)屏幕的設(shè)備上啟用兼容模式凌摄,把應(yīng)用邊緣的顯示空間以黑色填充羡蛾。

? ? 注:目前最高屏占比為紅米6 Pro 19:9 = 2.111? android:name="android.max_aspect" android:value="2.2"

? 5.限制非Activity場(chǎng)景啟動(dòng)Activity(強(qiáng)制性 FLAG_ACTIVITY_NEW_TASK 要求)

? ? 在 Android P 中,除非使用了 FLAG_ACTIVITY_NEW_TASK? intent flag锨亏,您不能在非 Activity 場(chǎng)景下啟動(dòng) Activity痴怨。若您未使用這個(gè) intent flag 就嘗試啟動(dòng) Activity,系統(tǒng)無(wú)法正常開啟活 Activity器予,并會(huì)在日志中留下相應(yīng)信息浪藻。

? ? * 注意:FLAG_ACTIVITY_NEW_TASK 標(biāo)簽的要求屬為預(yù)期行為,并且從 Android N 就對(duì)此作了強(qiáng)制要求乾翔。但是 Android N 系統(tǒng)中的錯(cuò)誤暫時(shí)導(dǎo)致此要求沒有被強(qiáng)制執(zhí)行爱葵。

? 6.限制靜態(tài)廣播的接收

? ? 升級(jí)安卓9.0之后,隱式廣播將會(huì)被全面禁止反浓,在AndroidManifest中注冊(cè)的Receiver將不能夠生效

? 7.前臺(tái)服務(wù)

? ? 針對(duì) Android P 或更高平臺(tái)開發(fā)的應(yīng)用必須請(qǐng)求 FOREGROUND_SERVICE 權(quán)限才能使用前臺(tái)服務(wù)萌丈。 FOREGROUND_SERVICE 屬于普通級(jí)別請(qǐng)求,因此提出請(qǐng)求后雷则,系統(tǒng)會(huì)自動(dòng)授予辆雾。

? ? 若應(yīng)用未提出 FOREGROUND_SERVICE 請(qǐng)求就試圖創(chuàng)建前臺(tái)服務(wù),系統(tǒng)會(huì)拋出 SecurityException 異常月劈。

? 8.移除對(duì) Build.serial 的直接訪問

? ? Android 8.0? (API等級(jí)26) 已棄用 Build.SERIAL 字段度迂;從 Android P 開始,Build.SERIAL 始終設(shè)定為 "UNKNOWN"猜揪。此項(xiàng)變更能夠保護(hù)用戶隱私惭墓。

? ? 若您的應(yīng)用須要訪問設(shè)備硬件序列號(hào),您應(yīng)該請(qǐng)求 READ_PHONE_STATE 權(quán)限而姐,然后調(diào)用 getSerial()腊凶。

? 9.依賴的第三方 SDK (特別是加固和熱修復(fù)框架) 會(huì)和系統(tǒng)底層緊密集成 (如使用非公開的接口),

? ? 而導(dǎo)致應(yīng)用在 Android 版本升級(jí)時(shí)無(wú)法正常運(yùn)行拴念。钧萍。。注意三方sdk版本更新

? 10.不允許共享 WebView 數(shù)據(jù)目錄

? ? Android P 應(yīng)用無(wú)法再讓多個(gè)進(jìn)程共用同一 WebView 數(shù)據(jù)目錄

? ? 若多個(gè)進(jìn)程中使用 WebView 的實(shí)例丈莺,則必須先利用 WebView.setDataDirectorySuffix() 函數(shù)為每個(gè)進(jìn)程指定唯一的數(shù)據(jù)目錄后綴划煮,然后再在該進(jìn)程中使用 WebView 的給定實(shí)例

? ? 若多個(gè)進(jìn)程需要訪問同一網(wǎng)絡(luò)數(shù)據(jù)送丰,您需要自行在這些進(jìn)程之間復(fù)制數(shù)據(jù)缔俄。 例如,您可以調(diào)用 getCookie() 和 setCookie(),在不同進(jìn)程之間手動(dòng)傳輸 Cookie數(shù)據(jù)

? 11.全面屏檢測(cè)特殊適配

? ? Android P 里官方收歸了全面屏的判斷邏輯俐载,Android P 和之后的版本完全可以使用官方 API 來(lái)判斷全面屏蟹略,當(dāng)然前提是第三方廠商按照 google 官方接口去實(shí)現(xiàn)。Android P 版本判斷全面屏代碼很簡(jiǎn)單

? ? if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

? ? ? ? WindowInsets windowInsets = decorView.getRootWindowInsets();

? ? ? ? if (windowInsets != null) {

? ? ? ? ? ? DisplayCutout displayCutout = windowInsets.getDisplayCutout();

? ? ? ? ? ? if (displayCutout != null) {

? ? ? ? ? ? ? ? List<Rect> rects = displayCutout.getBoundingRects();

? ? ? ? ? ? ? ? //通過判斷是否存在rects來(lái)確定是否劉海屏手機(jī)

? ? ? ? ? ? ? ? if (rects != null && rects.size() > 0) {

? ? ? ? ? ? ? ? ? ? isNotchScreen = true;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

? 12.應(yīng)用待機(jī)分組策略

? ? 應(yīng)用待機(jī)群組 參考https://developer.android.com/about/versions/pie/power

? ? 受此影響為主要為應(yīng)用的后臺(tái)行為受限制遏佣,特別如鬧鐘挖炬,地圖導(dǎo)航,后臺(tái)下載

? 13.省電模式改進(jìn) 影響 后臺(tái)執(zhí)行限制 位置服務(wù)及廣播限制等

? 14.視圖焦距

? ? 零區(qū)域視圖 (即長(zhǎng)或?qū)挼闹禐?0) 不再能夠設(shè)定焦點(diǎn)状婶。

? ? 另外意敛,在 touch-mode 下 Activity 不再隱式分配初始焦點(diǎn),而是要求開發(fā)者在需要的情況下對(duì)初始焦點(diǎn)提出顯式要求膛虫。

? ? Android P 應(yīng)用允許 CSS Color Module Level 4 行為草姻,用于操作 4 位和 8 位十六進(jìn)制 CSS 顏色。

? ? Chrome 從 52 版本開始支持 CSS Color Module Level 4稍刀,但是 WebView 目前暫時(shí)禁用該功能撩独,因?yàn)榇嬖诂F(xiàn)有 Android 應(yīng)用在 Android ordering (ARGB) 中包含 32 位十六進(jìn)制顏色,這可能會(huì)導(dǎo)致渲染錯(cuò)誤账月。

? 15.權(quán)限組變更

? ? Android P 引入 CALL_LOG 權(quán)限組并將 READ_CALL_LOG综膀、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS 權(quán)限移入該組。 在之前的 Android 版本中局齿,這些權(quán)限位于 PHONE 權(quán)限組

? 16.wifi掃描權(quán)限變更

? ? Android 8.0和Android 8.1:成功調(diào)用 WifiManager.getScanResults() 需要以下任何一項(xiàng)權(quán)限:

? ? ? ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE

? ? Android 9及更高版本:成功調(diào)用 WifiManager.startScan() 需要滿足以下所有條件:

? ? ? ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE

? ? 成功調(diào)用 WifiManager.getScanResults() 需要滿足以下所有條件:

? ? ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE;設(shè)備上啟用了位置服務(wù)(在“設(shè)置”>“位置”下)

? 17.新的圖片解碼ImageDecoder

? ? 替代 BitmapFactory 可以從 流剧劝、file、byte buffer项炼、 uRL 加載 Bitmap 和 Drawable 支持精確尺寸縮放担平, 并且支持加載 gif 、 Webp锭部, 以及圓角等樣式設(shè)置暂论。

? 18.復(fù)雜文本顯示PrecomputedText

? ? 顯示復(fù)雜的,包含多種字體拌禾,行間距取胎,字母間距,文本方向湃窍,換行符闻蛀,連字符等功能。

? 19.文本放大鏡Magnifier

? ? Android P android P 引入了文本放大鏡 <P不兼容

? 20.非全屏透明Activity禁用設(shè)置orientation

? ? 非全屏透明頁(yè)面不允許設(shè)置方向您市,否則會(huì)拋Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation異常觉痛,解決方案:android:windowIsTranslucent設(shè)置為false。

? 21.劉海屏挖孔屏API支持

? ? 谷歌P版本提供了統(tǒng)一的挖孔屏方案和三方適配挖孔屏方案:對(duì)于有狀態(tài)欄的頁(yè)面茵休,不會(huì)受到挖孔屏特性的影響薪棒;全屏顯示的頁(yè)面手蝎,系統(tǒng)挖孔屏方案會(huì)對(duì)應(yīng)用界面做下移避開挖孔區(qū)顯示;已經(jīng)適配的P的應(yīng)用的全屏頁(yè)面可以通過谷歌提供的適配方案使用挖孔區(qū)俐芯,真正做到全屏顯示棵介。

? ? P版本三方適配挖孔屏方案:

? ? 1.新增挖孔屏挖孔尺寸和位置接口:WindowInsets DisplayCutout

? ? 2.新窗口布局模式,允許應(yīng)用程序請(qǐng)求是否在挖孔區(qū)域布局:WindowManager.LayoutParams

? ? ? int layoutInDisplayCutoutMode:

? ? ? final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;默認(rèn)情況下吧史,全屏窗口不會(huì)使用到挖孔區(qū)域

? ? ? final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;窗口聲明使用挖孔區(qū)域

? ? ? final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;窗口聲明不使用挖孔區(qū)域

? 22.sensor和麥克風(fēng)后臺(tái)管控

? ? 限制sensor event向后臺(tái)應(yīng)用或服務(wù)的傳輸邮辽,對(duì)前臺(tái)應(yīng)用無(wú)影響;主要是考慮隱私原因贸营;對(duì)應(yīng)用來(lái)說是很大的變化吨述。影響范圍:應(yīng)用處于idle和gone的狀態(tài)就會(huì)被管控,切換到后臺(tái)一分鐘應(yīng)用就會(huì)進(jìn)入idle狀態(tài)钞脂,但是有前臺(tái)服務(wù)的不會(huì)進(jìn)入idle狀態(tài)锐极。

? 23.利用 Wi-Fi RTT 進(jìn)行室內(nèi)定位

? ? 在室內(nèi),IEEE 802.11 MC WI-FI protocol? 測(cè)量與附近wifi 鏈接點(diǎn)的距離(2~3個(gè))芳肌,通過 RTT灵再,來(lái)測(cè)量距離, 能精確到 1~2米 在提供硬件支持的 Android P 設(shè)備上亿笤,應(yīng)用可以使用全新的 RTT API 來(lái)測(cè)量與附近支持 RTT 的 Wi-Fi 接入點(diǎn) (AP) 的距離翎迁,設(shè)備不需要連接至 AP 即可使用 RTT使用uses-feature來(lái)標(biāo)注:<uses-feature android:name="android.hardware.wifi.rtt" />

? 24.禁止空閑應(yīng)用訪問相機(jī)、麥克風(fēng)和傳感器

? ? Android 9 限制后臺(tái)應(yīng)用訪問用戶輸入和傳感器數(shù)據(jù)的能力净薛。 如果您的應(yīng)用在運(yùn)行 Android 9 設(shè)備的后臺(tái)運(yùn)行汪榔,系統(tǒng)將對(duì)您的應(yīng)用采取以下限制:

? (1)應(yīng)用不能訪問麥克風(fēng)或攝像頭。

? (2)使用連續(xù)報(bào)告模式的傳感器(例如加速度計(jì)和陀螺儀)不會(huì)接收事件肃拜。

? (3)使用變化或一次性報(bào)告模式的傳感器不會(huì)接收事件痴腌。

? 25. Crypto JCA 提供程序已被移除,棄用 Bouncy Castle 加密

? ? ? AndroidP后,不再允許應(yīng)用直接讀取 /proc/net/xt_qtaguid 文件夾中的文件燃领。 這樣做是為了確保與某些根本不提供這些文件的設(shè)備保持一致士聪。應(yīng)用應(yīng)該采用標(biāo)準(zhǔn) API TrafficStats 和 NetworkStatsManager 進(jìn)行訪問,此限制對(duì)所有運(yùn)行AndroidP系統(tǒng)上的應(yīng)用生效猛蔽。

? 26.SELinux 禁止訪問應(yīng)用的數(shù)據(jù)目錄

? ? 對(duì)于targetsdkversion>=28的應(yīng)用剥悟,系統(tǒng)強(qiáng)制每個(gè)應(yīng)用的 SELinux 沙盒對(duì)每個(gè)應(yīng)用的私有數(shù)據(jù)目錄強(qiáng)制執(zhí)行逐個(gè)應(yīng)用的 SELinux 限制。現(xiàn)在曼库,不允許直接通過路徑訪問其他應(yīng)用的數(shù)據(jù)目錄区岗。應(yīng)用可以繼續(xù)使用進(jìn)程間通信 (IPC) 機(jī)制(包括通過傳遞 FD)共享數(shù)據(jù),例如可以采用FileProvider毁枯。




android P 新增及改動(dòng)是非常大的慈缔,而且對(duì)以前版本已做的限制和警告現(xiàn)在P版本是強(qiáng)制的,更多新特性需深入發(fā)掘种玛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藐鹤,一起剝皮案震驚了整個(gè)濱河市颅拦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌教藻,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右锨,死亡現(xiàn)場(chǎng)離奇詭異括堤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绍移,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門悄窃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蹂窖,你說我怎么就攤上這事轧抗。” “怎么了瞬测?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵横媚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我月趟,道長(zhǎng)灯蝴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任孝宗,我火速辦了婚禮穷躁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘因妇。我一直安慰自己问潭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布婚被。 她就那樣靜靜地躺著狡忙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪址芯。 梳的紋絲不亂的頭發(fā)上去枷,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音是复,去河邊找鬼删顶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淑廊,可吹牛的內(nèi)容都是我干的逗余。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼季惩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼录粱!你這毒婦竟也來(lái)了腻格?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啥繁,失蹤者是張志新(化名)和其女友劉穎菜职,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旗闽,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酬核,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了适室。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫡意。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捣辆,靈堂內(nèi)的尸體忽然破棺而出蔬螟,到底是詐尸還是另有隱情,我是刑警寧澤汽畴,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布旧巾,位于F島的核電站,受9級(jí)特大地震影響忍些,放射性物質(zhì)發(fā)生泄漏菠齿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一坐昙、第九天 我趴在偏房一處隱蔽的房頂上張望绳匀。 院中可真熱鬧,春花似錦炸客、人聲如沸疾棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)是尔。三九已至,卻和暖如春开仰,著一層夾襖步出監(jiān)牢的瞬間拟枚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工众弓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恩溅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓谓娃,卻偏偏與公主長(zhǎng)得像脚乡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滨达,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,699評(píng)論 2 59
  • Application 標(biāo)簽 android:allowTaskReparenting android:allow...
    Shawn_Dut閱讀 7,770評(píng)論 2 61
  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè) ac...
    Rtia閱讀 3,797評(píng)論 3 18
  • 這世間沒有偶然的相遇权悟,更沒有無(wú)緣的結(jié)合。 從圖騰來(lái)解說我的親密關(guān)係 基礎(chǔ)盤: 從基礎(chǔ)盤來(lái)看竹握,我們兩個(gè)是互為推動(dòng)的能...
    湯倩雯閱讀 7,983評(píng)論 0 7