[譯] 如何優化您的 Android 應用(Go 版)

洞察力可幫助您建立適用於全球 Android 手機的應用程序

在去年的 Google I/O 大會上發佈了 Android(Go 版),其目標是爲全球入門級設備提供高質量的智能手機體驗。在今年早些時候,6 家原始設備製造商在移動世界大會上宣佈了他們的設備,而且更多的原始設備製造商將致力於構建新的 Android(Go 版)設備。咱們對這種勢頭感到很是激動,而且咱們鼓勵您從咱們的合做夥伴那裏購買您本身的 Android(Go 版)設備!html

咱們的 OEM 合做夥伴一直在努力將設備推向市場,而且咱們開始看到這些設備可供用戶使用。與此同時,我一直在與 Google Play 團隊合做,與 Android 社區開發人員合做,確保開發人員在適當的狀況下優化他們對這些設備的應用體驗。在這篇文章中,我將分享咱們的合做夥伴的工做,優化他們的 Android 應用和遊戲(Go 版)。前端

瞭解機會

正如咱們在 Google I/O 大會上討論的那樣,Android(Go 版)旨在改善入門級設備(內存 < 1GB 的設備)的體驗。世界各地的用戶一直在努力解決電池問題,設備缺少存儲,數據限制以及處理器速度差等問題,從而致使了他們對手機的更換和不滿。儘管 Google 已經完成了大量工做來優化咱們的應用,例如搜索助理地圖YouTube,但應用和遊戲開發人員確保他們的產品可以在這些設備上順利運行也很重要,以便用戶在入門級價位上享受優質體驗。android

咱們爲 Android(Go 版)概述的要求旨在幫助您爲入門級設備上的用戶提供出色的體驗。正如您所看到的,您應用的許多優化實際上將在全球全部設備上爲用戶帶來更好性能的更小應用程序。ios

要優化,仍是要開始嘗試?選擇您的應用策略

許多人會問本身的第一個問題是:「我應該優化現有的應用程序仍是建立一個新的應用程序?」雖然這個問題看似簡單,但答案可能會更復雜一些。它還取決於諸如您擁有多少開發資源等因素; 不管您是否能夠在應用中保留針對這些設備進行優化的功能,以及您但願爲全球最終用戶啓用的分發場景類型。git

有三種狀況能夠肯定:github

  • 一個應用程序的全部。 針對 Android(Go 版)設備和具備相同體驗的全部其餘設備使用相同的應用程序。在這種狀況下,您正在優化現有應用程序以便在這些設備上順利運行,而且您的現有用戶能夠從這些優化中得到性能優點。這個應用程序多是多進制的,但對於低 RAM 設備沒有特定的經驗。咱們強烈建議您使用新的 Android App Bundle 來體驗高達 65% 的體積節省,而無需重構代碼。web

  • 一個應用程序,不一樣的 APK。 針對 Android(Go 版)設備和其餘全部設備使用相同的應用,可是有不一樣的體驗。建立不一樣的 APK; 一個 APK 針對新的 android.hardware.ram.low 尺寸 vs APK(s)定位其餘全部設備。shell

  • 兩個應用。 建立一個新的 「lite」 應用程序並定位 Android(Go 版)設備。您能夠按原樣保留現有的應用程序。「lite」 應用程序仍然能夠定位全部區域設置中的全部設備,由於不須要此「精簡版」應用程序僅針對 Android(Go 版)設備。數據庫

每種方式都有優勢和缺點,最好根據您的特定業務來評估這些方案。express

優化您的應用提示

肯定應用策略後,在優化您的應用時須要考慮一些關鍵因素:

  1. 確保您的應用沒有 ANR 和崩潰
  2. 針對 Android Oreo
  3. 您安裝的應用程序要低於 40 MB,遊戲要低於 65 MB
  4. 應用程序的 PSS 要低於 50 MB,遊戲要低於 150 MB
  5. 將您的應用或遊戲的冷啓動時間保持在 5 秒如下

