1. 程式人生 > >【轉】最佳實踐 —— 詳細談談如何減小APK體積

【轉】最佳實踐 —— 詳細談談如何減小APK體積

本篇文章轉載自http://www.cnblogs.com/soaringEveryday/p/5254520.html
作者寫的很詳細
格式略有調整

以下正文

隨著Android移動開發的需求越來越複雜,我們不可避免的遇到釋出出去的apk體積越來越大的問題,目前超過10MB、20MB的apk已經是很常見的事情了,但是依然能夠看到一些apk的體積控制的很小。apk體積增大源於:

  • 新需求不斷的提出
  • 需要支援高解析度的螢幕而加入了高分圖片
  • 依賴了更多的第三方庫

本文將從我自己的經歷專案中探討如何有效減小apk的體積。減小Apk體積是一件很有用處的android優化手段,降低了使用者需要下載的位元數,同時也降低了分發安裝時失敗的概率。

將apk解壓後發現,體積佔大頭的分辨是lib資料夾、res資料夾和dex檔案。所以我們的降低apk體積的策略也應當從如何縮減so檔案資源圖片控制程式碼質量上來入手。

這裡寫圖片描述

使用Progruard

Proguard是Android很早就使用的程式碼混淆工具,除了用於混淆程式碼提高安全性以外,他在程式碼編譯的時候也會通過遍歷程式碼的方式來發現沒有被呼叫的程式碼,從而將其在打包成apk時剔除,最終一定程度上降低了apk的大小。

但是Proguard使用時候是要注意的,因為程式碼中利用反射機制的地方會被Proguard工具破壞,所以要慎重的編寫混淆例外檔案,同時對於混淆後打包出來的apk要重新充分迴歸測試下。

使用Android Lint

Proguard提供了程式碼的縮減方式,而Lint對於res下面的資源進行了充分的優化,他會提供一份報告給你,從而通知你哪些資源沒有被用到,顯然剔除這些資源是可以減少apk體積的。這些資源包括res資料夾下所有的內容,比如圖片、字串、尺寸等等。現在Android Lint已經整合到了Android Studio中,用法很簡單。

進入Android Studio的選單中選擇Analyze->Inspecting Code即可
這裡寫圖片描述

分析完畢後在Inspection選項卡中會有一份詳細的報告,找到Android Lint專案
這裡寫圖片描述

拉到下面Unused resource這一欄開啟,即是未被使用的資源列表,使用者可以參照來手動刪除資源

相關推薦

最佳實踐 —— 詳細談談如何減小APK體積

本篇文章轉載自http://www.cnblogs.com/soaringEveryday/p/5254520.html 作者寫的很詳細 格式略有調整 以下正文 隨著Android移動開發的需求越來越複雜,我們不可避免的遇到釋出出去的apk體積越來越

最佳實踐 —— 詳細談談如何減小APK體積

隨著Android移動開發的需求越來越複雜,我們不可避免的遇到釋出出去的apk體積越來越大的問題,目前超過10MB、20MB的apk已經是很常見的事情了,但是依然能夠看到一些apk的體積控制的很小。apk體積增大源於: 新需求不斷的提出 需要支援高解析度的螢幕而加入了高分圖片 依賴了更多的第

Android最佳實踐 —— 詳細談談如何減小APK體積

這是我們專案組安卓主力總結的如何減小APK體積的文章,很詳細,有很多大家平時不注意的技巧,分享下隨著Android移動開發的需求越來越複雜,我們不可避免的遇到釋出出去的apk體積越來越大的問題,目前超過10MB、20MB的apk已經是很常見的事情了,但是依然能夠看到一些apk

Kubernetes最佳實踐3:服務部署與彈性伸縮

作者:彭靖田 在Kubernetes的世界中,一切服務都是跑在容器中的,最簡單的容器組是Pod。基於現實世界中的具體任務,Kubernetes抽象了更高階的容器組,如:ReplicaSet、Deployment、Job等。對於Web型別的長週期服務來說,重點考察兩個需求:

視訊H5 video最佳實踐

原文地址:https://github.com/gnipbao/iblog/issues/11 隨著 4G 的普遍以及 WiFi 的廣泛使用,手機上的網速已經足夠穩定和高速,以視訊為主的 HTML5 也越來越普遍了,相比幀動畫,視訊的表現更加豐富,這裡介紹一些實踐經驗 video的屬性 <v

編寫最佳的Dockerfile的實踐

