android6.0、7.0、8.0新特性總結之開發應用時加以考慮的一些主要變更。


android6.0

參考一:簡書Android 6.0 新特性詳解

參考二:關於Android6.0以上系統的權限問題

參考三:值得你關注的Android6.0上的重要變化(一)

參考四:值得你關注的Android6.0上的重要變化(二)

參考五:Android從1.0到 6.0各版本的差別

參考六:Android歷史版本 版本號對照 版本分布(截止到2017.11)

參考七:Android發展史(Android各版本特性-技術篇)(至android6.0) 

參考八: 了解Android已發布的各種版本(即1.0、2.0、3.0、4.0、5.0、6.0、7.0、8.0)

參考九:Android中判斷當前API的版本號

參考十:關於Android6.0權限適配的問題

參考十一:Android 6.0權限機制及開發流程詳解

參考十二:Android6.0動態權限申請步驟以及需要注意的一些坑

參考十三:徹底解決Android6.0權限管理問題


 

android7.0 

參考一:android 7.0新特性

參考二:Android7.0新特性,及Android N適配

參考三:Android7.0適配教程與心得

參考四:Android7.0適配(含實例)

參考五: Android 7.0 之拍照與圖片裁剪適配

參考六:Android 7.0的適配問題,android.os.FileUriExposedException

參考七:項目android 6.0,7.0 版本適配問題

參考八:android app版本升級(DownloadManager、適配6.0、7.0)

參考九:Android N(Android 7.0)版本適配(開發者應該知道的一切新特性與新功能)

參考十:Android7.0新特性介紹(一)——多窗口支持

參考十一: Android7.0新特性介紹(二)——通知增強功能

參考十二:android7.0對開發有影響的變動

參考十三:Android7.0適配教程,心得

參考十四:Android 7.0

參考十五:Android 7.0 新特性詳解


 android8.0

參考一:開發者必看|Android 8.0 新特性及開發指南

參考二:安卓8.0和7.0有什么區別 8.0系統新功能盤點

參考三:Android 8.0有什么新功能?看看這個就夠了

參考四: Android O (8.0) 新特性介紹

參考五:Android 8.0新特性(看這篇文章就夠了)

參考六:Android 8.0 新特性有哪些?

參考七: Android8.0運行時權限策略變化和適配方案

參考八:值得你關注的Android8.0(Android O)上的重要變化

參考九:Android 8.0 功能和 API

參考十:公司項目Android8.0適配分析

參考十一:Android 8.0 功能和 API(developer.android.google.cn)



 

自己總結 

android6.0新特性:

1-android6.0對應api級別為23;

2-android6.0版本引入了一種新的權限模式---運行時權限。

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

3-android6.0版本引入了針對空閑設備和應用的最新節能優化技術---休眠和應用待機模式(Doze and App Standby)

這些功能會影響所有應用,因此請務必在這些新模式下測試您的應用。

休眠模式(Doze):如果用戶拔下設備的電源插頭,並在屏幕關閉后的一段時間內使其保持不活動狀態,設備會進入低電耗模式,在該模式下設備會嘗試讓系統保持休眠狀態。在該模式下,設備會定期短時間恢復正常工作,以便進行應用同步,還可讓系統執行任何掛起的操作。

應用待機模式(App Standby):應用待機模式允許系統判定應用在用戶未主動使用它時處於空閑狀態。當用戶有一段時間未觸摸應用時,系統便會作出此判定。如果拔下了設備電源插頭,系統會為其視為空閑的應用停用網絡訪問以及暫停同步和作業。
要詳細了解這些節能變更,請參閱對低電耗模式和應用待機模式進行針對性優化

4-BoringSSL
Android正在將OpenSSL庫替換為BoringSSL庫。這將影響你的應用在NDK中所鏈接的加密庫,比如libcrypto.so和libssl.so,它們不是NDK API的一部分。這些庫不是公開的API,因此在不同版本和設備上的變化也不會及時通知開發者。而且,這也將暴露你應用的安全缺陷。因此,需要修改你的native代碼,通過JNI的方式調用Java的加密API或者靜態鏈接你選擇的加密庫。

5-文本選擇(Text Selection)
用戶在應用中選擇文字后,你現在可以顯示一個浮動工具欄(floating toolbar),展示並進行剪切、拷貝、粘貼操作,交互過程的實現和contextual action bar的實現一樣( Enabling the contextual action mode for individual views)。

6-USB連接(USB Connection)
android6.0版本,通過UAB端口連接設備,默認采用僅充電模式。通過USB連接設備並獲取內容,必須明確的經過用戶授權這種交互權限。如果你的應用支持通過USB端口的交互,要考慮到這種交互必須被明確的啟用。

7-Android 密鑰庫變更