如今咱們來看一下這些性能指標,以現有 Android 開發人員爲例。

確保您的應用沒有 ANR 和崩潰

研究代表,ANR(應用程序無響應)錯誤和崩潰可能會對用戶保留形成重大負面影響,並可能致使高卸載率。購買 Android(Go版)手機的消費者會把它們做爲他們的第一款智能手機,他們會期待一種快樂,乾淨,高效的體驗,而不是讓手機死機。Google Play 控制檯中的 Android 重要功能可以讓您跟蹤 ANR 和崩潰狀況,並深刻了解影響特定用戶或設備類型的錯誤。該工具對於咱們許多開發人員來講是識別,分類和修復其應用程序中出現的問題所不可缺乏的。

「爲了下降崩潰率和減小 ANR,咱們使用了 Android 的重要功能和 Firebase 的 Crashlytics 進行主動監控,而且設法在大約 99.9% 的無崩潰會話和 ANR 率小於 0.1% 的狀況下運行,從而使咱們的崩潰比咱們早期的版本下降了 10 倍,「 Flipkart 用戶體驗與成長高級總監 Arindam Mukherjee 說。「爲了實現這一目標,咱們分階段推出了咱們的應用程序 - 監控崩潰和 ANR,普遍使用 Nullity Annotations 來計算運行靜態代碼分析工具時的 NullPointerException 問題。咱們還對啓用 ProGuard 的版本進行了測試,這有助於咱們在週期的早期捕獲與混淆相關的問題。「

在診斷 ANR 時有一些常見的模式用於查找:

  • 該應用程序在主線程上執行涉及 I/O 的耗時操做。
  • 該應用程序正在主線程上進行耗時操做
  • 主線程正在對另外一個進程執行同步綁定程序調用,而其餘進程須要很長時間才能返回。
  • 主線程被阻塞,等待正在另外一個線程上發生的耗時同步操做。
  • 主線程與另外一個線程處於死鎖狀態,不管是在您的進程中仍是經過聯編程序調用。主線程不是要等待很長時間才能完成操做,而是處於死鎖狀態。有關更多信息,請參見死鎖

請務必瞭解更多關於診斷和再現崩潰的信息,並查看 Flipkart 關於 Android 版優化的最新視頻(Go 版):

YouTube 視頻連接:https://youtu.be/4lHfTteF8tE?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c

目標 Android 奧利奧

Android Oreo(目標 API 26)包含許多資源優化措施,如後臺執行限制,這可確保進程在後臺正常運行,同時保持手機流暢。許多這些功能都是專門爲提升電池壽命和總體手機性能而設計的,而且確保使用這些設備的用戶對您的應用有很好的體驗。若是您的應用或遊戲仍未針對 API 26 或更高版本,我強烈建議您仔細閱讀 Google Play 的遷移指南。特別要密切關注後臺執行限制通知渠道。請記住已經宣佈安全更新:發佈到 Play 控制檯的新應用須要在 2018 年 8 月 1 日以前至少定位到 API 26(Android 8.0)或更高版本,而現有/已發佈應用的更新將須要在 2018 年 11 月 1 日以前完成。爲了符合這些要求,您須要儘快使用奧利奧。

保持安裝的大小很小

APK 大小和安裝率之間存在很是明顯的相關性:APK 大小越小,安裝量越高。使用 Android(Go 版)的人對磁盤大小很是敏感,由於這些手機一般存儲容量有限。這就是爲何 Play 商店會在搜索結果和 Play 商品詳情等特定狀況下展現應用尺寸超過應用評分的緣由之一。儘管 Android(Go 版)設備上的 Play 商店與全球全部設備上的用戶均可以使用的 Google Play 商店相同,但咱們正在自定義商店體驗,咱們認爲這對於這些設備上的用戶很是重要。

