1. 程式人生 > >Android如何減少apk大小

Android如何減少apk大小

因為推廣的需要,公司需要把APK的大小再“減小”一下,4M以內!

當達到4M以內之後,公司建議說,能否再壓壓?2M如何?

瘦身前

因為平時就考慮到大小的限制,所以很多工作已經做過了,如下列舉現在的狀態:

  1. 7.3M(Debug版本)和6.5M(Release版本)
  2. 開啟minifyEnabled
  3. 開啟shrinkResources
  4. 已經去除不相關的大型庫
  5. 圖片和程式碼已經經歷過粗略的一輪清理

開始魔鬼瘦身

1. tinypng有失真壓縮

Android打包本身會對png進行無失真壓縮,不信大家可以看看apk中的圖片的大小實際上比你程式碼工程裡的圖片要小(針對沒進行過無失真壓縮的那些png圖)。
所以,純粹的進行無失真壓縮並不會對apk的減小有任何效果,這是我特別想在這裡強調的一個經驗。
現在大家主流的比較喜歡用的tinypng其實是有失真壓縮:

https://tinypng.com/
[原文] TinyPNG uses smart lossy compression techniques to reduce the file size of your PNG files…
[翻譯] TinyPNG使用智慧有失真壓縮技術,來減少PNG檔案的大小…

通過tinypng確實能在儘量少的損失下再減小apk,如果圖片資源多或者大的話,效果還是很明顯的。
具體減少多少,因為這個處理過程我們是間隔做的,無法準確給出結果,就按200k~500k算吧。

2. png換成jpg

經驗發現,一些背景,啟動頁,宣傳頁的PNG圖片比較大,這些圖片圖形比較複雜,如果轉用有損JPG可能只有不到一半(當然是有損,不過通過設定壓縮引數可以這種損失比較小到忽略)。
因為都是大圖,所以這種方式能有效減小apk的大小。
這種情況下的apk的減小是不可估量的。

3. jpg換成webp

如果png大圖轉成jpg還是很大,或者想壓的更小,而儘量不降低畫質,那麼可以考慮一下webp。

android 4.0+才原生支援webp, 但是我們的app是相容2.3+,所以4.0以下的裝置將無法看到圖片。

  1. 考慮到我們4.0以下的所有裝置比例之和大約在0.44%,非常少
  2. 4.0以下的裝置不會崩潰

我們選擇不對4.0以下做webp相容處理,不顯示就不顯示。否則,要引入webp相關so檔案增大apk大小。

通過把下面四張大圖換成webp,webp的quality引數按50配置(據說官方評測75是最佳值),清晰度勉強可以接受,這個值大傢俱體按產品要求來定。

jpg大圖轉webp
其中安裝jpg轉webp工具:

Java
1brew install webp

轉換命令如下

Java
1 cwebp-qinput.jpgoutput.webp// Example:cwebp -q 50 a.jpg a.webp

最終,apk減小了188k。

4. 大圖縮小

如果經過上面的步驟,依然存在大圖的話,說明確實圖有點大了,可能真的有點大了!
所以,要考慮的問題是,是否有必要保證如此的大小?能否縮小?
如果這方面能減小的話,apk瘦身的效果必然又會上一個檔次。
這種情況下的apk的減小是不可估量的。

5. 覆蓋aar裡的一些預設的大圖

一些aar庫裡面包含根本就沒有用的圖。最典型的是support-v4相容庫中包含一些“可能”用到的圖片,實際上在你的app中不會用到。
support庫資源替換
我沒有把所有圖都替換掉,只是把幾張大一點點的圖(選中的那些圖)用1×1的圖片替換,如果9patch圖的話,要做成3×3的9patch圖替換。
support庫可能還算好的,就怕有些庫引用了一些大圖而不自知,可以在/build/intermediates/exploded-aar/下的各個aar庫的res目錄查詢檢驗。
apk減小了18k。

6. 刪除armable-v7包的so

感謝@楊輝__ ,@kymjs張濤的提醒,armable-v7和armable資料夾可以只保留armable。
當然,armable-v7a的庫會對圖形渲染方面有很大的改進,因為我們主要是一些業務上動態庫,所以刪掉無大礙。
armable-v7a的so檔案列表
apk減小了191k。

7. 微信資源壓縮打包

