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

周雲鋒_2018發表於2018-04-26

Android 6.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
複製程式碼

轉載 :野路子 https://www.cnblogs.com/JLZT1223/p/8108783.html,更多關於7.0和8.0的新特性以及使用,請複製連結,檢視,歡迎交流和指正!

相關文章