版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html
瞭解新版本的特性仍是頗有必要的,爲何這麼講呢?由於能夠從應用市場對發佈應用的目標API版本(targetSdkVersion值)的要求提及:android
自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
而將targetSdkVersion的值修改爲高版本,那麼就表明在這個版本上的手機設備上已經進行了適配,好比Android8.0(API 26),那麼就要考慮到適配應用圖標的問題、還有通知欄適配等等。編程
數據來源:https://developer.android.google.cn/about/dashboards/?hl=zh-cn安全
參考《Android 4.4 API》網絡
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。app
您的應用在 Android 4.4 上運行時沒法讀取外部存儲空間上的共享文件,除非您的應用具備 READ_EXTERNAL_STORAGE 權限。也就是說,沒有此權限,您沒法再訪問 getExternalStoragePublicDirectory() 返回的目錄中的文件。可是,若是您僅須要訪問 getExternalFilesDir() 提供的您的應用特有目錄,那麼,您不須要 READ_EXTERNAL_STORAGE 權限。框架
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 API》
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。
Android 5.0 添加了對 Android 的新 Material Design 樣式的支持。您能夠建立具備 Material Design 功能的應用,實現動態視覺效果,利用其中的 UI 元素轉換賦予用戶天然的感受。此支持包括:
參考《Android 6.0 API》
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。
此版本移除了 Notification.setLatestEventInfo() 方法。請改用 Notification.Builder 類來構建通知。要重複更新通知,請重複使用 Notification.Builder 實例。調用 build() 方法可獲取更新後的 Notification 實例。
此版本針對通知功能引入了下列 API 變動:
此版本引入了一種新的權限模式,現在,用戶可直接在運行時管理應用權限。這種模式讓用戶可以更好地瞭解和控制權限,同時爲應用開發者精簡了安裝和自動更新過程。用戶可爲所安裝的各個應用分別授予或撤銷權限。
對於以 Android 6.0(API 級別 23)或更高版本爲目標平臺的應用,請務必在運行時檢查和請求權限。要肯定您的應用是否已被授予權限,請調用新增的 checkSelfPermission() 方法。要請求權限,請調用新增的 requestPermissions() 方法。即便您的應用並不以 Android 6.0(API 級別 23)爲目標平臺,您也應該在新權限模式下測試您的應用。
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。
傳遞軟件包網域外的 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 中,咱們從新設計了通知,使其更易於使用而且速度更快。部分變動包括:
Android 7.0 如今容許用戶在設置中選擇多個語言區域,以更好地支持雙語用例。應用可使用新的 API 獲取用戶選擇的語言區域,而後爲多區域設置用戶提供更成熟的用戶體驗 — 如以多個語言顯示搜索結果,而且不會以用戶瞭解的語言翻譯網頁。
應用能夠經過調用 LocaleList.GetDefault() 獲取用戶設置的語言區域列表。爲支持擴展的語言區域數量,Android 7.0 正在改變其解析資源的方式。請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期運行。
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。
Android 8.0 引入自適應啓動器圖標。自適應圖標支持視覺效果,可在不一樣設備型號上顯示爲各類不一樣的形狀。
以 Android 7.1(API 級別 25)或更低版本爲目標平臺的應用默認的最大屏幕縱橫比爲 1.86。針對 Android 8.0 或更高版本的應用沒有默認的最大縱橫比。若是您的應用須要設置最大縱橫比,請使用定義您的操做組件的清單文件中的 maxAspectRatio 屬性。
一、Android 8.0 引入了多個與電話有關的新權限:
二、在 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 引入了通知渠道,其容許您爲要顯示的每種通知類型建立用戶可自定義的渠道。用戶界面將通知渠道稱之爲通知類別。
這裏簡單講一下主要API變動,具體的請閱讀上面的連接。
Android 9 支持最新的全面屏,其中包含爲攝像頭和揚聲器預留空間的屏幕缺口。 經過 DisplayCutout 類可肯定非功能區域的位置和形狀,這些區域不該顯示內容。 要肯定這些屏幕缺口區域是否存在及其位置,請使用 getDisplayCutout() 函數。
Android 9 添加了對 IEEE 802.11mc Wi-Fi 協議(也稱爲 Wi-Fi Round-Trip-Time(RTT))的平臺支持,從而讓您的應用能夠利用室內定位功能。
已知影響的主要是AES加密,網上的一些沒有添加對28版本號判斷的工具類都是不可行的。建議換成官網的。
參考資料:https://blog.csdn.net/drkcore/article/details/69931654
Google表示,爲保證用戶數據和設備的安全,針對下一代 Android 系統(Android P) 的應用程序,將要求默認使用加密鏈接,這意味着 Android P 將禁止 App 使用全部未加密的鏈接,所以運行 Android P 系統的安卓設備不管是接收或者發送流量,將來都不能明碼傳輸,須要使用下一代(Transport Layer Security)傳輸層安全協議,而 Android Nougat 和 Oreo 則不受影響。
在Android P系統的設備上,若是應用使用的是非加密的明文流量的http網絡請求,則會致使該應用沒法進行網絡請求,https則不會受影響,一樣地,若是應用嵌套了webview,webview也只能使用https請求。
有如下三種解決方案
<?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 的動畫。 渲染線程還使用工做線程進行解碼,所以,解碼不會干擾渲染線程的其餘操做。 這種實現機制容許您的應用在顯示動畫圖像時,無需管理其更新,也不會干擾應用界面線程上的其餘事件。