校招大學生簡歷制作模板(ps:程序員簡歷)
907
2025-04-01
實際開發應用時,包體積優化是必不可少的。畢竟手機內存有限,如果包體積過大很多用戶會直接放棄(以前手機內存很小的時候,這個真的很重要),現在由于手機內存大了(512G已經擋不住了),現在的用戶更關注流暢度和美觀作為參考,但是該有的優化還是要優化的,畢竟要盡善盡美嘛。上一篇文章我們了解了安裝包的結構。
本文主要分兩部分:
安裝包監控、
安裝包大小優化。
實際開發應用時,包體積優化是必不可少的。畢竟手機內存有限,如果包體積過大很多用戶會直接放棄(以前手機內存很小的時候,這個真的很重要),現在由于手機內存大了(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)選項,則是我們需要轉換的了,剩下的提示進行就可以啦。
使用 tint 著色器
純色圖片,僅修改顏色就要再導入一張圖片,比較占資源,這時我們使用tint就避免浪費資源和時間。
tools:igore的作用就是忽略一些指定錯誤,或者 抑制警告。
使用 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 上發布的項目,國內目前還是通過各家的插件化方案來實現動態部署,一定程度上也可以算作減少安裝包大小的方案。
還有一個騷操作,就是前期資源打包,后續資源用戶邊玩邊下載,缺點可能造成卡頓和浪費流量,僅供參考。
Android Android Studio 移動APP
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。