如何減少 Android 中的 APK 大写煲浴?

前言

沒有用戶愿意下載大型 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 插件坯辩。用于安裝插件

  1. 選擇File > Settings(或在 Mac 上,Android Studio > Preferences崩侠。)
  2. 選擇左側(cè)面板中的插件部分漆魔。
  3. 單擊市場選項卡。
  4. 搜索“Android Size Analyzer”插件却音。
  5. 單擊分析器插件的安裝按鈕改抡。

安裝插件后重新啟動 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猿规,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宙橱,更是在濱河造成了極大的恐慌姨俩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件师郑,死亡現(xiàn)場離奇詭異环葵,居然都是意外死亡,警方通過查閱死者的電腦和手機宝冕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門张遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人地梨,你說我怎么就攤上這事菊卷。” “怎么了宝剖?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵洁闰,是天一觀的道長。 經(jīng)常有香客問我万细,道長扑眉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任赖钞,我火速辦了婚禮腰素,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仁烹。我一直安慰自己耸弄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布卓缰。 她就那樣靜靜地躺著计呈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪征唬。 梳的紋絲不亂的頭發(fā)上捌显,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音总寒,去河邊找鬼扶歪。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的善镰。 我是一名探鬼主播妹萨,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炫欺!你這毒婦竟也來了乎完?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤品洛,失蹤者是張志新(化名)和其女友劉穎树姨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桥状,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡帽揪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辅斟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片转晰。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砾肺,靈堂內(nèi)的尸體忽然破棺而出挽霉,到底是詐尸還是另有隱情,我是刑警寧澤变汪,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布侠坎,位于F島的核電站,受9級特大地震影響裙盾,放射性物質(zhì)發(fā)生泄漏实胸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一番官、第九天 我趴在偏房一處隱蔽的房頂上張望庐完。 院中可真熱鬧,春花似錦徘熔、人聲如沸门躯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶凉。三九已至,卻和暖如春山孔,著一層夾襖步出監(jiān)牢的瞬間懂讯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工台颠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褐望,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像瘫里,于是被迫代替她去往敵國和親实蔽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容