Android新版本特性以及注意事項

版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html

概述

瞭解新版本的特性仍是頗有必要的,爲何這麼講呢?由於能夠從應用市場對發佈應用的目標API版本(targetSdkVersion值)的要求提及:android

  • 從 2018 年 8 月 1 日起,全部向 Google Play 首次提交的新應用都必須針對 Android 8.0 (API 等級 26) 開發; 2018 年 11 月 1 日起,全部 Google Play 的現有應用更新一樣必須針對 Android 8.0。
  • 2019年5月1日起應用寶本商城新上架應用應基於Android 8.0 (API等級26,即targetSdkVersion大於等於26)及以上開發。自2019年8月1日起,現有應用的更新應基於Android 8.0 (API等級26,即targetSdkVersion大於等於26)及以上開發。2018年9月1往後,未達到要求的應用,騰訊開放平臺將逐步採用不推薦的策略2019年5月1往後,未達到要求的應用,騰訊開放平臺將拒絕上架,2019年8月1往後,未達到要求的應用,騰訊開放平臺將拒絕更新。web

  • 騰訊開放平臺將在2018年3月21日啓動Android P (API 等級 28) 版本應用適配檢測工做。針對未適配Android P版本的應用,騰訊開放平臺將在Android P版本機型上採起屏蔽或不推薦更新等策略。
  • 華爲開發者聯盟:自2019年5月1日起,華爲應用市場新上架應用應基於Android 8.0 (API等級26,即targetSdkVersion大於等於26)及以上開發。自2019年8月1日起,現有應用的更新應基於Android 8.0 (API等級26,即targetSdkVersion大於等於26)及以上開發。2019年5月1往後,未達到要求的新應用,華爲應用市場將拒絕上架。2019年8月1往後,未達到要求的現有應用,華爲應用市場將拒絕更新。

而將targetSdkVersion的值修改爲高版本,那麼就表明在這個版本上的手機設備上已經進行了適配,好比Android8.0(API 26),那麼就要考慮到適配應用圖標的問題、還有通知欄適配等等。編程

各版本對應的API值

數據來源:https://developer.android.google.cn/about/dashboards/?hl=zh-cn安全

Android 4.4 KitKat(targetSdkVersion =19)

參考《Android 4.4 API網絡

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。app

外部存儲空間訪問權限

您的應用在 Android 4.4 上運行時沒法讀取外部存儲空間上的共享文件,除非您的應用具備 READ_EXTERNAL_STORAGE 權限。也就是說,沒有此權限,您沒法再訪問 getExternalStoragePublicDirectory() 返回的目錄中的文件。可是,若是您僅須要訪問 getExternalFilesDir() 提供的您的應用特有目錄,那麼,您不須要 READ_EXTERNAL_STORAGE 權限。框架

webview底層代碼變化

WebView 類的底層代碼和相關 API 已升級爲基於現代的 Chromium 源代碼快照。這會帶來各類性能提高,同時爲新的 HTML5 功能和遠程調試 WebView 內容提供支持。這次升級的範圍意味着若是您的應用使用 WebView,則在某些狀況下其行爲可能會受影響。儘管對已知的行爲變動進行了記錄,但僅在您將應用的 targetSdkVersion 更新爲「19」或更高版本時這些變動纔會對應用產生很大的影響—新的 WebView 在「兼容模式」中運行以便在面向 API 級別 18 和更低級別的應用中提供部分舊功能—您的應用有可能依賴來自之前的 WebView 版本的未知行爲。ide

沉浸式全屏模式

要爲您的應用提供填充整個屏幕的佈局,適用於 setSystemUiVisibility() 的新標記 SYSTEM_UI_FLAG_IMMERSIVE(與 SYSTEM_UI_FLAG_HIDE_NAVIGATION 結合使用時)將啓用新的沉浸式全屏模式。在啓用沉浸式全屏模式後,您的 Activity 將繼續接收全部觸摸事件。用戶能夠沿着系統狀態欄正常出現的區域向內滑動來顯示系統狀態欄。這將清除 SYSTEM_UI_FLAG_HIDE_NAVIGATION 標記(若是應用了 SYSTEM_UI_FLAG_FULLSCREEN 標記,也會清除該標記),所以系統狀態欄保持可見狀態。可是,若是您想要系統狀態欄在片刻後再次隱藏,能夠改用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 標記。函數

透明系統狀態欄

