天天看點

從APK角度提升App性能【Apk瘦身加強】APK的基本概念定義分工,優化APK是誰的責任?APK加強總結資料

APK的基本概念

在Android裝置上,直接運作APK檔案即可完成安裝

APK檔案其實是zip格式,但字尾名被修改為apk,通過解壓,可以看到Dex檔案,Dex是DalvikVM executes的簡稱,即Android Dalvik執行程式,并非Java ME的位元組碼而是Dalvik位元組碼

下圖是解壓之後的APK目錄

從APK角度提升App性能【Apk瘦身加強】APK的基本概念定義分工,優化APK是誰的責任?APK加強總結資料
  1. META-INF\ (注:Jar檔案中常可以看到);
  2. res\ (注:存放資源檔案的目錄) ;
  3. AndroidManifest.xml (注:程式全局配置檔案) ;
  4. classes.dex (注:Dalvik位元組碼);
  5. resources.arsc (注:編譯後的二進制資源檔案)。
windows平台檢視某一個檔案的大小應該不是很困難的事情吧?

定義分工,優化APK是誰的責任?

首先得從APK的解壓目錄說起

通常來說占據APK記憶體大小的前四名為 classes.dex>=res>assets>lib

直接由程式員産生的其實隻有classes.dex檔案,因為這都是Java代碼,是以在這裡某些程式員同仁可能要甩鍋了,“APK安裝包過大,明明就是UI,美工切圖的問題!”

  1. 給的圖檔太占記憶體?寬高幾百像素的Imageview,UI給了我2M的圖檔,尼瑪,坑比!
  2. 圖檔适配給的太多?1280*720,1920*1080….整個res目錄全是各種分辨率合适嗎?
  3. 阿西巴,日語,韓語,英語,法語…?國際化素材打包這麼多?關鍵還包含北韓語,什麼鬼?
  4. 應用寶首發,小米首發,各種首發,需要高清大圖,安裝包滿的塞不下啦!

其實不然,不論我們拿到怎樣設計稿,切圖,作為程式員,我們都應該優雅的解決:

  1. 對UI給的圖檔進行極緻壓縮
    • 格式壓縮,PNG轉成WebP,JPEG,壓縮工具-iSparta
      從APK角度提升App性能【Apk瘦身加強】APK的基本概念定義分工,優化APK是誰的責任?APK加強總結資料
      由此可見WebP的體積減少最高可至80%!
    • 尺寸壓縮 壓縮工具-tinypng,可以實作在無損壓縮的情況下圖檔檔案大小縮小到原來的30%-50%
  2. 圖檔僅使用一套,目前來說放在hdpi或者xhpdi目錄下都可以
  3. 國際化,多管道,針對不同情況下,由程式員打不同的APK包

    方法1:打包過程中,清除沒有被引用過的資源通過

    shrinkResources true

    minifyEnabled true

    android {
        ...
        buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'),
                        'proguard-rules.pro'
            }
        }
    }
               
    方法2:通過

    resconfig

    屬性指定的語言。未指定的語言的任何資源都被删除。
    android {
        defaultConfig {
            ...
            resConfigs "en", "fr"
        }
    }
               
    方法3:

    APK Splits

    建構APK,支援按不同ABI,不同分辨率分割打包APK
    android {
      ...
      splits {
        density {
          enable true
          exclude "ldpi", "tvdpi", "xxxhdpi"
          compatibleScreens 'small', 'normal', 'large', 'xlarge'
        }
      }
               
    abi {
          enable true
          reset()
          include 'x86', 'armeabi-v7a', 'mips'
          universalApk true
        }
               

其次美工們也應當從根源上做起,切圖時需要遵循“圖檔像素不浪費”原則,設計稿标注多大的像素,那麼切的圖就應當為多大,此外,儲存圖檔格式時,可以适當降低圖檔品質,達到減小圖檔大小的問題。

APK加強

本人對加強技術所知甚淺,此處參考兩篇資料作出總結

  1. 對時下流行的Android應用加強技術分析
  2. Android App安全加強行業分析報告
    大多數移動安全廠商其實的加強方案是整體dex加密技術,定制版加強與免費版加強方案上沒有差別,都是可執行檔案的加密保護。

總結資料

  1. 圖檔壓縮工具-iSparta
  2. 圖檔壓縮工具-tinypng
  3. 指定打包某一些資源檔案至APK中,清除沒有被引用的資源
  4. Wep探尋之路
  5. 對時下流行的Android應用加強技術分析
  6. Android App安全加強行業分析報告