<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] 參見官方文檔:[https://developer.android.com/topic/performance/reduce-apk-size?hl=zh-cn](https://developer.android.com/topic/performance/reduce-apk-size?hl=zh-cn) ## 了解APK結構 ![](https://img.kancloud.cn/97/65/9765ec02f7c6bef887f2c7cd1f583dac_951x609.png) ## 縮減APK大小 使用App Bundle上傳應用不適用于國內環境,暫不介紹。App Bundle 針對不同用戶的設備配置,提供經過優化的 APK,只需下載運行應用時所需的代碼和資源,無需再編譯、簽署和管理多個 APK 以支持不同的設備。可以使用Android Size Analyzer插件或者命令行對項目進行分析,以確定哪些文件可以進行動態分發。 針對于國內的生態環境,我們主要從以下幾個方面進行APK大小的優化: ### 縮減資源數量和大小 #### 1、移除不使用的資源文件 項目迭代過程中UI不斷優化,部分資源文件不再使用,但仍存在于項目并被打包到APK中。可以使用`lint`工具來檢測未被引用的資源文件。 >`lint`工具不會掃描`assets/`文件夾、通過反射引用的資源或已鏈接至應用的庫文件。此外,它也不會移除資源,只會提醒您它們的存在。 同時,可以在應用的`build.gradle`文件中啟用[`shrinkResources`](https://developer.android.com/studio/build/shrink-code?hl=zh-cn#shrink-resources),Gradle 會自動為我們移除資源。 ```plain android { // Other settings buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } ``` #### 2、減少封裝庫中的資源使用量 #### 3、僅支持特定屏幕密度 目前市場上手機屏幕分辯率以1080P為主流,推薦應用包含一個`xxhdpi`圖片變體即可,低密度的`ldpi`、`mdpi`、`hdpi`等可以考慮移除,Android 會自動縮放最初為其他屏幕密度設計的現有資源。 #### 4、使用可繪制對象 對于可以使用Drawable對象動態繪制的圖片,如背景圖等,推薦使用Drawable對象替代,其占用的空間會比靜態圖片資源小。 #### 5、重復使用資源 對于一些可以重復使用的圖片資源,推薦替換色調調整、陰影設置、旋轉等,重復使用。以下示例展示了通過繞圖片中心位置旋轉 180 度,將“拇指向上”變為“拇指向下”:: ```xml <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_thumb_up" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" /> ``` #### 6、壓縮PNG文件 `aapt`工具可以在編譯過程中通過無損壓縮來優化放置在`res/drawable/`中的圖片資源。例如,`aapt`工具可以通過調色板將不需要超過 256 種顏色的真彩色 PNG 轉換為 8 位 PNG。這樣做會生成質量相同但內存占用量更小的圖片。 使用注意: * `aapt`工具不會縮減`asset/`文件夾中包含的 PNG 文件。 * 圖片文件需要使用 256 種或更少的顏色才可供`aapt`工具進行優化。 * `aapt`工具可能會擴充已壓縮的 PNG 文件。為防止出現這種情況,您可以在 Gradle 中使用`cruncherEnabled`標記為 PNG 文件停用此過程: ```plain aaptOptions { cruncherEnabled = false } ``` #### 7、壓縮PNG和JPEG文件 可以使用[pngcrush](http://pmt.sourceforge.net/pngcrush/)、[pngquant](https://pngquant.org/)或[zopflipng](https://github.com/google/zopfli)等工具縮減 PNG 文件的大小,同時不損失畫質。所有這些工具都可以縮減 PNG 文件的大小,同時保持肉眼感知的畫質不變。 `pngcrush`工具尤為有效:該工具會迭代 PNG 過濾器和 zlib (Deflate) 參數,使用過濾器和參數的每個組合來壓縮圖片。然后,它會選擇可產生最小壓縮輸出的配置。 要壓縮 JPEG 文件,可以使用[packJPG](http://www.elektronik.htw-aalen.de/packjpg/)和[guetzli](https://github.com/google/guetzli)等工具。 #### 8、使用 WebP 文件格式 使用[WebP](https://developers.google.com/speed/webp/?hl=zh-cn)文件格式的圖片(而不是使用 PNG 或 JPEG 文件)。Android Studio提供了轉換單張圖片或整個目錄為WebP格式的方法,具體可參考[https://developer.android.com/studio/write/convert-webp?hl=zh-cn](https://developer.android.com/studio/write/convert-webp?hl=zh-cn) #### 9、使用矢量圖形 可以使用矢量圖形創建與分辨率無關的圖標和其他可伸縮媒體。 #### 10、將矢量圖形用于動畫圖片 請勿使用`[AnimationDrawable](https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable?hl=zh-cn)`創建逐幀動畫,這樣做需要為動畫的每個幀添加單獨的位圖文件,而這會大大增加 APK 的大小。 應改為使用[`AnimatedVectorDrawableCompat`](https://developer.android.com/reference/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat?hl=zh-cn)創建[動畫矢量可繪制資源](https://developer.android.com/training/material/animations?hl=zh-cn#AnimVector)。 ### 減少原生和Java代碼 #### 1、移除不必要的生成代碼 確保了解自動生成的任何代碼所占用的空間。例如,許多協議緩沖區工具會生成過多的方法和類,這可能會使應用的大小增加一倍或兩倍。 #### 2、避免使用枚舉 單個枚舉會使應用的`classes.dex`文件增加大約 1.0 到 1.4KB 的大小。這些增加的大小會快速累積,產生復雜的系統或共享庫。如果可能,請考慮使用`@IntDef`注釋和[代碼縮減](https://developer.android.com/studio/build/shrink-code?hl=zh-cn)移除枚舉并將它們轉換為整數。此類型轉換可保留枚舉的各種安全優勢。 #### 3、縮減原生二進制文件的大小 如果您的應用使用原生代碼和 Android NDK,還可以通過優化代碼來縮減發布版應用的大小。移除調試符號和不提取原生庫是兩項很實用的技術。 ### 總結 綜上可見,縮減APK大小主要從縮減資源文件和縮減原生及Java代碼兩方面入手,著重關注以下幾點: * 移除未使用的資源文件 * 使用可繪制對象 * 壓縮圖片文件,優先使用WebP格式文件 * 避免使用枚舉 * 僅打包有需要平臺的so文件
                  <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>

                              哎呀哎呀视频在线观看