Android各版本迭代改動與適配集合

2021-10-12 08:43:36 字數 3317 閱讀 2665

前言

今天分享的面試題是:

android在版本迭代中,總會進行很多改動,那麼你熟知各版本都改動了什麼內容?又要怎麼適配呢?

android4.4

發布art虛擬機器,提供選項可以開啟。

httpurlconnection的底層實現改為了okhttp。

android5.0

art成為預設虛擬機器,完全代替dalvik虛擬機器。

context.bindservice() 方法需要顯式 intent,如果提供隱式 intent,將引發異常。

android6.0

增加執行時許可權限制

如果你的應用使用到了危險許可權,比如在執行時進行檢查和請求許可權。checkselfpermission()方法用於檢查許可權,requestpermissions() 方法用於請求許可權。

取消支援apache http

android 

有的小夥伴可能不熟悉這是啥,簡單說下:

apache httpclient 是apache開源組織提供的乙個開源的專案,它是乙個簡單的http客戶端(並不是瀏覽器),可以傳送http請求,接受http響應。

所以說白了,其實就是乙個請求網路的專案框架。

android 7.0

android 7.0 引入一項新的應用簽名方案 apk signature scheme v2

toast導致的badtokenexception

這一點其實就是限制了在應用間共享檔案,如果需要在應用間共享,需要授予要訪問的uri臨時訪問許可權,我們要做的就是註冊fileprovider:

1)宣告fileprovider。

2)編寫xml檔案,確定可訪問的目錄

//代表裝置的根目錄new file("/");

//getexternalcachedirs()

3)使用fileprovider

在 android 8.0 之前,如果應用在執行時請求許可權並且被授予該許可權,系統會錯誤地將屬於同一許可權組並且在清單中註冊的其他許可權也一起授予應用。

對於針對 android 8.0 的應用,系統只會授予應用明確請求的許可權。然而,一旦使用者為應用授予某個許可權,則所有後續對該許可權組中許可權的請求都將被自動批准。

也就是說,以前你申請了read_external_storage許可權,應用會同時給你授予同許可權組的write_external_storage許可權。如果android8.0以上,只會給你授予你請求的read_external_storage許可權。如果需要write_external_storage許可權,還要單獨申請,不過系統會立即授予,不會提示。

修改通知

android 8.0 對於通知修改了很多,比如通知渠道、通知標誌、通知超時、背景顏色。其中比較重要的就是通知渠道,其允許您為要顯示的每種通知型別建立使用者可自定義的渠道。

這樣的好處就是對於某個應用可以把許可權分成很多類,使用者來控制是否顯示哪些類別的通知。而開發者要做的就是必須設定這個渠道id,否則通知可能會失效。

private void createnotificationchannel() 

}懸浮窗

private void installapk()

}only fullscreen opaque activities can request orientation

只有全屏不透明的activity才可以設定方向。這應該是個bug,在android8.0**現,8.1中被修復。

我們的處理辦法就是要麼去掉設定方向的**,要麼捨棄透明效果。

android9.0

在9.0中預設情況下啟用網路傳輸層安全協議 (tls),預設情況下已停用明文支援。也就是不允許使用http請求,要求使用https。解決辦法就是新增網路安全配置:

移除apache http 客戶端

在6.0中取消了對apache http 客戶端的支援,android9.0中直接移除了該庫,要使用的話需要新增配置:

前台服務呼叫

android 9.0 要求建立乙個前台服務需要請求 foreground_service 許可權,否則系統會引發 securityexception。

if (android.os.build.version.sdk_int >= android.os.build.version_codes.o)  else 

不能在非acitivity環境中啟動activity

intent intent = new intent(this, testactivity.class);

intent.setflags(intent.flag_activity_new_task);

startactivity(intent);

android10

分割槽儲存

android10中預設開啟了分割槽儲存,也就是沙盒模式。應用只能看到本應用專有的目錄(通過 context.getexternalfilesdir() 訪問)以及特定型別的**。

如果需要關閉這個功能可以配置:

android:requestlegacyexternalstorage="true"

分割槽儲存下,訪問檔案的方法:

1)應用專屬目錄

//分割槽儲存空間

val file = file(context.filesdir, filename)

val intent = intent(intent.action_open_document)

intent.addcategory(intent.category_openable)

intent.type = "image/*"

startactivityforresult(intent, 100)

@requiresapi(build.version_codes.kitkat)

override fun onactivityresult(requestcode: int, resultcode: int, data: intent?) 

}許可權再次公升級

如果android10以下裝置獲取裝置imei等資訊,可以配置最大sdk版本:

android 11

分割槽儲存強制執行

沒錯,android11強制執行分割槽儲存,也就是沙盒模式。這次真的沒有關閉功能了,離android11出來也有一段時間了,還是抓緊適配把。

修改**許可權

改動了兩個api:getline1number()和 getmsisdn() ,需要加上read_phone_numbers許可權

不允許自定義toast從後台顯示了

必須加上v2簽名

增加5g相關api

後台位置訪問許可權再次限制

你一定很奇怪,為什麼android11的適配就這麼草草收尾了?這可是我們最需要的啊?

哈哈,因為改動還是挺多的

Android各版本名稱

最初的測試版本叫astro 阿童木 1.0叫bender 發條機械人 後面都用甜點命名了。1.5 cupcake 紙杯蛋糕 1.6 donut 甜甜圈 2.1 eclair 鬆餅 2.2 froyo 凍酸奶 2.3 gingerbread 薑餅 3.0 honeycomb 蜂巢 4.0 ice cr...

Android各版本份額分布

谷歌發布最新android各系統版本市場份額統計,從最新的訊息來看android kitkat裝置已公升至8.5 高於上月的5.3 恰巧與android 4.3裝置數量相同。於網路 而更多的手機和平板依舊停留在果凍豆上,佔比高達60.8 這其中包括了13.4 的android 4.0 33.5 的a...

android各版本新特性

android 新特性 android版本5.0 api21 名字l 預設情況下,在android 5.0中,通知現在顯示使用者的鎖定螢幕上,使用者可以選擇保護敏感資訊不被公開,再次情況下,系統會自動刪減通知顯示的文字。要自定義此刪減的通知,請使用setpublicversion context.b...