<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## apk組成 apk包含應用所有所需資源的 zip 包,它包含了如下所示的幾個組成部分: ![](https://img.kancloud.cn/f9/c7/f9c71d660d549d62efa2ca1f487a9c87_477x309.png) ## 圖片資源 對安裝包內所有PNG圖片進行二次無損壓縮,列出大小可被進一步壓縮的文件及壓縮比例。 注:壓縮流程是先使用PngCrush工具優化圖片,再使用OptiPNG進行無損壓縮。 目前是先用pngcrush進行壓縮,然后再用optipng進一步壓縮 pngcrush工具鏈接:https://pmt.sourceforge.io/pngcrush/,壓縮命令:"pngcrush source dst" optipng工具鏈接:http://optipng.sourceforge.net/,壓縮命令:"optipng -out dst src" ## dex優化 在 AGP 的構建過程中,Java 或 Kotlin 源代碼在經過編譯之后會生成 Class 字節碼文件,在這個階段 AGP 提供了 Transform 來做字節碼的處理,我們非常熟悉的 Proguard 就是在這個階段工作的,之后 Class 文件經由 dexBuilder 生成一堆較小的 DEX 文件,再經由 mergeDex 合并成最終的 DEX 文件,然后打入 APK 中。具體過程如下圖所示: ![](https://img.kancloud.cn/b8/d7/b8d79a6e044663992e00d8ddeaf59776_1080x255.png) 因此,我們針對 DEX 文件的優化時機可以從分別從三個階段切入,分別是.kt 或.java 源文件、class 文件、DEX 文件: * 在源文件進行處理也就是手動改造代碼,這種方式對程序設計本身有侵入,并且有較強的局限性; * 在 class 字節碼階段對開發者無感知,而且基本上能完成大多數的優化,但對于像跨 DEX 引用優化這樣涉及 DEX 格式本身的優化無法完成; * 在 DEX 文件階段進行優化是最理想的,在這個階段我們除了能對 DEX 字節碼本身進行優化,也可對 DEX 文件格式進行操作。 優化的手段總體上來說也就是冗余去除、內容精簡、格式優化等方式。 由于早期抖音 class 字節碼修改工具建設比較成熟,我們很多包體積的優化都是通過修改 class 字節碼完成的,隨著優化的深入,后期也有很多優化是在 DEX 文件階段處理的。關于 DEX 階段相關的優化我們后續會有相關文章介紹,這里主要介紹 Class 字節碼階段進行的相關優化,主要分為兩大類: * 單純去除無用的代碼指令,包括**去除冗余賦值,無副作用代碼刪除**等 * 除了能減少代碼指令數量外,同時減少方法和字段的數量,從而有效減少 DEX 的數量。我們知道 DEX 中引用方法數、引用字段數等不能超過 65535,超過之后就需要新開一個 DEX 文件,因此減少 DEX 中方法數、字段數可以減少 DEX 文件數量,像**短方法內聯、常量字段消除、R 常量內聯**就屬于這類優化。 ## 動態庫優化 在一些需要安全高性能的常見,應用中需要采用native來實現。android平臺提供了適配各種cpu架構的可能,包括x86 arm mips等,包活arm也有v7 v8等。針對不同cpu我們可以選擇打不同包,gradle腳本中通過api也可以限制。或者損失一些性能,只采用arm最低版本也是可以兼容的。對于某些不常用功能,我們也能用動態加載,運行時再下載so到本地。 ## 參考資料 [抖音 Android 包體積優化探索:從 Class 字節碼入手精簡 DEX 體積](https://juejin.cn/post/7052614577216815134)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看