自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何減小安卓應用的體積

譯文
移動開發(fā) Android
在競爭激烈的市場上,我們的應用除了能夠提供優(yōu)質(zhì)的功能服務,其自身的下載體積、以及在用戶設(shè)備上占用的空間,也是決定其成敗的關(guān)鍵因素之一。本文將介紹的九種減小應用體積的方法,希望能幫助您不斷提高用戶的使用體驗。

如何減小安卓應用的體積

【51CTO.com快譯】不知您是否注意到:用戶不斷增長的各種業(yè)務需求,促使開發(fā)人員不斷地將更多的內(nèi)容整合到同一個應用程序中。因此,這直接導致了應用程序的體積與日俱增。某些大型應用程序甚至會化身成為搶占智能手機存儲資源的“大戶”,進而出現(xiàn)運行緩慢,并嚴重影響到用戶的工作效率。根據(jù)Google的調(diào)查統(tǒng)計:如果應用程序的體積超過150 MB,那么它被安裝的機會就會減少30%。而且,如果在體積上每增加6 MB,則該應用被安裝的轉(zhuǎn)換率可能會下降1%。

目前,有許多技術(shù)專家都在致力于創(chuàng)建體積小巧的應用程序與工具。Android App Bundle就是此類發(fā)布工具中的一種。通過它,用戶無需從應用商店處重新下載那些本機應用中已有的內(nèi)容。該平臺號稱能夠?qū)贸绦虻捏w積減少35%。下面,讓我們一起來探索一下,有哪些方法可以在應用程序的開發(fā)生命周期中減小Android應用的本身體積。

1.圖像優(yōu)化