android6.0版本開始,Android 密鑰庫提供程序不再支持 DSA。但仍支持 ECDSA。

停用或重置安全鎖定屏幕時(例如,由用戶或設備管理員執行此類操作時),系統將不再刪除需要閑時加密的密鑰,但在上述事件期間會刪除需要閑時加密的密鑰。

8-WLAN 和網絡連接變更。

9-相機服務變更

android6.0中,相機服務中共享資源的訪問模式已從之前的“先到先得”訪問模式更改為高優先級進程優先的訪問模式。

(1)客戶端應用進程基於優先級的方式訪問相機子系統,包括打開和配置設備相機。用戶可見的應用進程通常被賦予高優先級,使得相機資源的獲取和使用更可靠。
(2)高優先級的應用能夠“驅逐”低優先級應用,而使用相機(譯注:高優先級應用能以搶占方式使用相機)
(3)在有合適的相機的硬件上,多個應用進程可以同時且獨立地使用相機設備。但是,多進程同時訪問的情況下,會導致相機設備的性能顯著降低,而現在相機服務會檢測並不允許此種情況發生。這種變化導致低優先級的應用被“驅逐”,直到沒有其它應用直接訪問同一個相機設備。
(4)改變當前使用者(譯注:多用戶情況下的用戶切換)后,引起之前使用者所擁有的應用無法再使用相機。訪問相機被限制在設備的當前使用者上。實際上,這意味着一個“guest”用戶賬戶在切換到其它用戶賬戶時,不能再保留一個運行的進程訪問相機服務。

10-APK 驗證

該平台現在執行的 APK 驗證更為嚴格。如果在清單中聲明的文件在 APK 中並不存在,該 APK 將被視為已損壞。移除任何內容后必須重新簽署 APK。

11-鎖屏下語音搜索

用戶可以直接在鎖屏狀態下進行語音搜索,雖然現在的一些安卓手機支持語音喚醒功能,但這些語音喚醒都是第三方廠商開發的,而此次的Android 6.0在系統層面加入鎖屏下語音搜索,這無疑會在體驗上有一個明顯的提升。

12-指紋識別

說到指紋識別,很多用戶都會覺得現在的中高端安卓手機都支持,但事實上這些安卓手機的指紋識別都是各個廠商自行開發的並沒有系統底層的支持。Android 6.0則在系統層面加入指紋識別,能提供原生指紋識別API,這不但降低了廠商開發指紋識別模塊的成本,最重要的是原生指紋識別將會大大提升安卓手機的指紋識別支付安全性。

13-Now on Tap功能

Now on Tap功能是和Google搜索緊密結合的功能,它可以讓谷歌從任何應用中進行搜索。例如,在微信中聊天的時候提到餐館,那么就可以在不跳轉的情況下進行谷歌搜索。

14-App Links

通過App Links功能,Android平台能夠向網絡服務器提出申請,自主識別鏈接內容。直接跳轉到App客戶端中,改善用戶體驗,有利於讓用戶在體驗更完善的App客戶端完成更多操作。

此外,在Android 6.0谷歌還加入了Android Pay進一步強化移動支付,同時也是為了對抗Apple Pay。在發布會上谷歌表示Android 6.0將在下周開始推送,Nexus5/6/7/9以及Nexus Player將能夠在第一時間得到升級。

15-很有必要說明的(筆者覺得和應用開發密切相關的)共兩處,第一Android 2.3,,第二處是6.0 以后的版本了。

首先,Android2.3 與之前的系統有很大改進,具體是,增加nfc 支持,增加sip支持(在沒增加這些之前,android開發者要開發nfc或者sip的相關應用的難度和增加之后完全不同,Android2.3 后寫nfc 或sip相關程序比之前要容易得多 ),第二個改進是把輸入法的框架改了(主要是將之前的java實現變為c實現),結果是2.3以后輸入法的輸入效率更高了。 

至於6.0以后系統,第一開發工具只能用,谷歌官方的Android Studio 了。值得一提的是,從Android 4.4 開始,Android app 運行方式從原來的Dalvik 模式增加了一種可選模式 ART模式(全稱是Android Runtime模式)。這種模式使得Android運行app的速度變快了(后面也有博客特別介紹)。還有就是從Android 5.0開始使用linux 3.0內核。這里就是多核處理器優化基礎(因為linux內核中對於多核處理器進行了負載均衡處理)。

android6.0開發注意事項:

1-運行時權限檢查(Runtime Permisssions)

作為開發者,當你的app的目標版本(target)為Android6.0(API 23)或更高時。

請確保在運行時進行權限的檢查和請求。其中,

(1)新的方法checkSelfPermission()可以用來判斷你的應用是否被授予了權限

(2)而requestPermissions()可請求權限。