如今,您可使用新主題背景 Theme.Holo.NoActionBar.TranslucentDecor 和 Theme.Holo.Light.NoActionBar.TranslucentDecor 將系統狀態欄設置爲部分透明。經過啓用透明系統狀態欄,您的佈局將填充系統狀態欄後面的區域,所以,您也必須爲不該被系統狀態欄覆蓋的佈局部分啓用 fitsSystemWindows。

若是您要建立自定義主題背景,則將其中某個主題背景設置爲父主題背景,或在您的主題背景中添加 windowTranslucentNavigation 和 windowTranslucentStatus 樣式屬性。

從Android4.4開始,才能夠實現狀態欄着色,而且從5.0開始系統更加完善了這一功能。

Android 5.0(targetSdkVersion =21)

參考《Android 5.0 API

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。

Material Design 支持

Android 5.0 添加了對 Android 的新 Material Design 樣式的支持。您能夠建立具備 Material Design 功能的應用,實現動態視覺效果,利用其中的 UI 元素轉換賦予用戶天然的感受。此支持包括:

  • Material Design 主題
  • 視圖陰影
  • RecyclerView、卡片CardView、Toolbar、FloatingActionButton、TextInputLayout、Snackbar、AppBarLayout、TabLayout、NavigationView
  • 可繪製動畫和造型效果
  • Material Design 動畫和 Activity 轉換效果
  • 針對基於視圖狀態的視圖屬性的動畫生成器
  • 可自定義的 UI 小部件和具備可由您控制的調色板的應用欄
  • 基於 XML 矢量圖形的動畫和非動畫可繪製對象

通知

5.0加入了一種新的模式Notification的顯示等級。
1.普通Notification
建立Builder 對象,添加各類屬性,用PendingIntent 控制跳轉,最後是建立NotificationManager調用notify方法。
2.摺疊式Notification
用RemoteViews來建立自定義Notification視圖。
3.懸掛式Notification(5.0新增)
調用setFullScreenIntent來將Notification變爲懸掛式Notification。焦點不變,不會影響用戶操做,顯示幾秒會自動消失。

Android 6.0(targetSdkVersion =23)

參考《Android 6.0 API

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。

指紋身份驗證

此版本提供了一些新的 API,在受支持的設備上,用戶只需掃描其指紋便可完成身份驗證,這些 API 還可與 Android 密鑰庫系統結合使用。

通知

此版本移除了 Notification.setLatestEventInfo() 方法。請改用 Notification.Builder 類來構建通知。要重複更新通知,請重複使用 Notification.Builder 實例。調用 build() 方法可獲取更新後的 Notification 實例。

此版本針對通知功能引入了下列 API 變動:

  • 新增了 INTERRUPTION_FILTER_ALARMS 過濾級別,它對應於新增的「僅鬧鈴」免打擾模式。
  • 新增了 CATEGORY_REMINDER 類別值,用於區分用戶安排的提醒與其餘事件 (CATEGORY_EVENT) 和鬧鈴 (CATEGORY_ALARM)。
  • 新增了 Icon 類,您能夠經過 setSmallIcon()方法和 setLargeIcon()方法將其附加到通知上。同理,addAction() 方法如今接受 Icon 對象,而不接受可繪製資源 ID。
  • 新增了 getActiveNotifications() 方法,讓您的應用可以瞭解哪些通知目前處於活動狀態。要查看使用此功能的應用實現,請參閱 ActiveNotifications 示例。

運行時權限

此版本引入了一種新的權限模式,現在,用戶可直接在運行時管理應用權限。這種模式讓用戶可以更好地瞭解和控制權限,同時爲應用開發者精簡了安裝和自動更新過程。用戶可爲所安裝的各個應用分別授予或撤銷權限。

對於以 Android 6.0(API 級別 23)或更高版本爲目標平臺的應用,請務必在運行時檢查和請求權限。要肯定您的應用是否已被授予權限,請調用新增的 checkSelfPermission() 方法。要請求權限,請調用新增的 requestPermissions() 方法。即便您的應用並不以 Android 6.0(API 級別 23)爲目標平臺,您也應該在新權限模式下測試您的應用。

Android 7.0(targetSdkVersion =24)

參考《Android 7.0 開發者版本

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。

FileProvider【經常使用於調起系統相機拍照返回圖片路徑、調用系統文件管理器返回文件路徑】

