實際開發應用時,包體積優化是必不可少的,畢竟手機記憶體有限,如果包體積過大很多用戶會直接放棄(以前手機記憶體很小的時候,這個真的很重要),現在由于手機記憶體大了(512G已經擋不住了),現在的用戶更關注流暢度和美觀作為參考,但是該有的優化還是要優化的,畢竟要盡善盡美嘛,
安裝包監控
Android Studio 的 APK Analyser
這是 Android Studio 提供的一個 APK 檢測工具,通過它可以查看一個 apk 檔案內部各項內容所占的大小,并且按照大小排序顯示,因此我們很容易觀察到 APK 中哪一部分內容占用了最大空間,APK Analyzer 的使用非常簡單,只要將需要分析的 APK 檔案拖入 Android Studio 中即可(直接點擊專案中的apk也可以),顯示內容類似下圖所示:



從上圖中可以看出classes.dex都代碼檔案,不是很好東,看圖片也占用了比較大的資源空間,因此可以針對性地對其做壓縮優化等操作,(我這個專案是個demo所以顯得代碼占比較多,實際專案中肯定是圖片資源占比相對較大)
從上圖看出,實際上 APK Analyzer 的作用不光是查看 APK 大小,從它的名字也能看出它是用來分析 APK 的,因此可以使用它來分析一些優秀 APK 的目錄結構、代碼規范,甚至是使用了哪些動態庫技術等,
Matrix中 的 ApkChecker(傳送)
Matrix是微信終端自研和正在使用的一套APM(Application Performance Management)系統, Matrix-ApkChecker 作為Matrix系統的一部分,是針對android安裝包的分析檢測工具,根據一系列設定好的規則檢測apk是否存在特定的問題,并輸出較為詳細的檢測結果報告,用于分析排查問題以及版本追蹤,
安裝包優化實踐
Lint查找無用檔案
使用 Lint 查看未參考資源,Lint 是一個靜態掃描工具,它可以識別出專案中沒有被任何代碼所參考到的資源檔案,具體使用也很簡單,只要在 Android Studio 中點擊 Analyze -> Inspect Code,如下所示:

選中整個專案,如下所示

如果專案中有未被使用資源,則 Lint 會在視窗 Inspection Result 中顯示,類似結果如下:

低效布局權重:提供優化方案,

上面就是未使用的資源:會使應用程式變大,并降低構建速度,
還有很多就不多介紹了,感興趣的可以去玩玩,
啟用壓縮、混淆和優化功能
當你使用 Android Studio 3.4 或 Android Gradle 插件 3.4.0 及更高版本時,R8 是默認編譯器,用于將專案的 Java 位元組碼轉換為在 Android 平臺上運行的 DEX 格式,不過,當您使用 Android Studio 創建新專案時,縮減、混淆處理和代碼優化功能默認處于停用狀態,
debug{
// 啟用代碼收縮、模糊處理和優化
minifyEnabled true
// 資源縮減
shrinkResources true
//包括與打包在一起的默認ProGuard規則檔案
//R8組態檔,
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
}
未啟用

啟用后

檔案優化
圖片優化
降低圖片bit

不需要太精致的圖片可以將圖中32 bit降至16 bit或者8 bit,
使用 VectorDrawable 圖片
UI小姐姐能提供最好不能提供,咱們自己自己造,
Android Studio 中點擊 File > New > Vector Asset

Clip Art 項為固有的矢量圖,我們直接用即可,而Local file(SVG,PSD)選項,則是我們需要轉換的了,剩下的提示進行就可以啦,
使用 webp 格式圖片
使用webp格式的圖片可以在保持清晰度的情況下減小圖片的磁盤大小,是一種比較優秀的,Google推薦的圖片格式,
選中圖片>右鍵>選擇


圖片由.png轉為.webp
三方庫優化
在 App 中會引入各種三方的庫,但是在引入之前最好權衡一下是否需要將其代碼全部引入,造成不必要的代碼或者資源也被打包到 APK 中,
例如Facebook全家桶,你不可能全部用到僅匯入部分即可,如登入和分享
dependencies {
// Facebook Core only (Analytics)
implementation 'com.facebook.android:facebook-core:11.1.0'
// Facebook Login only
implementation 'com.facebook.android:facebook-login:11.1.0'
// Facebook Share only
implementation 'com.facebook.android:facebook-share:11.1.0'
// Facebook Messenger only
implementation 'com.facebook.android:facebook-messenger:11.1.0'
// Facebook App Links only
implementation 'com.facebook.android:facebook-applinks:11.1.0'
// Facebook Android SDK (everything)
implementation 'com.facebook.android:facebook-android-sdk:11.1.0'
}
僅需匯入
dependencies {
implementation 'com.facebook.android:facebook-login:11.1.0'
implementation 'com.facebook.android:facebook-share:11.1.0'
}
例如XRecyclerView一個 RecyclerView 實作了 pullrefresh 、loadingmore 和 header featrues,你可能僅用到 loadingmore,那你就可以將關于loadingmore部分截取出來,而不用匯入整個包,
關于 App Bundle
這個功能就跟ios一樣了,他們就是將所有資源全部打到專案中,然后App Store,根據安裝設備的屬性,來選取相應資源打包進行下載,
谷歌的 Dynamic Delivery 功能就天然地解決了這個問題,通過 Google Play Store 安裝 APK 時,也會根據安裝設備的屬性,只選取相應的資源打包到 APK 檔案中,
如下圖,你上傳的700MB大小的aab,但是你下載的話會有兩套資源打在apk中,但是用戶下載僅一套資源700MB,

但是 App Bundle 目前只適合在 Google Play Store 上發布的專案,國內目前還是通過各家的插件化方案來實作動態部署,一定程度上也可以算作減少安裝包大小的方案,
還有一個騷操作,就是前期資源打包,后續資源用戶邊玩邊下載,缺點可能造成卡頓和浪費流量,僅供參考,
文章推薦
Image Asset Studio(圖示生成工具)
aab打包
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/299218.html
標籤:其他