即使你app的目標版本在android6.0以下,也應該在新的權限管理模型下測試你的應用。讓你的應用支持新的權限管理模型,以及獲得更多的官方提示,可查看Working with System Permissionss(https://developer.android.com/training/permissions/index.html)和 Permissions Best Practices(https://developer.android.com/training/permissions/best-practices.html#testing)

2-Android6.0版本移除了對Appache的HTTP Client(Apache HTTP Client Removal)

如果您的應用使用該客戶端,並以 Android 2.3(API 級別 9)或更高版本為目標平台,

(1)請改用 HttpURLConnection 類,此 API 效率更高,因為它可以通過透明壓縮和響應緩存減少網絡使用,並可最大限度降低耗電量。

(2)如果要繼續使用 Apache HTTP API,您必須先在 build.gradle 文件中聲明以下編譯時依賴項:

android {  

    useLibrary 'org.apache.http.legacy'  

}  

3-獲取硬件標識符(Access to Hardware Identifier)

android6.0中,為了更好的保護用戶的數據,

(1)Android移除了從代碼中通過Wi-Fi和藍牙的API訪問設備本地網絡標識符。因此WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()將始終返回02:00:00:00:00:00

(2)而為了能夠通過Wi-Fi和藍牙掃描時,獲取周邊設備的硬件標識符,應用必須具有ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION權限:
        WifiManager.getScanResults()
        BluetoothDevice.ACTION_FOUND
        BluetoothLeScanner.startScan()
注意:當運行Android6.0(API level 23)的設備啟動后台Wi-Fi或藍牙掃描時, 此操作對外部設備是可見的,且被顯示為一個隨機MAC的地址。

4-BoringSSL

Android 正在從使用 OpenSSL 庫轉向使用 BoringSSL 庫。
(1)如果您要在應用中使用 Android NDK,請勿鏈接到並非 NDK API 組成部分的加密庫,如 libcrypto.so 和 libssl.so。這些庫並非公共 API,可能會在不同版本和設備上毫無征兆地發生變化或出現故障。此外,您還可能讓自己暴露在安全漏洞的風險之下。
(2)如果要鏈接到並非 NDK API 組成部分的加密庫請改為修改原生代碼(native),以通過 JNI 調用 Java 加密 API,或靜態鏈接到您選擇的加密庫。

5-通知(Notifications)

(1)移除了Notification.setLatestEventInfo()方法

(2)用Notification.Builder類來構造通知,在需要反復更新通知的情況下,保存並重用Notification.Builder的實例;在獲取更新后的Notification實例時,調用其build()方法。
(3)adb shell dumpsys notification命令不再輸出你的通知文本,而adb shell dumpsys notification --noredact命令將輸出一個notification對象的文本。

6-AudioManager Changes

  android6.0不再支持通過AudioManager類來直接對特定的音頻流設置音量和靜音,因此:
(1)setStreamSolo()方法過時(deprecated),替換調用requestAudioFocus()方法.
(2)setStreamMute()方法過時,替換調用為adjustStreamVolume()方法,傳入的值也變為ADJUST_MUTE 或 ADJUST_UNMUTE。

7-文本選擇(Text Selection)

用戶在應用中選擇文字后,你現在可以顯示一個浮動工具欄(floating toolbar),展示並進行剪切、拷貝、粘貼操作,交互過程的實現和contextual action bar的實現一樣( Enabling the contextual action mode for individual views)
實現選擇文字后的浮動工具欄,在app代碼中需要做如下修改:
(1)在View 或 Activity對象,ActionMode的調用從startActionMode(Callback) 變為 startActionMode(Callback, ActionMode.TYPE_FLOATING);
(2)替換原有的ActionMode.Callback為ActionMode.Callback2;
(3)重寫OnGetContentRect()方法,提供內容Rect對象(文本選擇的矩形框)在view中的位置;
(4)在矩形框作為唯一的元素不再有效時(矩形的定位不再有效),調用invalidateContentRect() 方法。
    如果你在使用Android Support Library revision 22.2,需要注意浮動工具欄不向后兼容且因為appcompat默認接管ActionMode對象,阻止了浮動工具欄被顯示。為了在AppCompatActivity中支持ActionMode,需要調用getDelegate()方法,之后對返回的AppCompatDelegate對象調用setHandleNativeActionModesEnabled()方法,並設置輸入參數為false,該調用將ActionMode對象的控制交還給系統框架層。在Android6.0(API level 23)的設備上,框架層支持ActionBar或浮動工具欄模式,在Android 5.1(API level 22)及以下的設備上,只支持ActionBar模式。

8-瀏覽器書簽變化(Browser Bookmark Changes)

android6.0移除了全局書簽的支持。

(1)android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark()方法被移除;

(2)同樣的READ_HISTORY_BOOKMARKS和WRITE_HISTORY_BOOKMARKS權限也被移除。

(3)如果你app的目標版本是android6.0或更高,請不要訪問全局的provider獲取書簽,而是應該在應用的內部保存書簽數據。

9-Wi-Fi和網絡變化(Wi-Fi and Networking Changes)
  android6.0在Wi-Fi和網絡API執行行為上有如下的變化
(1)現在,你的app只能修改你自己創建的WifiConfiguration對象的狀態,而不再允許修改或刪除由用戶或其它app創建的WifiConfiguration對象;
(2)之前,應用可以使用enableNetwork(),設置disableAllOthers=true,來使設備斷開其它網絡,如蜂窩網絡,而強制連接指定的Wi-fi網絡。在此版本上,設備將不會從其它網絡斷開連接。如果你的app的targetSdkVersion是20或者更低,將固定在選擇的Wi-Fi網絡。如果targetSdkVersion是21或者更高,使用multinetwork APIs (如openConnection(), bindSocket()和bindProcessToNetwork()方法)來保證網絡流量被發送到指定的網絡上。

10-企業Android的變化(Android for Work Changes)

  此版本Android for Work包括一下行為的變化:

  個人環境中的企業聯系人:當用戶查看過去的通話記錄時,Google撥號器的通話記錄顯示企業聯系人(work contacts)。設置setCrossProfileCallerIdDisabled()為true,在Google撥號器中隱藏企業聯系人的通話記錄。默認情況下,在設備上通過藍牙分享聯系人時,企業聯系人與個人聯系人一起顯示,除非設置setBluetoothContactSharingDisabled()為false。
  Wi-Fi配置移除:通過Profile Owner添加的Wi-Fi配置(例如,調用addNetwork()方法)在其對應的企業配置(work profile)被移除后刪除。
  Wi-Fi配置鎖定:當WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN值為非0時,用戶無法修改或刪除由啟用的設備擁有者(Device Owner)創建的任何Wi-Fi配置。用戶依然能夠創建或修改他們自己的Wi-Fi配置。啟用的設備擁有者擁有編輯或移除任何的Wi-Fi配置,即使這些配置不是它創建的。
  通過Google賬戶添加的下載企業策略控制器(Work Policy Controller):在管控環境之外,當需要進行管理的Google賬號要求通過企業策略控制器(WPC)app添加到設備時,新增賬號流程會提示給用戶去安裝合適的WPC。這一行為對通過設置>賬號和初始化設備時添加的賬號同樣起作用。
  DevicePolicyManager API的變化:
(1)調用setCameraDisabled()方法,僅影響當前調用相機的用戶;在managed profile中調用此方法並不影響primary user中使用相機的app運行。
(2)此外,setKeyguardDisabledFeatures()方法對配置擁有者(Profile Owner)和設備擁有者都可用。
(3)配置擁有者能夠設置如下的鎖屏限制:
      KEYGUARD_DISABLE_TRUST_AGENTS 和 KEYGUARD_DISABLE_FINGERPRINT, 影響配置父用戶(parent user)的鎖屏設置
      KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS, 僅影響在managed profile中應用產生的通知。
(4)createAndInitializeUser() 和 createUser()方法被廢棄(deprecated)
(5)當給定的應用在前台時,setScreenCaptureDisabled()方法阻塞輔助框架(assist structure)  
(6)EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM 默認為SHA-256. SHA-1 作為兼容性的備用,但未來將會被刪除。
(7)EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM 目前只接受SHA-256。
(8)存在與Android6.0(API level 23)的Device initializer APIs現在被移除。
(9)EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS被移除,因此,NFC觸碰配置不能在代碼上解鎖一個恢復出廠設置被保護的設備。
(10)現在可以使用EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE在managed device上通過NFC觸碰傳遞數據給device owner app
(11)Android for Work API在M的運行時權限上進行了優化,包括企業配置(Work profiles),輔助層(assist layer)等。新的DevicePolicyManager 權限API並不影響Android M之前的應用。
(12)當用戶在初始化設置流程中通過ACTION_PROVISION_MANAGED_PROFILE 或 ACTION_PROVISION_MANAGED_DEVICE intent退出同步部分,系統將會返回RESULT_CANCELED這一返回值。

11- 其它API的變化:
    數據流量統計(Data Usage):android.app.usage.NetworkUsageStats類被重命名為NetworkStats。

  全局設置變化:
    (1)這些配置不再能通過setGlobalSettings()來設置:
      BLUETOOTH_ON
      DEVELOPMENT_SETTINGS_ENABLED
      MODE_RINGER
      NETWORK_PREFERENCE
      WIFI_ON
    (2)這些配置現在能通過setGlobalSettings()來設置:

      WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM