標籤:官方文檔 launcher locale collect 不同 文檔 views 集合排序 新功能
剛適配完Android7.0還沒多久,就看到Google官方推出的Android8.0(Android O)的開發人員預覽版新聞,我的心情你可以好好想想。對於上層應用開發人員的我來說,適配新版本的工作還好,而有JNI且有很多深層修改的人來說則是痛苦的。那麼這一次的大版本更新,最終何時定型發布?她都帶來了哪些新的限制與變化,對我們已有的應用有何影響?新增了什麼特性,能否利用起來增加新奇有趣的功能呢?
本文在整理官方的Preview文檔同時,運行部分範例程式碼,為各位一一展現。如果你英文還不錯,時間也充裕,文末有官方文檔連結,供你親自琢磨和體驗。
Android O完善計劃與發布時間
Google在2017年3月21日首次推送Android O開發人員預覽版,那接下來的更新和到Android O真正穩定,最終發布是在何時呢?借用官方文檔的時間軸圖:
從上能夠看出,此次發布的DP1(開發人員預覽版)的更新版本DP2在五到六月份之間,而DP1和DP2都主要面向開發人員,發現相容性問題,體驗反饋新特性,此時的系統鏡像自身還有很多穩定性問題,還不適合日常使用;
DP3、DP4已經到七月份,提供了最終的API和官方SDK,在此基礎上可以做完整的相容性測試和基於新特性開發新功能。最終的Android O版本發布則定在了第三季度。
根據以往的經驗,第三季度到年底才陸續有舊裝置的OTA升級,而到國內的新機發布和舊裝置的升級則持續到了第二年的三四月份。因此,從最後的發布時間看,現在是可以先鬆口氣。但是很多實際情況是很早的完成了Google親兒子手機的適配工作,而國內手機廠商又大肆修改,帶來其他很多不確定性。所以還是早做準備,心裡有數,畢竟早起的鳥兒有蟲吃。
新的限制與變化
Android新版本的限制與變化主要分成兩方面,一是影響所有app的,二是影響面向新版本app的(主要是targetSdkVersion指向新版本)。後者的適配還好,一般的應用不會非常快的修改targetSdkVersion;而前者是實實在在的需要立即著手跟進的。
影響所有應用的:
1.後台限制
(1)後台運行限制
(2)後台位置擷取限制
在Android O系統上,後台啟動並執行應用,不再能頻繁的收到位置更新的資訊;但具體更新頻次減少到多少,還需要最重版發布後測試確定
2.安全相關的變化
(1)平台不再支援SSLv3
(2)HttpsURLConnection在HTTPS連結建立時,不再自動切換到早期TLS協議版本重試
(3)應用的WebView執行個體,將運行在獨立的進程中
3.隱私權原則變化
(1)ANDROID_ID 不再是裝置中所有應用共用的,而是每個應用擷取到的都不一樣,而且以包名和簽名作為區分;卸載後重新安裝也不會發生變化;但是手機恢復出廠預設值後,應該和上一次的不再一致
(2)擷取系統屬性net.hostname,將得到null
4.應用捷徑變化
以com.android.launcher.action.INSTALL_SHORTCUT廣播方式建立捷徑不再有效,而要使用 ShortcutManager的 requestPinShortcut()方法。
5.Alert Window顯示變化
在聲明SYSTEM_ALERT_WINDOW 許可權後,選擇使用TYPE_SYSTEM_ALERT等來使彈窗顯示在其他應用之上;在Android O系統上都將顯示在TYPE_APPLICATION_OVERLAY類型的視窗之下。而targetSdkVersion為android O的應用直接使用TYPE_APPLICATION_OVERLAY顯示Alter Window。這樣你的彈框可能還是在別人的彈窗之下。
6.其他
(1)藍芽:ScanRecord.getBytes()方法變化
(2)鍵盤導航:使應用支援實體鍵盤導航(以前就有,只是重新提一下)
(3)網路連接及HTTPS相關:在connect失敗之後,調用send(DatagramPacket)會拋出SocketException,以及其他一些細節的變化
(4)當集合為空白時,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 將拋出 NullPointerException
(5)本地化與國際化:如Currency.getDisplayName()等方法預設調用 Locale.getDefault(Category.DISPLAY),預設時區的解析等
(6)連絡人統計資料:不再提供連絡人郵件或電話準確的聯絡過的次數資訊,而是僅提供近似值
影響面向android O應用的:
1.後台限制
(1)startService() 將拋出 IllegalStateException
(2)限制在AndroidManifest.xml中註冊接收隱式廣播,如ACTION_PACKAGE_REPLACED ,但也有些例外如ACTION_BOOT_COMPLETED,ACTION_LOCALE_CHANGED(所有例外參考文末串連)。(注意此部分限制都是只針對targetSdkVersion為android O,或者編譯的SDK為android O及以上的的,低於的則不受影響)
2.隱私相關變化
(1)擷取系統屬性net.dns1、net.dns2、net.dns3 和 net.dns4不再可用
(2)不再支援 Build.SERIAL,而改為 Build.getSerial()
3.本地庫變化
在Android O上強制要求Segment不能同時具備寫和可執行,如資料區段不可執行,程式碼片段不可寫。
4.ContentProvider的變更通知
調用 ContentResolver.notifyChange()和registerContentObserver(Uri, boolean, ContentObserver) 實現通知和監聽某些Uri上的變化,在Android O上則要求uri對應的ContentProvider要正確定義,但是沒有定義會有怎樣的問題並沒有提及
5.其他
Alter Window的顯示,集合排序方法的變化和擷取使用者帳號許可權變化等。
新的特性
在寫本文時,Google官方已推出部分中文文檔(應該很快會全部更新),鑒於此,本處僅展示下有趣且具有範例程式碼的多頻道(Channel)的通知、畫中畫和自動填滿架構
1.多頻道通知
我的理解是將應用發出的通知進行細化,劃分成不同的類別,就像電視的一個個頻道,可以針對頻道進行操作。如使用者可以屏蔽某個頻道的通知,而不是這個應用的所有通知訊息;開發人員可以針對頻道設定通知的震動、聲音等。
通知顯示和原來沒有大的區別,如所示:
在設定中可以看到針對某個頻道通知進行控制
2.畫中畫(Picture In Picture)
Activity的顯示多了一種方式,只要在AndroidManifest.xml中設定android:supportsPictureInPicture為true即可,實現如顯示效果:
注意,處在畫中畫模式中的Activity會回調onPause方法,因此像播放視頻類的應用,不要在onPause中停止播放,而是在onStop方法中停止。
3.自動填滿架構(AutofillFramework)
簡單分為提供自動填滿服務的應用和使用自動填滿功能的應用。前者通過繼承AutoFillService解析介面上的view結構提供自動填滿和儲存資料的能力,後者在標準View上不做修改就能使用此服務,而自訂View還得做些處理才行。可是提供自動填滿服務的應用需要取得信任,還要做很多額外的事情,後續推廣不知能否推開。
本來修改了測試Demo可以在通知欄Demo中使用自動填滿的功能,結果系統不穩定,已經無法在任何頁面顯示自動填滿的彈窗,而且還出現幾次死機,因此沒有。
如何體驗到Android O
把手中的裝置刷到Android O的操作步驟很簡單,首先尋找手上的裝置是否有支援Android O預覽版的機型
Nexus 5X
Nexus 6P
Nexus Player
Pixel C
Pixel
Pixel XL
我使用的是Nexus 6P,具體步驟如下:官網連結
1.下載到對應ZIP包
解壓,目錄中包含了flash-all.sh
2.USB串連手機
確保可調用adb命令,即在環境變數中設定好adb命令的路徑
3.進入fastboot模式
adb reboot bootloader
(沒有採用按鍵方式進入)
4.解鎖bootloader
嘗試使用fastboot flashing unlock或者fastboot oem unlock,本人手機已經解鎖過,因此沒有使用
5.刷入新系統
在終端命令列切到剛才解壓ZIP檔案後的目錄,即在flash-all.sh目錄;執行flash-all.sh(windows可使用flash-all.bat)。執行完畢之後即可進入Android O
6.鎖定bootloader
執行fastboot flashing lock或者fastboot oem lock,本人沒有執行
最後再次提醒,請以最後發布的官方文檔為準。而且此版本僅供開發人員體驗和測試反饋,不適合日常使用,避免不必要的麻煩。
轉載請註明出處:http://blog.csdn.net/w7849516230,歡迎關注公眾號“編程陽光”
1.Android O Preview官方說明
2.可以註冊的隱式廣播
值得你關注的Android8.0(Android O)上的重要變化