傳遞軟件包網域外的 file:// URI 可能給接收器留下沒法訪問的路徑。所以,嘗試傳遞 file:// URI 會觸發 FileUriExposedException。分享私有文件內容的推薦方法是使用 FileProvider。

對於面向 Android 7.0 的應用,Android 框架執行的 StrictMode API 政策禁止在您的應用外部公開 file:// URI。若是一項包含文件 URI 的 intent 離開您的應用,則應用出現故障,並出現 FileUriExposedException 異常。

要在應用間共享文件,您應發送一項 content:// URI,並授予 URI 臨時訪問權限。進行此受權的最簡單方式是使用 FileProvider 類。

多窗口支持

在 Android 7.0 中,咱們爲該平臺引入了一個新的並且很是須要的多任務處理功能 — 多窗口支持。

如今,用戶能夠一次在屏幕上打開兩個應用。

通知加強功能

在 Android 7.0 中,咱們從新設計了通知,使其更易於使用而且速度更快。部分變動包括:

  • 模板更新:咱們正在更新通知模板,新強調了英雄形象和化身。開發者將可以充分利用新模板,只需進行少許的代碼調整。
  • 消息傳遞樣式自定義:您能夠自定義更多與您的使用 MessagingStyle 類的通知相關的用戶界面標籤。您能夠配置消息、會話標題和內容視圖。
  • 捆綁通知:系統能夠將消息組合在一塊兒(例如,按消息主題)並顯示組。用戶能夠適當地進行拒絕或歸檔等操做。若是您已實現 Android Wear 的通知,那麼您已經很熟悉此模式。
  • 直接回復:對於實時通訊應用,Android 系統支持內聯回覆,以便用戶能夠直接在通知界面中快速回復短信。
  • 自定義視圖:兩個新的 API 讓您在通知中使用自定義視圖時能夠充分利用系統裝飾元素,如通知標題和操做。

多語言區域支持,更多語言

Android 7.0 如今容許用戶在設置中選擇多個語言區域,以更好地支持雙語用例。應用可使用新的 API 獲取用戶選擇的語言區域,而後爲多區域設置用戶提供更成熟的用戶體驗 — 如以多個語言顯示搜索結果,而且不會以用戶瞭解的語言翻譯網頁。

應用能夠經過調用 LocaleList.GetDefault() 獲取用戶設置的語言區域列表。爲支持擴展的語言區域數量,Android 7.0 正在改變其解析資源的方式。請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期運行。

Android 8.0(targetSdkVersion =26)

參考《Android 8.0 功能和 API

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。

自適應圖標(應用圖標適配)

Android 8.0 引入自適應啓動器圖標。自適應圖標支持視覺效果,可在不一樣設備型號上顯示爲各類不一樣的形狀。

最大屏幕縱橫比(爲了全面屏適配)

以 Android 7.1(API 級別 25)或更低版本爲目標平臺的應用默認的最大屏幕縱橫比爲 1.86。針對 Android 8.0 或更高版本的應用沒有默認的最大縱橫比。若是您的應用須要設置最大縱橫比,請使用定義您的操做組件的清單文件中的 maxAspectRatio 屬性。

權限

一、Android 8.0 引入了多個與電話有關的新權限:

  • ANSWER_PHONE_CALLS 容許您的應用經過編程方式接聽呼入電話。要在您的應用中處理呼入電話,您可使用 acceptRingingCall() 函數。
  • READ_PHONE_NUMBERS 權限容許您的應用讀取設備中存儲的電話號碼。

二、在 Android 8.0 以前,若是應用在運行時請求權限而且被授予該權限,系統會錯誤地將屬於同一權限組而且在清單中註冊的其餘權限也一塊兒授予應用。

對於針對 Android 8.0 的應用,此行爲已被糾正。系統只會授予應用明確請求的權限。然而,一旦用戶爲應用授予某個權限,則全部後續對該權限組中權限的請求都將被自動批准。

例如,假設某個應用在其清單中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。應用請求 READ_EXTERNAL_STORAGE,而且用戶授予了該權限。若是該應用針對的是 API 級別 24 或更低級別,系統還會同時授予 WRITE_EXTERNAL_STORAGE,由於該權限也屬於同一 STORAGE 權限組而且也在清單中註冊過。若是該應用針對的是 Android 8.0,則系統此時僅會授予 READ_EXTERNAL_STORAGE;不過,若是該應用後來又請求 WRITE_EXTERNAL_STORAGE,則系統會當即授予該權限,而不會提示用戶。

