讓您的應用相容 Android Oreo

來源:互聯網
上載者:User

標籤:系統   target   不同   支援   載入   監視   操作   spec   運行   

   不知不覺Android Oreo已經發布幾個月時間了,你的應用開始使用最新平台了嗎?在應用遷移過程中是否遇到了一些棘手問題?你的Android應用相容Oreo如何呢?

    我們應該都知道,每一次重大升級,在相容性這一塊總會出現或多或少的問題,今天就來一起探討應用的相容性。

    不知道大家是否還記得,從Andriod 7.0更新後相容性測試資料結果得知,Top1000主流應用中不相容應用數量達到166個,導致總體相容率僅為83%,相比之前Andriod 6.0 的更新所導致的應用不相容問題更加突出。

    對於本次Andriod 8.0升級之後的相容性,各大應用廠商也非常關注。從本次Google 開發人員大會上也能看出Google的用心,專門做了一個《讓您的應用相容 Android Oreo》的主題分享,這裡也簡單整理出來分享給大家,希望對大家將應用遷移到Andriod 8.0 時有一些協助。

    作為開發人員,我們的應用應該保持與最新的Android版本相容性,主要從兩個方面來分享:Android 應用相容的一些最佳實務經驗和Android Oreo 中的一些改變地方。

    在3月中旬發布第一個Android Oreo 預覽版本的時候,發現中國的應用只有60%相容,後來投入了很大的資源,也做了很多工作。

    在8月25日正式發布後,中國Top1000主流應用中有993個相容,目前在中國應用相容比率達到96%。

    1.非公開的API

    有一些經驗就是不要在開發中使用一些非公開的API,因為那些非公開的API在後期更新中可能隨時會去改變函數簽名或函數列表,甚至可能會被刪除掉或改變它的行為。

    如果有強烈願望想要使用可以告知Google,會盡量搜集並提供一些公開的API提供給開發人員,比如在Android Oreo 中開放了InMemoryDexClassLoader直接從記憶體裡面載入dex,不要直接調用DexClassLoader,否則會對產生的檔案造成一定影響。

    2.dex / so檔案

    不要直接操作或篡改dex / so檔案,最好使用Android Studio 或其他編譯工具直接產生的dex / so檔案。在apk方面也添加了更多的檢查,動態連接器再向使用者申請許可權的時候,如可寫入權限和可執行許可權,如果修改了so檔案就可能會出錯。

    3.升級第三方SDK

    在很多應用中有一些比較常見的第三方SDK,其中一些加固和熱修複架構用了很多dex操作和私人API,這會導致當新的Android版本出現的時候,使用了這些SDK的應用會崩潰。

    所以需要經常去看這些SDK是否更新,基本都會和這些SDK供應商有緊密的合作,當升級後就會盡量更新到最新版本。

    4.Janus漏洞

    從Android 5.0版本以後,如果應用僅僅採用SDK安卓的jarsigner簽名機制,就會有一個Janus漏洞,該漏洞會利用ART來執行一個附加在APK之前的一個惡意dex檔案。

    目前已在12月發布的版本中修複,使用者可以更新補丁,建議開發人員使用V1+V2簽名機制。

    5.隱私

    為了使用者的安全性和隱私性,Settings.secure.ANDROID_ID將根據簽名密鑰和使用者設定檔,每次為每個應用返回不同的值,也就是說一個應用不可能會知道其他應用的ANDROID_ID,對一些廣告應用查詢ID後可以被使用者重設。

    查詢net.hostname系統屬性會返回空值,如果需要訪問使用者帳號的話,GET_ACCOUNTS許可權不再充分,需要使用AccountChooserActivity來彈出一個選擇框來讓使用者進行選擇。

    6.警報

    對於警報方面,設計了一個新的浮動層,在所有應用之上,但是會在系統和關鍵視窗之下。如果在Android Oreo 中繼續使用SYSTEM_OVERLAY,會自動替換為APPLICATION_OVERLAY。在Android Oreo 中設定使用TYPE_APPLICATION_OVERLAY更加直觀,使用者也可以更加方便來進行管理行為和設定。

    7.通知

    在Android Oreo 中對於所有通知都必須使用通知渠道。

    8.多應用視窗顯示

    多視窗顯示也是Android Oreo 中的一個新特性,可以用一個FLAG_ACTIVITY_LAUNCH_ADJACENT來告訴系統需要使用多視窗。當然需要注意的是,只有在活躍的螢幕裡面的Activity才會認為是Activity Task,而不要假設暫停Activity。多視窗模式的切換與轉屏事件是相同的,標準UI模組在這方面應該沒什麼問題,如果不能支援多視窗可以通過android:resizeableActivity="fasle" 來設定。

    9.特長螢幕支援

    Android Oreo 也支援特長螢幕,目前很多廠商都在發布特長螢幕的手機,對於很多應用來說對螢幕縱橫比有一個錯誤的假設,否則會有上下黑色邊框,或UI模組和觸摸點沒有對齊,或一些角落UI會被遮擋等。

    如果情境不適合特長螢幕,需要應用通過以下方式設定最大縱橫比:API 25或以下使用android:max_aspect meta data,API 26或以上使用android:MaxAspectRatio。

    接下來著重介紹一下後台檢查和位置限制,首先並不是為了給開發人員添麻煩,而是為了安卓使用者獲得更好的系統健康和電池效能的體驗,並且開發人員可以開發出使用者需要的功能。總而言之,一共有三個方面:

    1.後台沒辦法再啟動服務了,前台啟動服務仍然是沒有問題的;

    2.不支援在manifest中註冊的隱式廣播;

    對於這兩個主要是Target SDK為Android Oreo 才會受影響,但是不幸的是使用者現在就可以對應用啟用此限制。

    3.後台應用會得到更嚴格的限制來擷取位置。是所有運行在Android Oreo 上的應用都會受到影響,需要立刻解決這方面的問題。

    1.服務

    最重要的原則就是使用者可見。如果應用進行中耗費資源的工作時,使用者是應該知曉的,從後台啟動服務會失敗,會拋出一個IllegalStateException給啟動該Service的調用者。

    開發人員在調用startService時需要判定是否位於前台,注意IntentService也是一種後台服務,可以使用新加的一個類JobIntentService,可以在很多個地方使用來替換IntentService。大多數服務沒有長時間的互動,可以使用JobScheduler或者Firebase Cloud來工作,使得系統更有效來調度工作。

    2.廣播

    不能通過在manifest中聲明接收器來接收更多的隱式廣播,隱式廣播是指沒有明確的目標組件。如不能通過ACTION_PACKAGE_REPLACED來監視廣播,但是可以使用ACTION_MY_PACKAGE_REPLACED來監視顯示廣播。在很多使用廣播的情況下,可以使用JobScheduler來代替。

    3.位置資訊限制

    定位非常消耗電池,當有很多應用來定位的時候,電池會消耗的很快,會導致使用者體驗變差,甚至有些功能會失效,因此加入了一些後台定位的限制。如果應用在前台,其位置收集策略是不變的,如果用在後台就會受到一些限制。

    具體說來就是每小時只能接收到幾次位置資訊,而且位置資訊是基於整個裝置的,只要在Android Oreo 上運行都會受到限制。使用批處理會造成一定時間的延遲,但是可以獲得更多的資料位元置資訊點,也是一個不錯的選擇。

    Android Oreo 裡面做了一些最佳化,GPS很精確但是非常耗電,WIFI會好一點兒但還是比較耗電,最佳化的是當裝置保持串連在相同的靜態WIFI存取點就表示使用者沒有從原來的位置移動太多,系統就不會進行新的位置計算。

    另外還可以更好的檢測在不同的WIFI之間切換,如在家和工作的時候使用安卓裝置,只有在切換WIFI的時候才會更新位置,平時待在家和待在工作地方的時間段裡就不會更新位置資訊。

    同樣的策略對地理柵欄也做了類似的修改,目前關於地理柵欄的資訊會從幾十秒增加到2分鐘左右,其功耗只有十分之一。

    在Android Oreo 裡面不可以使用PengdingIntent.getService()來擷取後台更新,雖然可以繼續使用,但其只在前台工作。而應該使用PengdingIntent.getBroadcast(),同時在manifest中定義一個接收器,定義為顯示廣播。

    4.位置資訊策略

    如果需要在後台密集的收集位置資訊應該怎麼辦?這裡有一些辦法,可以定義一些地理柵欄功能,在地理柵欄發生變化時可以獲得確切位置,可以通過這些位置資訊來知道將來如何使用Firebase Cloud來進行更新。然後使用批處理來收集更多的資料點一起返回,雖然每小時只會接收幾次資訊,但是可以擷取更多的資料,對於很多程式來說足夠了,只是不能提供即時性的位置資料。可以使用setInterval來設定更新時間,使用setMaxWaitTime來設定批處理的最大時間間隔,使用setFastestInterval來設定被動擷取位置資訊。

    以上就是本次主題分享的大致內容,除了以上這些在開發和遷移中,還會遇見一些其他相容性問題,會在下一篇分享中整理出來。如果你在遷移應用到Android Oreo 中也遇見了一些問題,也歡迎留言一起來探討。

    此文章著作權為公眾號分享達人秀(ShareExpert)——鑫鱻所有,若需轉載請聯絡作者授權,特此聲明!

讓您的應用相容 Android Oreo

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.