Android 瘦身之道 ---- so文件

Android 瘦身之道 ---- so文件

[TOC]java

1. 前言

目前Android 瘦身只有幾個方面能夠入手,由於apk的結構就已經固定了。web

  1. res 目錄下的資源文件。(一般是壓縮圖片,好比 矢量圖 --> webp --> png 等。)瀏覽器

  2. src 目錄下的java文件。(一般是混淆,壓縮等。)微信

  3. asset 目錄下的資源文件。(相似 res 目錄。)架構

  4. lib 目錄下的第三方庫。(gradle 依賴的其實也能夠算到這個目錄下,通常就是不要引用重複功能的第三方庫等。)gradle

  5. so庫 (這個實際上是很頑固的東西,你無法壓縮它,若是沒有用到還好,用到了它體積3MB就是 3MB 沒有壓縮的空間了,更要命的是一般還不止放一套!本文主要談這個。)動畫

關於 APK 瘦身,我以爲這篇文章總結的不錯:Android-APP終極瘦身指南spa

2. ABI 的種類

官方的一張表格列舉了經常使用的幾種 CPU 架構。blog

abi

3. 目前主流 APP 所用的 ABI 各是哪些

數據是 2017/4/8看的市場最新版,採集的幾個表明性樣本以下:教程

僅有 armeabi : 微博,今日頭條,淘寶,QQ,微信。
armeabi 與 armeabi-v7a: UC 瀏覽器。
armeabi,armeabi-v7a,armeabi-x86:優酷,嗶哩嗶哩動畫。
7種類型全有:知乎。

厲害了知乎

我也看了目前流行的遊戲 王者榮耀(由於我只安裝了它。。。哈哈),發現它僅有 armeabi-v7a

4. ABI 兼容性

目前搜索的資料總結以下:

  • armeabi-v7a :armeabi-v7a向下兼容armeabi

  • arm64-v8a : 能兼容 armeabi-v7a 和 armeabi

  • x86_64 : 兼容 x86

  • mips64 : 兼容 mips

注意: 兼容只是理論上的,實際仍是可能有極少數手機會崩潰,這是不可避免的。

5. 動態加載 so 文件

當你加上更多的支持架構以後,發現包體的增加已經影響了用戶的下載意願。廣告的轉化率提不上去啊,運營會找你麻煩的!

可能的一個解決方法是:分別發不一樣架構的包,讓用戶本身去選擇(太傻了,並且用戶哪有那麼聰明)。

最好的方案仍是動態下載 so 文件,發佈的 APK 不包含 Native 代碼,啓動時根據不一樣的架構下載相應的 so 文件。

道理很簡單,並且網上也有一堆堆的教程,我也不細說。須要注意的是必定要將下載的 so 文件放置在程序目錄才能夠 load,不然會遇到權限問題。

6. 總結

實際咱們只須要保留 armeabi差很少就夠了,更好的方案是動態的加載 so文件,已達到兼容性和apk文件大小的控制的目的。

相關文章
相關標籤/搜索