面試Tip:Android優化之APK瘦身

我是程式設計師七貓發表於2018-05-30

image
每到夏日我們就因為增長的體重而拼命瘦身,那麼在面對越發龐大的APK,你又是如何進行APK瘦身呢?

APK檔案結構


  1. META-INF\(Jar檔案中常可以看到)

  2. res\(存放資原始檔的目錄)

  3. AndroidManifest.xml(程式全域性配置檔案)

  4. classes.dex(Dalvik位元組碼)

  5. resources.arsc(編譯後的二進位制資原始檔)

AndroidStudio分析APK檔案大小


使用AS的Build-Analyze APK

檢視APK包內各個文字資源大小

面試Tip:Android優化之APK瘦身

APK瘦身思路


1.圖片處理

1)使用一套圖

一般市場上使用一套圖就能夠適應大部分需求,使用720dp解析度,放置於xhdpi

2)使用TinyPng壓縮圖片

官網

圖片壓縮後對視覺影響不大,但體積顯著減小

3)使用webp

4)使用jpg替代png

使用jpg替換不需要保留透明區的png

5)使用向量圖

VectorDrawable

AnimatedVectorDrawable

6)使用shape背景

7)使用selector檔案

8)使用tintColor

9)使用.9圖

2.去除多餘資源

1)Andorid Studio Lint

AS的Analyze Run Inspection By Name

輸入unused resources查詢多餘的資源

2)shrinkResources

使用資源縮減器,去除無用資源

buildTypes { 
    release { 
    shrinkResources true
    minifyEnabled true 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
}
複製程式碼

3)resConfigs

通過resConfig屬性指定語言(未指定的語言的任何資源都會被刪除)

android {
    defaultConfig { 
        ... resConfigs " zh","en"
    }
}
複製程式碼

3.縮小資源AndResGuard

微信資源混淆打包工具AndResGuard

“AndResGuard是一個幫助你縮小APK大小的工具,

他的原理類似Java Proguard,但是隻針對資源。

它會將原本冗長的資源路徑變短,

例如將res/drawable/wechat變為r/d/a”

官網

4.去除多餘包依賴

第三方庫裡包含了你所需的引用包,則無需額外引入

使用Android Studio檢視包依賴

android studio 終端terminal輸入

gradlew  :Your Module Name:dependencies 
複製程式碼

或者使用

gradlew  :Your Module Name:dependencies --configuration compile(或者implementation)
複製程式碼

可以檢視到詳細的包依賴關係

5.去除冗餘程式碼

Proguard

ProGuard是一個壓縮、優化和混淆Java位元組碼檔案的免費的工具,它可以刪除無用的類、欄位、方法和屬性。

可以刪除沒用的註釋,最大限度地優化位元組碼檔案。

它還可以使用簡短的無意義的名稱來重新命名已經存在的類、欄位、方法和屬性。

buildTypes {
    release {
    minifyEnabled true //開啟混淆
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆配置檔案
    }
}
複製程式碼

6.APK分割splits

android {
    ...
    splits {
        density {
            enable true //開啟apk分割功能
            exclude "ldpi", "tvdpi", "xxxhdpi" //exclude排除
            compatibleScreens 'small', 'normal', 'large', 'xlarge' //將注入到mainfest配置compatible-screens中
        }
        abi { 
            enable true
            reset() //重置列表,與include搭配使用,指定生成include包含的apk
            include 'x86', 'armeabi-v7a', 'mips' //include包括
            universalApk false // 不打包一個通用版本(包含所有的ABI)
        }
}
複製程式碼

7.線上資源&H5

線上資源替代本地資源或者使用h5

--------------我是快樂的分割線--------------

以上就是今天TIP的內容了

願你的APK瘦瘦瘦,願你的身材棒棒棒~

本人公眾號 不定期更新 歡迎關注與建議

程式設計師七貓

相關文章