- 原文地址:How to optimize your app for Android (Go edition)
- 原文作者:Raj Ajrawat
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:androidxiao
洞察力可幫助您建立適用於全球 Android 手機的應用程式
在去年的 Google I/O 大會上釋出了 Android(Go 版),其目標是為全球入門級裝置提供高質量的智慧手機體驗。在今年早些時候,6 家原始裝置製造商在移動世界大會上宣佈了他們的裝置,並且更多的原始裝置製造商將致力於構建新的 Android(Go 版)裝置。我們對這種勢頭感到非常激動,並且我們鼓勵您從我們的合作伙伴那裡購買您自己的 Android(Go 版)裝置!
我們的 OEM 合作伙伴一直在努力將裝置推向市場,並且我們開始看到這些裝置可供使用者使用。與此同時,我一直在與 Google Play 團隊合作,與 Android 社群開發人員合作,確保開發人員在適當的情況下優化他們對這些裝置的應用體驗。在這篇文章中,我將分享我們的合作伙伴的工作,優化他們的 Android 應用和遊戲(Go 版)。
瞭解機會
正如我們在 Google I/O 大會上討論的那樣,Android(Go 版)旨在改善入門級裝置(記憶體 < 1GB 的裝置)的體驗。世界各地的使用者一直在努力解決電池問題,裝置缺乏儲存,資料限制以及處理器速度差等問題,從而導致了他們對手機的更換和不滿。儘管 Google 已經完成了大量工作來優化我們的應用,例如搜尋,助理,地圖和 YouTube,但應用和遊戲開發人員確保他們的產品能夠在這些裝置上順利執行也很重要,以便使用者在入門級價位上享受優質體驗。
我們為 Android(Go 版)概述的要求旨在幫助您為入門級裝置上的使用者提供出色的體驗。正如您所看到的,您應用的許多優化實際上將在全球所有裝置上為使用者帶來更好效能的更小應用程式。
要優化,還是要開始嘗試?選擇您的應用策略
許多人會問自己的第一個問題是:“我應該優化現有的應用程式還是建立一個新的應用程式?”雖然這個問題看似簡單,但答案可能會更復雜一些。它還取決於諸如您擁有多少開發資源等因素; 無論您是否可以在應用中保留針對這些裝置進行優化的功能,以及您希望為全球終端使用者啟用的分發場景型別。
有三種情況可以確定:
-
一個應用程式的所有。 針對 Android(Go 版)裝置和具有相同體驗的所有其他裝置使用相同的應用程式。在這種情況下,您正在優化現有應用程式以便在這些裝置上順利執行,並且您的現有使用者可以從這些優化中獲得效能優勢。這個應用程式可能是多進位制的,但對於低 RAM 裝置沒有特定的經驗。我們強烈建議您使用新的 Android App Bundle 來體驗高達 65% 的體積節省,而無需重構程式碼。
-
一個應用程式,不同的 APK。 針對 Android(Go 版)裝置和其他所有裝置使用相同的應用,但是有不同的體驗。建立不同的 APK; 一個 APK 針對新的 android.hardware.ram.low 尺寸 vs APK(s)定位其他所有裝置。
-
兩個應用。 建立一個新的 “lite” 應用程式並定位 Android(Go 版)裝置。您可以按原樣保留現有的應用程式。“lite” 應用程式仍然可以定位所有區域設定中的所有裝置,因為不需要此“精簡版”應用程式僅針對 Android(Go 版)裝置。
每種方式都有優點和缺點,最好根據您的特定業務來評估這些方案。
優化您的應用提示
確定應用策略後,在優化您的應用時需要考慮一些關鍵因素:
- 確保您的應用沒有 ANR 和崩潰
- 針對 Android Oreo
- 您安裝的應用程式要低於 40 MB,遊戲要低於 65 MB
- 應用程式的 PSS 要低於 50 MB,遊戲要低於 150 MB
- 將您的應用或遊戲的冷啟動時間保持在 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 的測量方式是您的應用的私有記憶體加上您的應用在裝置上使用的共享記憶體的比例。
按照以下說明測試記憶體分配:
-
安裝應用程式並將裝置連線到工作站/膝上型電腦後,啟動應用程式並等待到達歡迎螢幕(我們建議等待 5 秒鐘以確保所有內容都已載入)
-
在終端中,執行命令 adb shell dumpsys meminfo <com.test.app> -d (Where <com.test.app>(其中 <com.test.app> 是被測試的應用程式的 pkg_id,例如 com.tinder)
-
在行 Total 中記錄 PssTotal 列的值(該值以 KB 報告 - > 通過除以 1000 轉換為 MB)
-
重複步驟 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 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。