Tinder 的使命是讓每一代單身人士都能輕鬆有趣地認識新朋友,進而促成並激發真實的人際關係。不過,隨著 Android 應用程式程式碼集規模擴大,複雜度也隨之提高。在最近一次最佳化之前,該應用程式約有 70% 未經最佳化,包含 17 個 dex 檔案,其中三個專門用於啟動。雖然他們啟用了 R8,但由於保留規則,大部分的最佳化潛力都受到阻礙,而且團隊無法找出是哪些特定規則阻礙了最佳化。為縮短啟動時間,並減少使用者感知到的應用程式無回應 (ANR) 錯誤,Tinder 採用新的 R8 設定分析器來解決這些問題。
Tinder 運用 R8 設定分析器,成功找出並移除無意間造成最佳化阻礙的因素。成效立竿見影:Tinder 的應用程式冷啟動次數減少 47%,應用程式下載大小縮減 28.98% (降至 61.5 MB),使用者感知 ANR 事件減少 28%。
設定分析工具
R8 設定分析器會追蹤縮減、最佳化和模糊化分數,顯示 R8 最佳化成效,指出可調整的部分。這項功能會顯示廣泛、重複或過時的保留規則,包括來自外部程式庫的規則,方便您分析保留規則的影響並加以調整。
設定分析工具顯示的主要指標包括:
- 縮減分數:R8 可縮減的程式碼百分比。
- 最佳化分數:可最佳化的程式碼百分比 (例如方法內嵌、水平類別合併)。
- 模糊處理分數:R8 可重新命名以縮減大小的類別、方法和欄位百分比。
使用分析工具稽核保留規則及其影響:
- 找出廣泛規則:縮小限制 R8 最佳化的套件層級規則範圍,並找出未納入縮減、最佳化和模糊處理的特定類別、方法和欄位。
- 調整規則:僅指定需要反射的特定類別/方法,以利最佳化
- 移除多餘規則:移除與目前版本中零個類別、方法或欄位相符的規則。
- 相同規則:相同保留規則是指指定相同類別、欄位和方法的規則,或在相同或不同保留規則檔案中重複宣告的保留規則。
- 找出涵蓋規則:清除已涵蓋在更廣泛設定中的特定規則。
- 找出有問題的程式庫:檢查所有程式庫合併消費者保留規則後,對最佳化作業的整體影響。
為協助您搭配代理工具使用 R8 設定分析器,我們發布了 R8 分析器技能。這項技能會總結 R8 設定分析工具報告,顯示最佳化、模糊化和縮減分數等關鍵指標,藉此最佳化自動開發工作流程。此外,這份報告也會列出五項影響最大的保留規則,讓您清楚瞭解哪些因素會阻礙程式碼最佳化。
找出隱藏的最佳化阻礙
在整合 R8 設定分析器之前,Tinder 的 Android 應用程式因程式碼集未經最佳化,而累積了大量技術債。由於缺乏最佳化,使用者體驗直接受到影響,導致使用者遇到冷啟動緩慢的問題。
為解決這些問題,Tinder 團隊使用 R8 設定分析器,全面稽核 R8 設定。分析工具顯示,即使使用 R8 完整模式,程式碼集的 R8 最佳化程度也只有 28% 左右。Tinder 使用 R8 設定分析器,發現內部程式庫導入了廣泛、未限定範圍的保留規則。
# Prevents optimization in all public classes along with all of their public and protected members -keep public class * { public protected *; }
這項「廣泛」規則不小心涵蓋了整個應用程式中的各種依附元件,導致大量類別無法最佳化。由於過度包容的規則可防止執行階段當機,開發人員經常忘記為使用反射的新功能新增規則,導致隱藏問題隨著時間累積。
團隊運用 R8 設定分析器提供的洞察資料,成功追蹤並分析受程式庫廣泛保留規則影響的特定類別。團隊立即發現,在 R8 可進行最佳化的較大、非動態叫用類別中,最佳化功能遭到封鎖。Tinder 調整這項特定保留規則後,解鎖了大量最佳化功能、簡化舊版設定,並大幅提升整體最佳化數據,R8 分數從 28% 提高到 50%,立即提升整個應用程式的效能。Tinder 團隊正積極努力進一步提升這項數據。
- 載入速度更快:團隊成功將應用程式冷啟動緩慢的使用者比例降低 47%。
- 縮減體積:應用程式下載大小從 86.6 MB 降至 61.5 MB (減少 28.98%)。
- 穩定性提升:使用者感知到的應用程式無回應 (ANR) 錯誤率從 0.35% 降至 0.28%,大幅接近同類應用程式的中位數
- 降低複雜度:DEX 檔案總數從 17 個減少到 11 個,其中只有兩個啟動檔案。
除了技術效能提升,應用程式最佳化程度提高,也直接帶來實質業務成長和更高的使用者參與度,尤其是在資源有限的市場。
- 區域參與度:在低 RAM 裝置占據大部分市場的國家/地區,參與度增幅最大,而降低 ANR 發生率是提高這個龐大市場參與度的關鍵。
- 參與度成長:自從加強應用程式最佳化後,參與度提高了 3%。
透過持續整合,確保未來效能
程式碼壓縮並非一勞永逸,而是需要持續監控。Tinder 的 Android 團隊受到 R8 設定分析器帶來的巨大效益啟發,主動將最佳化監控功能整合至日常工作流程,防止迴歸問題。
Tinder 團隊在 CI/CD 管道中新增一項工作,用於回報最佳化統計資料的變化,讓所有人都能瞭解自己的貢獻對最佳化作業有何影響。在建議其他開發人員考慮整合 R8 設定時,團隊強調了稽核內部依附元件的重要性。雖然大多數熱門的第三方資料庫都附有明確定義的規則,但被視為「穩定」的公司內部專案,實際上可能會引入廣泛規則,對整體最佳化造成負面影響。
重點回顧
Tinder 的程式碼集未經最佳化,且 DEX 檔案數量龐大,因此需要一種方法,能清楚稽核應用程式的縮減規則。R8 設定分析器提供理想的工具,可找出過於廣泛的內部程式庫規則,以及受保留規則影響的類別,讓團隊能安心最佳化程式碼集。最終,Tinder 成功將冷啟動時間縮短近一半,APK 大小也減少超過 28%,為使用者打造更健康、更高效能的基礎,團隊也積極努力進一步改善這些數據。
如何使用 R8 設定分析器
您可以根據目前的 Android Gradle 外掛程式 (AGP) 版本,使用 R8 設定分析器及其獨立功能:
1. AGP 9.3 版本:R8 設定分析器已完全整合,並隨 AGP 9.3 發布。執行 R8 發布子版本時,系統會在 `build/outputs/mapping/release/configanalyzer.html` 資料夾中產生報表。
2. 獨立 Gradle 工作:AGP 9.3 推出獨立 Gradle 工作,可讓您產生分析器報告,不必執行完整的發布子版本,在本機調整保留規則時,可大幅加快意見回饋循環:
./gradlew :app:analyzeReleaseR8Config
報表產生時間:build/reports/r8/r8-config-analyzer-release.html.
3. 在舊版 AGP 上使用:如果您使用的 AGP 版本低於 9.3,則不必遷移整個 AGP 版本,即可分析設定。您可以按照這篇文章的操作說明,在 AGP 中替換 R8,將 R8 版本獨立更新至 9.3.7-dev 以上版本。如要在本機產生報表,請執行建構作業並指定屬性:
./gradlew assembleRelease -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
詳情請參閱 R8 設定分析器說明文件。
-
個案研究Grab 是東南亞首屈一指的超級應用程式,透過單一應用程式為八個國家/地區的數百萬名使用者提供外送、交通和金融服務。
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • 閱讀時間:5 分鐘 -
個案研究WhatsApp 是全球最大的訊息平台,為全球數十億使用者提供服務。WhatsApp 是不同地區使用者預設的通訊工具,透過私密、可靠且安全的訊息服務,將使用者連結在一起。
Niharika Arora, Tracy Agyemang, Mayank Jain • 閱讀時間:8 分鐘 -
個案研究Karrot 是一款超地方、社群導向的點對點市集應用程式,使用者可以與其他經過驗證的使用者買賣及交易商品。自 2015 年在韓國推出以來,該平台已拓展至全球市場,累積超過 4,300 萬名已註冊的使用者。
Thomas Ezan, Tracy Agyemang • 閱讀時間:2 分鐘
每週透過電子郵件接收最新的 Android 開發洞察資訊。