iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Mobile Development

Android app 效能優化系列 第 6

精簡 App 的大小

  • 分享至 

  • xImage
  •  

App 的檔案大小會影響載入的速度、增加記憶體使用量。這一篇我們就來介紹如何為你的 APK 精簡檔案大小。

分析APK內容

我們先透過 Android Studio 的分析工具來查看 APK 裡的檔案結構及大小。在工具列選擇 Build → Analyze APK,接著選擇 APK 檔案就可以看到如下的結構。

apk

點選 classes.dex,你所寫的 Java/Kotion 程式碼及載入的元件都會在這個 dex 檔案裡。可以看到每一個程式裡面定義了多少 metohd 以及使用大小。從這個檔案結構,你就可以先找出哪些佔的大小較高,優先來看這些項目是否可以精簡。也可以透過這個工具來檢查所做的變更是否影響大小。

apk

看完了 APK 內容結構,我們就接著來介紹有幾種精簡檔案大小的方式。

刪除冗餘的資源

不需要的程式碼或檔案就刪除。例如沒有使用的函式或類別,Android Studio 會用灰色來提醒你,這些程式碼就直接把它刪除吧。不需要為了擔心以後需要使用而留著或是註解掉,你有版本控管工具隨時可以找到這些刪除的程式碼再將其復原。

not use code

你也可以在工具列選擇 Code → Inspect code 來分析找出未使用的程式碼。請確保你在commit 程式碼前,檢查一下有沒有未使用的程式碼。

lint

重用程式碼

相同功能的程式碼,不應該有多份。除了 App 檔案會變大,程式碼也難以維護。要減少這種重復程式碼 ( Duplidate code ),你可以把程式碼提出到一個函式或是一個類別裡。甚至相似的 Layout,你也可以寫成 Custom View 來達到 View 的重用。

圖片資源的優化

比起程式碼,圖片經常佔了更多的大小,透過以下方式來達到精簡:

  1. 僅支援特定的解析度
  2. 儘可能使用向量圖
  3. 壓縮圖片

僅支援特定的解析度

我們知道 Android 需要依不同的 dpi 給予不同解析度的圖片來符合多種手機。如下圖,我們僅是要放 1 張圖片 image1.jpeg,就放了5種不同的解析度的圖片。

mipmap

時過今日,已經有些較差解析度的手機慢慢的從市場消失,從下圖 Google 的官方統計可以看到 ldpi、mdpi 的佔比已經是非常低了,這兩種解析度的圖片就不需要再提供了。

dpi
圖片來源:https://developer.android.com/about/dashboards#Screens

儘可能使用向量圖

Android 支援向量圖格式。你可以在 Android Studio 工具列的 File → New → Vector Asset ,匯入一個 SVG 向量圖格式的圖片,即會轉成 Android 的向量格式 Vector Drawable。

https://ithelp.ithome.com.tw/upload/images/20220921/201118960YFZGXlTra.png

而載入的 VectorDrawable 會是像這樣的 xml 檔案,檔案非常小,而且不需區分不同的 dpi 版本 。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="120dp"
    android:height="120dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:name="iconPath"
        android:fillColor="#274fe1"
        android:pathData="M8,5 V19 H16 V5 z" />
</vector>

像這樣的 VectorDrawable 向量格式,你甚至可以動態的改變顏色,做成動畫。所以在一些 Icon 或是簡單的樣式,我們應儘可能的使用 VectorDrawable。

壓縮圖片

除了向量圖,Android 也支援 BMP、JPG、PNG、WebP 格式。WebP 是 Google 發行的一種能有效壓縮圖片大小的格式。你也可以透 Android Studio 把 BMP、JPG、PNG 轉換為WebP。在 Android Studio 裡的圖片按下右鍵選擇 Convert to WebP 即可轉換為檔案較小的 WebP 格式。

https://ithelp.ithome.com.tw/upload/images/20220921/20111896ITgYhRJJQ9.png

使用 Proguard 混淆程式碼

我們會在釋出APK時,會使用 proguard 混淆程式碼來避免被太容易看到程式碼。而 proguard 也因為能將應用程式類別、函式和屬性名稱縮短,同時也能達到精簡程式碼的功用。

參考:
https://developer.android.com/topic/performance/reduce-apk-size
https://developer.android.com/studio/build/shrink-code


上一篇
縮短 App 的啟動時間
下一篇
UI 的效能優化
系列文
Android app 效能優化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言