Android性能優化-apk瘦身

背景

  • 隨着業務的發展app體積越來越大,由剛開始的幾M到後來的幾十M。APP越來越大會導致用戶使用成本會上升,進而導致用戶的流失等等。。。。
    壓縮APP,減小app體積刻不容緩!!!
  • 隨着Android studio 3.0 發佈,也隨之提供了 Analyser 來分析apk
    image.png

apk結構分析

apk有lib、classes.dex、assets、resources.arsc、res等文件組成

  • lib/:存放so文件
  • classes.dex:Dalvik字節碼
  • assets /:可以存放一些配置文件,這些文件的內容在程序運行過程中可以通過相關的API獲得。
  • resources.arsc:編譯後的二進制資源文件的索引(apk文件的資源表索引)
  • res/ :資源文件目錄,包括圖片、字符串等等。
    結構詳細介紹請移步
    image.png

以上面截圖爲例我們apk瘦身的主要目標有了,主要是lib、res、classes.dex。話不多說,開始步入正題;

apk瘦身開始

1、lib

so文件與cpu的關係或者聯繫
可以看到,該目錄下主要存放so文件的,so文件包括:armeabi、armeabi-v7a、arm64-v8a、mips、mips64、x86、x86_64等。
目前市面上的兼容市面是的手機主要保留armeabi-v7a和arm64-v8a就可以了
或者把so文件放在服務器上動態獲取

buildTypes {
        release {
//省略其他配置
            ndk {
                //選擇要添加的對應cpu類型的.so庫。
                abiFilters 'arm64-v8a', 'armeabi-v7a'
            }
        }
    }

2、classes.dex

classes.dex中包含了所有的java代碼,當你打包時,gradle會將所有模板力的.class文件轉換成classes.dex文件,當然,如果方法數超過64K的話,需要多個classes.dex來存放。換句話說,就是減少代碼量。我們可以通過以下方法來實現:

  • 減少不必要的第三方庫的引用
  • 避免使用枚舉
  • 避免引用重複功能的庫(如glide,picasso,fresco,image_loader,只需引用一個就好)
  • 嘗試自己造輪子
  • 開啓minifyEnabled混淆代碼
    等等

3、res

該目錄下存放各種圖片、佈局文件以及資源文件等,優化步驟主要有

圖片資源

  • 保真壓縮圖片
    可以使用一些圖片壓縮網站或者工具壓縮你的資源文件吧,例如TinyPng、智圖等。
  • 保留一套圖片(xxxhdpi)
  • 使用webp格式
  • 合理的服用圖片資源
  • 避免使用幀動畫
  • 清除不使用的圖片
  • 開啓壓縮
        release {
//省略其他配置
          minifyEnabled true  //混淆代碼
            zipAlignEnabled true
            shrinkResources true //資源瘦身
    }
}

等等

語言資源
根據app使用範圍,刪除不一樣的語音資源

 defaultConfig {
//隱藏其他配置
        resConfigs "zh-rCN"//只保留中文簡體
    }

其他方面優化

合理使用lint工具,刪除不在使用的資源文件和代碼等等

傳送門

熊貓壓縮
智圖壓縮
Apk結構解析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章