「咱們的 Android 團隊對使用網絡和設備資源有限的用戶會重點關注,」 Tinder 國際增加主管 AJ Cihla 說。「 更好的是,隨着 Android App Bundle 的推出,咱們可以以簡單,可持續的方式減小 20%,而且這樣作天然適合咱們的持續集成和流程部署。總而言之,咱們正在尋找適用於 Android Go 設備的 27MB APK; 這是咱們去年發佈的 90MB + 套件的一大飛躍。「

因爲這些設備的容量限制,最好將您的應用程序保持在 40MB 如下,並將遊戲保持在 65MB 如下。許多 Google Play 開發者認爲這是他們爲何決定優化其現有 APK 的關鍵緣由,或者是構建針對 Android(Go 版)設備的單獨 APK。如下是關於如何保持 APK 較小的一些建議:

  • **使用新的 Android App Bundle 去查看大小.**在今年的 Google I/O 上,咱們發佈了 Android App Bundle,這是來自 Google Play 的新發布格式。使用 Android App Bundle,您能夠構建一個工程,其中應用程序包含已編譯代碼,資源和本地庫。您再也不須要爲多個 APK 進行構建,簽名,上傳和管理版本代碼。這爲開發者節省了高達 65% 的應用程序大小,而且前期工做量相對較少。要了解更多信息,請查看 Android App Bundle

  • 用 WebP 文件替換 PNG/JPG 文件(若是有的話)。經過有損 WebP 壓縮,能夠生成幾乎相同的圖像,而且文件大小更小。對於矢量圖形,請使用 SVG。有關更多詳細信息,請查看 數十億的鏈接:優化圖像WebP 概述

  • 用 MP3 或 AAC 替換原始音頻格式(例如 WAV)以獲取全部音頻資源。任何音質的損失都不該該被大多數用戶感受到,而且仍然會以較少的資源提供高質量的回放/音頻聆聽體驗。

  • 確保使用的庫是最新的而且是必要的。考慮刪除重複庫並更新廢棄的庫。此外,若是可用,請使用移動端優化庫而不是服務器優化庫。要了解更多信息,請查看 ClassyShark

  • 保持 DEX 的合理性。dex 代碼可佔用 APK 中的重要空間。考慮進一步優化代碼以減少 APK 的大小。瞭解更多關於減小代碼的信息,並查看咱們的爲數十億用戶打造的產品指導方針中的相關細節。

AliExpress 知道保持他們的 APK 意味着良好的商業意識:請記住,APK 越小,安裝次數越多。」 爲了保持咱們的 Android Go APK 尺寸小,咱們首先將咱們的代碼分紅多個模塊,而後使用產品風格來定義特定的 Go 和常規版本,「 AliExpress 高級 Android 工程師 Donghua Xun 說。」 這使咱們可以選擇特定功能模塊(例如實時視頻),從咱們的 Go 版本中排除。而後,咱們使用 Gradle 腳本將這個 Go-edition APK 以及咱們的常規 APK 打包,全部這些都來自相同的代碼庫。咱們還使用尺寸更小的虛擬圖像覆蓋了第三方庫中的圖像。全部這些行爲致使 Android Go APK 大小減小 8.8MB,而普通 APK 大小爲 43MB。「

若是您有興趣瞭解更多關於如何爲用戶提供按需功能的信息(從而保持初始下載大小),請填寫咱們的興趣表單

保持您的記憶足跡

Android(Go 版)手機是設備上具備 <1GB RAM 的設備。該操做系統通過優化,可在低內存環境下高效運行,開發人員關注的焦點是確保其應用程序或遊戲通過優化以高效利用內存。在測試 APK 時,咱們看看 PSS(比例集大小),瞭解應用程序或遊戲在設備上冷啓動的內存量。PSS 的測量方式是您的應用的私有內存加上您的應用在設備上使用的共享內存的比例。