我們可以在不降低分辨率的前提下,輕松地減小圖像的尺寸。例如:我們可以將.jpg和.png圖片轉(zhuǎn)換為.webp(Web圖片格式)。該格式既有針對.jpg的有損壓縮,又有針對.png的透明性,因此許多工具都支持此類轉(zhuǎn)換。例如:guetzli和packjpg之類的工具最適合.jpg文件的壓縮;而pngcrush和zopflipng之類的工具則適合.png文件的轉(zhuǎn)換。據(jù)此,設(shè)計人員可以通過矢量圖形,來制作出那些既節(jié)省占用空間,又不失分辨率的簡單圖像。它們可以在Android中可被作為VectorDrawable對象來使用,并能夠讓文件生成清晰且適合屏幕尺寸的圖像。其對應的Java代碼如下所示:

 

  1. android { 
  2.  
  3. defaultConfig { 
  4. vectorDrawables.useSupportLibrary true 
  5.  

 

眾所周知,某些圖像會與靜態(tài)資源并不相關(guān),程序框架能夠在運行時,動態(tài)地繪制出此類圖像。例如:在開發(fā)小型應用程序時,Vector Drawables對象可以僅占用APK文件里最少量的存儲空間,并能創(chuàng)建出符合設(shè)計規(guī)格的圖片。當然,復雜的對象可能會占用一定份額的CPU和RAM,進而降低整體的運行速度。

此外,作為一種所見即所得(WYSIWYG)的圖像編輯器工具,Draw 9-patch也可以通過減小圖像的尺寸,從而節(jié)省空間。在實際使用中,您可以通過該工具來制作能夠適合各種移動設(shè)備、不同屏幕尺寸的位圖。而且,圖像中的選定部分也可以根據(jù)您在圖像中繪制的手勢指示符,進行垂直或水平方向的縮放。

再者,我們還可以使用aapt工具來處理.png圖像,這些資源可以在設(shè)備目錄res/drawable/中獲得,以實現(xiàn)無損的壓縮。例如:我們可以將真彩色的.png圖像(并未超過256種顏色)轉(zhuǎn)換為啟用了8位(8-bit)圖像的調(diào)色板。顯然,后者在保留顯示效果的同時大幅減小了圖片的體積。不過,值得開發(fā)人員注意的是,aapt工具并不會壓縮asset/folder中的.png文件。而且,它無法優(yōu)化那些使用了超過256種顏色的圖像。此外,它缺點是有可能會讓已壓縮的.png文件出現(xiàn)反彈。為此,我們需要通過在Gradle(譯者注:一個基于Apache Ant和Apache Maven概念的項目自動化構(gòu)建開源工具)中使用cruncherEnabled標志(見如下代碼)來避免該缺點:

 

  1. aaptOptions { 
  2. cruncherEnabled = false 

2.消除冗余代碼(Redundant Code)

簡言之,冗余的代碼就是一些不必要的代碼,它們可以通過重新計算而得到,或者是在執(zhí)行過程中,對于應用程序的功能不起任何作用的代碼。這些代碼所對應的方法或類,之于應用程序而言非但無益,而且可能會造成程序上的臃腫,并浪費系統(tǒng)資源去產(chǎn)生不必要的載入和執(zhí)行。

3.消除死代碼(Dead Code)

APK文件的體積與應用程序的加載速度,使用到的內(nèi)存,以及耗電量都是成正比的。可見,僅出于未來可能用到的目的,而保留的任何暫時無用的代碼,只會占用更多的空間,而且還會讓應用程序耗費更多的設(shè)備電量。因此,請不要猶豫,直接將它們找出來,果斷地刪除掉。此舉不僅僅是為了提高源代碼的質(zhì)量,也能夠在減少代碼維護量的基礎(chǔ)上,讓應用程序能夠避免出錯或受到攻擊。

4.限制庫資源的使用

通常,在開發(fā)Android應用程序時,我們會用到各種外部庫,而且我們往往需要將這些庫的可用性和多功能性發(fā)揮到極致。其中,最常用的莫過于Google Play Services(可用于恢復應用程序文本的自動翻譯)和Android Support Library(可用于改善老舊設(shè)備上的用戶體驗)。當然,這些類庫同時也是為服務器或臺式機設(shè)計的。它們往往會帶有各種無法為手機應用提供服務的方法和對象。對此,您需要在編寫程序時僅保留應用所需的部分。要做到這一點,您不但需要通過修改不同的調(diào)用權(quán)限,還應當僅使用那些適合移動設(shè)備的庫,來實現(xiàn)某些特定的功能。

5.僅支持特定的屏幕密度

不同于iPhone那樣基本固定了屏幕的尺寸,由全球不同廠商生產(chǎn)出來的Android平臺設(shè)備,可謂五花八門。它們有著不同屏幕尺寸和分辨率的產(chǎn)品。此外,在Android的屏幕密度方面,也存在著諸如:ldpi、tvdpi、mdpi、hdpi、xhdpi、xxhdpi和xxxhdpi等類型。因此,如果您想讓自己的應用小而美的話,那么就完全沒有必要支持所有的屏幕類型,只需保證自己的界面能夠清晰流暢地顯示在基本設(shè)備上即可。

當然,在具體實踐中,您也可以通過調(diào)查,摸清具有特定屏幕密度設(shè)備在市場上的占比。如果占比的確不高,就真的沒有必要讓應用去適應甚至捆綁每一種密度。通過如下命令,Android系統(tǒng)可以采取自動擴展的方式,適應不同密度的屏幕。

 

  1. android{ 
  2. splits { 
  3. density { enabled true } 

6.避免枚舉

通常,枚舉操作會給一個應用的classes.dex文件帶來1.0到1.4 KB的空間占用。而且,如果程序中的枚舉多了,尤其是有各種共享庫或復雜系統(tǒng)的情況下,它們在運行的時候也會拖慢速度,并占用更多的空間。我們可以通過使用ProGuard和@IntDef的批注(annotation)功能,將枚舉型轉(zhuǎn)換為整型,以實現(xiàn)在保留枚舉所有優(yōu)點的基礎(chǔ)上,減小應用的體積。

7.使用APK體積分析器

APK分析器可以為您提供有關(guān)APK體積大小的各種數(shù)據(jù)。在其界面的上方,您可以選擇查看原始文件的大小,即:APK占用的磁盤空間大小。其“下載體積”表示了:在考慮了Play Store的帳戶壓縮的情況下,用戶將會耗費多少數(shù)據(jù)流量來下載目標應用。

APK體積分析器可以通過Android Studio的插件市場(plugin marketplace),有效地進行下載。在其分析報告中,它會以降序排列的方式展示文件夾和文件的大小。通過此功能,您可以輕松地找出占用空間的“大戶”。同時,您也可以通過“比較”的功能,查看到某個應用新、舊版本之間的體積差異。

8.可下載的字體

由于Play Store中的絕大多數(shù)應用程序都采用了相同的字體。因此,大多數(shù)字體會被包含在App Bundles中。當某個用戶在一臺設(shè)備上運行包含了采用相同字體的不同應用時,它們就需要能夠在本地進行相互復用。幸運的是,Google已經(jīng)考慮到了此類情況,并在其支持庫中提供了可下載的各類字體。據(jù)此,您在開發(fā)應用時,不必再用API去捆綁字體文件,只需請求相應的字體即可。

9.提供多個APK

有時候,用戶可能只想用到某個應用的一部分功能。而作為一個整體,應用往往無法將既有的APK進行拆分。對此,您可以在Google Play上,通過Android App Bundles上傳自己的應用,以便Google可以根據(jù)設(shè)備的配置,來啟用APK的優(yōu)化。在實際開發(fā)中,您也可以將其中一個APK劃分為多個,以便用戶根據(jù)自己的判斷和實際設(shè)備的配置,選擇最實用的APK。

小結(jié)

在競爭激烈的市場上,我們的應用除了能夠提供優(yōu)質(zhì)的功能服務,其自身的下載體積、以及在用戶設(shè)備上占用的空間,也是決定其成敗的關(guān)鍵因素之一。通過上述介紹的減小應用體積的方法,我們將能不斷提高用戶的使用體驗。

原標題:How To Reduce Android App Size During Development? ,作者:Solace Infotech

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2014-04-02 09:56:13

iOS應用減小安裝包

2015-12-09 14:00:41

ios應用

2024-03-27 14:16:48

Docker鏡像RUN

2022-05-14 08:35:12

Webpack前端

2021-09-26 09:48:09

Windows 11操作系統(tǒng)微軟

2012-05-18 09:34:19

程序員

2012-10-11 10:04:36

網(wǎng)絡能耗思科

2020-11-18 08:33:24

CommonJSJava

2018-06-29 09:54:32

安卓多窗口APP

2015-02-04 10:43:51

2022-10-11 14:37:57

CentOSRHELLinu

2010-12-23 16:56:20

百卓網(wǎng)絡64核計算機

2011-08-15 14:05:42

CentOS 6

2024-02-04 10:20:41

2014-06-26 15:17:17

安卓應用保存數(shù)據(jù)

2012-06-20 10:07:35

應用商店Android

2014-06-04 13:19:29

C++ndk安卓開發(fā)

2011-05-04 13:07:56

打印機

2020-08-03 07:55:18

AppDuerOS手機

2017-08-16 11:09:54

App Store開發(fā)應用程序
點贊
收藏

51CTO技術(shù)棧公眾號