Dockerfile的語法非常簡單,然而如何加快映象構建速度,如何減少Docker映象的大小卻不是那麼直觀,需要積累實踐經驗。這篇部落格可以幫助你快速掌握編寫Dockerfile的技巧。 目標: 更快的構建速度 更小的Docker映象大小 更少的Docker

MongoDB 應用場景、避坑事項與最佳實踐

  MongoDB 是一個高效能,開源,無模式的文件型資料庫,是當前 NoSQL 資料庫產品中最熱門的一種。它在許多場景下可用於替代傳統的關係型資料庫或鍵/值儲存方式,MongoDB 使用 C++開發。 為什麼要用 NoSQL NoSQL,全稱是”Not Only Sql”,指的

CentOS 7.0 安裝Redis 3.2.1詳細過程和使用常見問題

nec count ges des useful 內存 warning before outside http://www.linuxidc.com/Linux/2016-09/135071.htm 環境:CentOS 7.0 Redis 3.2.1 Redis的安裝與啟動

讓你不再害怕指針——C指針詳解(經典,非常詳細)

有一個 情況 value 第一個字符 接下來 意思 strcpy abcdefg 數值 前言:復雜類型說明 要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型裏會出現很多運算符,他們也像普通的表

自動化運維工具SaltStack詳細部署

lib64 time 兩個 功能 .so odi 組件 部分 srv ==========================================================================================一、基礎介紹======

一.Select 函數詳細介紹

perror socket編程 這樣的 發生 結構體 阻塞 get 成功 系統 轉自:http://www.cnblogs.com/hjslovewcl/archive/2011/03/16/2314330.html Select在Socket編程中還是比較重

Python max內置函數詳細介紹

使用 pri 數據 否則 索引 def 取數 而且 ace #max() array1 = range(10) array2 = range(0, 20, 3) print(‘max(array1)=‘, max(array1)) print(‘

MFC OnIdle的詳細說明

理解 輸入 成員函數 並且 重載函數 未處理 target spa 命令 轉載出處:http://blog.csdn.net/tsing_best/article/details/25055707 CWinApp::OnIdlevirtual BOOL OnIdle( LO

前後端分離實踐

研發 定義 logger 收益 認知 業務邏輯 mvc框架 我們 成功 前言 為了解決傳統Web開發模式帶來的各種問題,我們進行了許多嘗試,但由於前/後端的物理鴻溝,嘗試的方案都大同小異。痛定思痛,今天我們重新思考了“前後端”的定義,引入前端同學都

Fragment對用戶可見的判斷實踐,親測有效

有一個 跳轉 orm from defaults 才會 over als class 概述 相信很多使用過 Fragment 的朋友都對判斷 Fragment 是否對用戶可見有此疑問,網上有很多文章也介紹得比較片面,只覆蓋到了其中一種情況。我在項目中也有遇到這樣的

docker之Dockerfile實踐

b2c size ebe rem 目錄 all 緩存 local title 上一篇介紹了Dockerfile中使用的指令,現在開始進行指令實踐 先查看下本地的鏡像,選一個作為base image: [root@docker ~]# docker images REPO

docker+jenkins+git持續部署實踐

ref workspace 重要 star ng- 匿名 web del 目錄 寫在前面 以前搭建spring-cloud的時候 看到別人代碼裏面總有Dockerfile,然後了解到docker容器的概念,玩了兩個星期玩不下去了,就放下了,無意間在網上看到一篇文章Docke

內核中container_of宏的詳細分析

按位與 指針常量 並且 cast 例子 找到 eof 運算符 gnu 轉自:http://blog.chinaunix.net/uid-30254565-id-5637597.html 內核中container_of宏的詳細分析 16年2月2

python_docx制作word文檔詳細使用說明

styles 添加 情況下 方式 word文檔 ble har 功能 所有 目前網上對這一個庫的介紹得很少,很零散,所以很多功能我是盡量參考其官網,但是官網上面很多功能目前只有說明文檔,而代碼並還沒有及時更新,以至於按照官網上面做了,python卻報錯。比如:自定義表格的高

成員函式的過載、覆蓋與隱藏(詳細

(轉自:https://blog.csdn.net/weixin_42205987/article/details/81569744) 成員函式的過載、覆蓋與隱藏 成員函式的過載(overload)、覆蓋/重寫(override)與隱藏/重定義(hide)很容易混淆,C++程式設計師必須要搞