按照如下說明測試內存分配:

  1. 安裝應用程序並將設備鏈接到工做站/筆記本電腦後,啓動應用程序並等待到達歡迎屏幕(咱們建議等待 5 秒鐘以確保全部內容都已加載)

  2. 在終端中,運行命令 adb shell dumpsys meminfo <com.test.app> -d (Where <com.test.app>(其中 <com.test.app> 是被測試的應用程序的 pkg_id,例如 com.tinder)

  3. 在行 Total 中記錄 PssTotal 列的值(該值以 KB 報告 - > 經過除以 1000 轉換爲 MB)

  4. 重複步驟 2 和 3 屢次(至少 5 次)並平均 PssTotal(KB)值

LATAM 最大的購物應用程序 Mercado Libre 經過將精力集中在應用程序的體系結構上,可以解決內存分配和 APK 大小需求。」爲了縮小咱們 APK 的規模,咱們首先經過架構和密度實現了多 APK,而後經過 ProGuard 在外部庫中分離出任何額外的類或資源,「 Mercado Libre 的工程師 Nicolas Palermo 說。」 從那裏,咱們經過分析確認是否須要某些庫,並刪除那些咱們沒必要要的庫來關注咱們的代碼和資源。咱們全部的圖像都在可能的狀況下更改成 WebP,而且任何未轉換爲 WebP 的圖像都嚴格按照咱們所需的質量進行壓縮。最後,咱們使用 APK 分析器瞭解更多關於咱們的內存使用狀況,以確保咱們的 PSS 在可接受的範圍內。「

「我開始瞄準 SDK 26,以確保用戶得到最新的 Android 體驗。從那裏,我找到了全部的靜態函數和靜態變量,看看它們是否真的有必要,而後刪除那些沒有的東西。爲了在 Activities 和 Fragments 之間傳值,能夠用公共接口替換公共靜態函數,」預算應用程序 Gastos Diarios 3 的建立者 Michel Carvajal 說。他補充說:「我還找到了諸如 While 和 For 這樣的循環,用於讀取數據庫的執行操做,並嘗試使用 AsyncTask 將大部分這些進程放入異步類中。最後,我搜索了不明確的 SQL 語句以取代更高效的 SQL 語句。全部這些項目以及其餘一些項目共同幫助我將 PSS 下降了近 60%。

保持冷啓動時間在 5 秒如下

感知是關鍵。在用戶測試和研究中,等待應用程序或遊戲加載5秒後,人們會感到沮喪,這會致使放棄和卸載。您應該把它看成您的窗口,以確保您擁有一個用戶,而且不要讓他們有機會在他們的手機上安裝您的應用後放棄您的應用。咱們老是測量冷啓動時間,由於這段時間是您的應用程序與用戶充分交互。完成從新啓動測試設備後,最好在冷啓動時間內運行測試。

「在考慮尺寸要求時,咱們將工做重點放在圖像壓縮格式,聲音片斷長度和圖像分辨率上,」  Sachin Saga Cricket Champions 製造商 JetSynthesys 生產副總裁 Amitabh Lakhera 說。「 對於啓動時間優化,減小數據加載,設置和後臺實用程序,有助於節省大量時間。除了優化遊戲着色器,並避免像玩家檔案同樣的檢查,遊戲平衡文件和強制更新顯着加快了遊戲開始。在啓動時刪除互聯網鏈接並使用反做弊工具可防止玩家在遊戲中出現任何潛在的不當行爲,並減小內存使用量。」

整體而言,當您考慮如何讓 Android 應用程序準備就緒(Go 版)時,請記住上述各類優化和調整。經過使用上述指導,全部開發人員已經完成了優化其應用和遊戲的工做,我相信您將可以取得相似的成果!若是您想了解有關 Android Go 的構建以及如何針對全球市場進行優化的更多信息,請查看今年的 Google I/O 會話。

YouTube 視頻連接:https://youtu.be/-g7yxxTpF2o?list=PLWz5rJ2EKKc9Gq6FEnSXClhYkWAStbwlC


您怎麼認爲?

您有沒有想過如何開發全球市場並優化您的應用策略?請在下面的評論中告訴咱們,或者使用 #AskPlayDev 微博,咱們會回覆 @GooglePlayDev,咱們會按期分享有關如何在 Google Play 上取得成功的新聞和建議。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索