前言
沒有用戶愿意下載大型 APK窃祝,因為它可能會占用他的大部分網(wǎng)絡(luò)/Wifi 帶寬掐松,最重要的是,移動設(shè)備內(nèi)的空間粪小。
APK 的大小會影響應(yīng)用的加載速度大磺、使用的內(nèi)存量以及消耗的電量。
優(yōu)化應(yīng)用程序的大小很重要探膊,因為手機始終是內(nèi)存和空間受限的設(shè)備杠愧。那么,在 Android-Development 中我們可以通過哪些方式來提高我們的 apk 大小呢逞壁?讓我們繼續(xù)在本文中學(xué)習(xí)流济。
了解 Android App Bundle
Android App Bundle是一種發(fā)布格式,包含您應(yīng)用的所有編譯代碼和資源腌闯,并將 APK 生成和簽名推遲到 Google Play绳瘟。
Google Play 使用您的 app bundle 為每個設(shè)備配置生成和提供優(yōu)化的 APK,因此只下載特定設(shè)備所需的代碼和資源來運行您的應(yīng)用程序姿骏。您不再需要構(gòu)建糖声、簽署和管理多個 APK 來優(yōu)化對不同設(shè)備的支持,并且用戶可以獲得更小分瘦、更優(yōu)化的下載蘸泻。
App Bundle 是發(fā)布格式
圖片來源:谷歌安卓官方網(wǎng)站。
Android App Bundles - 文件定位和服務(wù)
這些 Android 應(yīng)用程序包對文件定位有何幫助嘲玫?很簡單悦施,假設(shè)我們的應(yīng)用程序中有 hdpi、xhdpi趁冈、xxhdpi 資源歼争。根據(jù)正在下載應(yīng)用程序的設(shè)備,如果它是 hdpi 設(shè)備(例如)渗勘,則只會在設(shè)備上安裝來自 hdpi 的資源。
如果應(yīng)用程序針對多種語言(英語俩莽、西班牙語旺坠、法語等),則只會將特定的字符串資源下載到設(shè)備上扮超。
這有助于節(jié)省設(shè)備內(nèi)存的空間取刃。
構(gòu)建 Android App Bundle
構(gòu)建 Android 應(yīng)用程序包非常簡單蹋肮。只需從 Android Studio 菜單中選擇 Build 選項,然后選擇 Build Bundles
Android 尺寸分析器
為了了解哪些文件實際上在應(yīng)用程序中占用了更多空間璧疗,請使用 Android Studio 中的 Android Size Analyzer 插件坯辩。用于安裝插件
- 選擇File > Settings(或在 Mac 上,Android Studio > Preferences崩侠。)
- 選擇左側(cè)面板中的插件部分漆魔。
- 單擊市場選項卡。
- 搜索“Android Size Analyzer”插件却音。
- 單擊分析器插件的安裝按鈕改抡。
安裝插件后重新啟動 IDE。現(xiàn)在系瓢,要分析應(yīng)用程序阿纤,請從菜單欄中轉(zhuǎn)到分析 > 分析應(yīng)用程序大小。我們會得到一個類似這樣的窗口:
這些建議可以幫助我們以更好的方式減小應(yīng)用程序的大小夷陋。
刪除未使用的資源
正如我們已經(jīng)討論過的欠拾,apk 的大小會影響應(yīng)用程序的加載速度、使用的內(nèi)存量以及消耗的內(nèi)存功率骗绕。因此藐窄,可以實現(xiàn)以減少 apk 大小的主要事情之一是刪除應(yīng)用程序中未使用的資源。
此外爹谭,建議使用可縮放的可繪制對象(導(dǎo)入矢量資源)而不是其他圖像格式枷邪,如 PNG、JPEG 等诺凡。
使用 Vector Drawable 是顯著減小尺寸的最佳方法之一东揣。
使用Lint
Lint 實際上有助于在應(yīng)用程序內(nèi)生成警告或未使用的代碼。因此腹泌,這實際上可以幫助刪除它們嘶卧,從而有助于減小應(yīng)用程序的大小。
減少庫大小
檢查在使用庫時是否可以減小大小凉袱。例如芥吟,僅使用特定的 Google Play 服務(wù)庫。只編譯需要的专甩。
重用代碼
面向?qū)ο缶幊探鉀Q了編程世界中的很多問題钟鸵。盡量重用代碼而不是重復(fù)代碼。重復(fù)代碼還會導(dǎo)致文件大小增加涤躲,從而影響 Apk 大小棺耍。
壓縮 PNG 和 JPEG 文件
如果在您的項目中必須使用 PNG 和 JPEG 文件,您可以使用 TinyPNG 等圖像質(zhì)量工具對其進行壓縮种樱。
在大多數(shù)應(yīng)用程序中蒙袍,圖像用于傳達信息或改善用戶體驗俊卤。但是這里最大的缺點可能是使用了大量的圖像,這會增加應(yīng)用程序的大小害幅。在將應(yīng)用程序發(fā)布到 Play 商店之前消恍,確保了解并實施圖像壓縮技術(shù)以減小 apk 的大小。
使用 WebP 文件格式
正如我們在上面為 Android Analyzer 插件共享的圖片中看到的以现,其中一項建議是將 PNG 文件更改為 WebP 文件格式狠怨。
使用 Proguard
每次我們構(gòu)建一個新項目時,我們都會在應(yīng)用級的 build.gradle 文件中看到如下一段代碼
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
ProGuard 對我們的項目產(chǎn)生以下影響叼风,
它減小了應(yīng)用程序的大小取董。
它刪除了導(dǎo)致 Android 應(yīng)用程序的 64K 方法計數(shù)限制的未使用類和方法。
它通過混淆代碼使應(yīng)用程序難以進行逆向工程无宿。
創(chuàng)建多個 APK
如果我們不使用 App Bundle茵汰,我們可以使用傳統(tǒng)方式。我們可以創(chuàng)建多個類似于 App Bundle 的 APK孽鸡。Multiple apk 主要用于針對不同的屏幕密度和不同的 CPU 架構(gòu)生成特定的 APK蹂午。
收縮資源
盡可能減少資源。在 Gradle 中使用shrinkResources屬性將刪除項目中任何地方未使用的所有資源彬碱。通過添加以下行在您的應(yīng)用程序級 build.gradle 文件中啟用此功能:
buildTypes {
release {
........
shrinkResources true
........
}
}
資源配置
使用resConfigs刪除不需要的本地化資源豆胸。所有支持庫都可能具有我們不需要的其他語言的本地化文件夾。
Gradle 資源收縮器僅刪除您的應(yīng)用代碼未引用的資源巷疼,這意味著它不會刪除不同設(shè)備配置的替代資源(特定于設(shè)備/位置)晚胡。如有必要,您可以使用 Android Gradle 插件的resConfigs屬性來刪除您的應(yīng)用不需要的替代資源文件嚼沿。
以下代碼段顯示了如何將語言資源限制為僅英語和法語:
android {
defaultConfig {
...
resConfigs "en", "fr"
}
}
如前所述估盘,擁有未使用的語言資源只會增加 apk 的大小。因此骡尽,刪除未使用的文件和資源很重要遣妥。
調(diào)試實現(xiàn)
刪除您在應(yīng)用程序中擁有的任何調(diào)試庫。它可以通過在構(gòu)建測試調(diào)試 apk 時使用debugImplementation來完成攀细。
就像我們在 MindOrks 使用庫Android Debug Database來調(diào)試數(shù)據(jù)庫一樣箫踩。
debugImplementation 'com.amitshekhar.android:debug-db:1.0.1'
使用 R8 減小 APK 大小
R8 縮減是我們減少應(yīng)用程序代碼量的過程,通過這樣做谭贪,APK 大小會自動減小境钟。R8 作為 Proguard 完成大部分工作。為什么我們需要更喜歡它俭识?原因是它適用于 Proguard 規(guī)則并在提高輸出大小的同時更快地縮小代碼吱韭。
最后,有什么比在我們的應(yīng)用程序中理解和實施這些步驟來為我們的客戶提供優(yōu)化的 apk 更好的了鱼的!
這就是這篇文章的全部內(nèi)容理盆。
我們希望這篇文章對理解在 Android 中減小應(yīng)用程序大小的不同方法有所幫助。
非常感謝您的參與凑阶!
作者:Dheeraj Sree
鏈接:https://blog.mindorks.com/how-to-reduce-apk-size-in-android-2f3713d2d662