這個方案網上一直在說,之前一直沒有需求或者動力實踐,在這裡感謝一下@裸奔的凱子哥的推薦和交流,他那邊的apk可以壓小1M,效果還是比較驚人的。
這個步驟我是在後面很多步壓縮之後測試的,每個階段的壓縮結果都會有些許出入,所以資料僅供參考。
微信壓縮方案結果比較
通過正常壓縮,apk包減小了464k。
如果開啟7zip,apk包減小了594k。
apk減小了594k。

PS: 關於這個壓縮,我整合到了gradle指令碼中了,新建了一個Task,大概程式碼如下:

Java
1234567891011121314taskcompressReleaseApp{// 在現有release的版本上生成到compressed目錄下def appid="appid"def channel="abcdefghijkl"def guardJarFile=file('../AndResGuard/andresguard-1.1.jar')def guardConfigFile=file('../AndResGuard/config.xml')def originApkFile=file("../app.${appid}/build/outputs/apk/release/${appid}-release-${rootProject.ext.versionName}-${rootProject.ext.versionCode}-${channel}.apk")def outputDir=file("../app.${appid}/build/outputs/apk/compressed/")def keystoreFile=file(RELEASE_STORE_FILE)// 開始執行壓縮命令def proc="java -jar ${guardJarFile} ${originApkFile} -config ${guardConfigFile} -out ${outputDir} -signature ${keystoreFile} ${RELEASE_STORE_PASSWORD} ${RELEASE_KEY_PASSWORD} ${RELEASE_KEY_ALIAS}".execute();proc.waitFor();println"return code: ${ proc.exitValue()}"+", stderr: ${proc.err.text}"+" stdout: ${proc.in.text}"}

config開啟了7zip, 部分配置如下:

Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xmlversion="1.0"encoding="UTF-8"?> <resproguard> <

相關推薦

Android 減少APK大小--壓縮圖片資原始檔

開啟這個網站  https://tinypng.com/ 將demo裡面的圖片資原始檔一個一個放進去,他會自動生成新的壓縮圖片 下載後替換原來的圖片就行了 注意   有些圖片壓縮後,可能效果不是很好,特別是大的圖片,最好多檢查一下 一般 情況還是可以的

Android如何減少apk大小

因為推廣的需要,公司需要把APK的大小再“減小”一下,4M以內! 當達到4M以內之後,公司建議說,能否再壓壓?2M如何? 瘦身前 因為平時就考慮到大小的限制,所以很多工作已經做過了,如下列舉現在的狀態: 7.3M(Debug版本)和6.5M(Release版本)開啟mini

【騰訊Bugly乾貨分享】Android減包 - 減少APK大小

本文是對Google官方文件 Reduce APK Size 的翻譯,點選“閱讀原文”可以檢視英文原文。 譯者簡介:damonxia(夏正冬),天天P圖Android工程師 使用者經常會避免下載看起來體積較大的應用,特別是在不穩定的2G、3G

簡單好使的操作——將Android apk大小減少 60%

越小越好 作為一個開發者我們總是更關心應用的效能,設計和使用者體驗。但是,大多數開發者都忘了(或低估)一件事:應用體積。如果你希望你的應用能吸引大量使用者,這是非常核心的一點。 市場上大概有 11000 種安卓機型,而其中大部分都是低端機,有限的儲存(1GB 到 8GB),甚至用的還是 2G 或者 3G 網

7.xamarin.android 發布簽名與控制apk大小

其他 alt 等待 標識 執行 國內 ima 應用 需要 概述 做了xamarin android 後大家想打包一個apk,發布給其他人使用本章我們將帶領大家如何打包簽名一個apk。 打包 對於VS2017 或者是VS MAC來說打包一個APK非常簡單。 首選

Android 安裝包大小優化(Apk瘦身)

目錄 1. 為什麼? APK越大,在下載安裝過程中,耗費的流量會越多,安裝等待的時間也會越長,安裝包的大小對下載的失敗率也有影響。而對於應用本身,就意味著下載轉化率會越低,在競品中,使用者更願意選擇功能多,體驗號,安裝包最小的應用。

Android產品研發(四)-->減小Apk大小

隨著移動技術的深入發展,各種炫酷效果的更新,在我們追求UI與UE的同時一個不如忽視的問題逐漸暴露出來,那就是apk檔案越來越大,可能有的童鞋會說現在都是wifi環境,apk檔案增大幾M不是什麼大不了的問題,這其實也是有一定道理的,但是作為開發人員的我們這絕不

Android apk大小優化之自我實踐

前言:第一篇部落格,純屬筆記,以便日後使用。如有不足,請諒解! 一、概述 最近剛做完光大銀行的一款社群生活服務類APP,但是在打包簽名時發現apk太大了,將近18M,如下圖所示: 於是,我便花了一

Android整合OpenCV並減少大小

前言 最近完成了Android上使用OpenCV進行影象拼接的功能,通過匯入OpenCV的.so或.a庫,JNI封裝C++程式碼供Java層呼叫,同時在CMakeLists中指定自己需要的.a庫以減少庫的大小,畢竟我只用了拼接功能,其它諸如dnn、vide

Android開發之減小APK大小

1.前言: APK的大小對APP的載入速度,使用記憶體大小和消耗功率多少有一定影響。如何減小APK的大小對於Android開發者是一個永恆的話題。查閱了很多相關資料,並將其做了刪減以及總結,首先就來了解一下APK的組成結構。 2.APK組成結構: META-I

Android開發——減小APK大小

0. 前言 APK的大小對APP的載入速度,使用記憶體大小和消耗功率多少有一定影響。如何減小APK的大小對於Android開發者是一個永恆的話題。 首先就來了解一下APK的組成結構。 1. APK的組成結構 META-INF:包含CERT.SF和CERT.RS

android studio gradle打包,怎麼樣通過打不同的包名所依賴的專案不同,即所生成的apk大小不一樣呢(每個apk不包含所有的依賴的專案)

問題:gradle打包,怎麼樣通過打不同的包名所依賴的專案不同,即所生成的apk大小不一樣呢(每個apk不包含所有的依賴的專案)??? 解決:通過修改build.gradle檔案中 在android{}新增如下程式碼:   在dependencies{}中新增 “F

andriod studio 減少打包apk大小

android studio打包發現比eclipse大太多了,因此,減少大小就很有必要了。 轉載: 減少圖片:http://www.cnblogs.com/soaringEveryday/p/5148881.html 剔除無用程式碼:http://m.blog.csdn.n

android精簡apk大小

目的:縮小apk檔案的大小 解決方案:通過工具檢測android應用程式中未使用的資源(包括圖片甚至字串) 工具下載地址:https://code.google.com/p/android-unused-resources/ 使用方法:將下載下來的jar包放到android

android studio 清除無用資源,縮減apk大小

直接上圖 編輯配置檔案,直接打包即可,已親測,Apk 7.56M已減肥至5.93M,減肥成功!!! buildTypes { release { minifyEnabled true

Android減小Apk大小的常用方法

我們之所以要減小apk的大小,一方面是為了節省使用者手機的記憶體;另一方面是為了節省使用者在App安裝和版本升級時的流量; 直接減小apk檔案大小的方法: 1.使用圖片壓縮工具; 目前常用的工具是: ImageOptim,壓縮效果很好,使用預設配置即可。

怎樣減少 Android 應用包大小

對於移動應用來說,應用安裝包的大小當然是越小越好。特別是對於一些欠發達地區,你不希望使用者因為手機「儲存空間不足」而解除安裝你的應用。 本文就介紹了幾個小技巧來有效減少 apk 的大小: 首先,我們先用 Android Studio 提供的 APK Analyser

將HTML5封裝成android應用APK文件的幾種方法

android作為下一代的網頁語言,HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在於能夠實現跨平臺遊戲編碼移植,現在已經有很多公司在移動 設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普,HTML5技術有著非常好的發展前景,甚至有人預言HTML5將引燃 移動平臺遊

Androidapk動態載入技術研究(2)android插件化及實現

name creat package path iss fontsize 調用 dex con 了解了android中類載入的前期知識點後,來看看android中DexClassLoader詳細的實現 詳細載入流程例如以下: 宿主程序會到文件系統比

Androidapk源代碼的改動--反編譯+源代碼改動+又一次打包+簽名【附HelloWorld的改動實例】

str 技術 命令行 文章 color 不同的 pop ogl 方法 最近遇到了須要改動apk源代碼的問題,於是上網查了下相關資料。編寫了HelloWorld進行改動看看可行性,經過實驗證明此方案可行,而且後來也成功用這種方法對目標apk進行了改動,僅僅只是