語言區域和國際化

Android 7.0(API 級別 24)引入能指定默認類別語言區域的概念,可是某些 API 在本應使用默認 DISPLAY 類別語言區域時,仍然使用不帶參數的通用 Locale.getDefault() 函數。如今,在 Android 8.0 中,如下函數使用 Locale.getDefault(Category.DISPLAY) 來代替 Locale.getDefault():

容許安裝未知來源應用

針對 8.0 的應用須要在 AndroidManifest.xml 中聲明 REQUEST_INSTALL_PACKAGES 權限,不然將沒法進行應用內升級。

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

通知

通知渠道:Android 8.0 引入了通知渠道,其容許您爲要顯示的每種通知類型建立用戶可自定義的渠道。用戶界面將通知渠道稱之爲通知類別。

Android 9.0(targetSdkVersion =28)

參考《Android 9 功能和 API

這裏簡單講一下主要API變動,具體的請閱讀上面的連接。

顯示屏缺口支持(劉海屏適配)

Android 9 支持最新的全面屏,其中包含爲攝像頭和揚聲器預留空間的屏幕缺口。 經過 DisplayCutout 類可肯定非功能區域的位置和形狀,這些區域不該顯示內容。 要肯定這些屏幕缺口區域是否存在及其位置,請使用 getDisplayCutout() 函數。

利用 Wi-Fi RTT 進行室內定位

Android 9 添加了對 IEEE 802.11mc Wi-Fi 協議(也稱爲 Wi-Fi Round-Trip-Time(RTT))的平臺支持,從而讓您的應用能夠利用室內定位功能。

Crypto provider去掉了

已知影響的主要是AES加密,網上的一些沒有添加對28版本號判斷的工具類都是不可行的。建議換成官網的。

參考資料:https://blog.csdn.net/drkcore/article/details/69931654

Http網絡請求

Google表示,爲保證用戶數據和設備的安全,針對下一代 Android 系統(Android P) 的應用程序,將要求默認使用加密鏈接,這意味着 Android P 將禁止 App 使用全部未加密的鏈接,所以運行 Android P 系統的安卓設備不管是接收或者發送流量,將來都不能明碼傳輸,須要使用下一代(Transport Layer Security)傳輸層安全協議,而 Android Nougat 和 Oreo 則不受影響。

在Android P系統的設備上,若是應用使用的是非加密的明文流量的http網絡請求,則會致使該應用沒法進行網絡請求,https則不會受影響,一樣地,若是應用嵌套了webview,webview也只能使用https請求。

有如下三種解決方案

  • APP改用https請求
  • targetSdkVersion 降到27如下
  • 在 res 下新增一個 xml 目錄,而後建立一個名爲:network_security_config.xml 文件(名字自定) ,內容以下,大概意思就是容許開啓http請求
<?xml version="1.0" encoding="utf-8"?>
<!-- 適配Android9.0 -->
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

而後在APP的AndroidManifest.xml文件下的application標籤增長如下屬性:

android:networkSecurityConfig="@xml/network_security_config"

參考資料:http://www.cnblogs.com/renhui/p/9921790.html

https://developer.android.google.cn/training/articles/security-config

通知

提高短信體驗

渠道設置、廣播和請勿打擾

多攝像頭支持和攝像頭更新

在運行 Android 9 的設備上,您能夠經過兩個或更多物理攝像頭來同時訪問多個視頻流。] 在配備雙前置攝像頭或雙後置攝像頭的設備上,您能夠建立只配備單攝像頭的設備所不可能實現的創新功能,例如無縫縮放、背景虛化和立體成像。 經過該 API,您還能夠調用邏輯或融合的攝像頭視頻流,該視頻流可在兩個或更多攝像頭之間自動切換。

動畫

Android 9 引入了 AnimatedImageDrawable 類,用於繪製和顯示 GIF 和 WebP 動畫圖像。 AnimatedImageDrawable 的工做方式與 AnimatedVectorDrawable 的類似之處在於,都是渲染線程驅動 AnimatedImageDrawable 的動畫。 渲染線程還使用工做線程進行解碼,所以,解碼不會干擾渲染線程的其餘操做。 這種實現機制容許您的應用在顯示動畫圖像時,無需管理其更新,也不會干擾應用界面線程上的其餘事件。

參考資料

Android 新特性(5.0、6.0、7.0、8.0)

Android O 適配詳細指南

相關文章
相關標籤/搜索