zoukankan      html  css  js  c++  java
  • Android Apk 瘦身大法

    原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ

    一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也没有把握删除,怕早还曾一些不可预估的问题。

    解决: Android studio 中 Refactor -> Remove Unused Resources 选项就可以删除未用到的资源。

    二,只添加需要的依赖
    比如 我们添加依赖只用到了一个很小的部分,却依赖了整个库,这是没有必要的。

    在 AS 的 Terminal 下输入:$ ./gradlew app:dependencies 可以细分项目依赖。

    三,只打包需要的CPU平台
    android {
    defaultConfig {
      ...
      ndk {
        abiFilters 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'
        // armeabi, mips and mips64 has removed since NDK r17
      }
     }
    }
    

      

    四,为屏幕密度构建多个APK (测试并不能使包体积变小)
    默认情况下,Android Studio 将会生成一个包含所有屏幕密度的通用 APK。在此技能中,你能专门排除或包含你想要在app/build.gradle支持的屏幕密度,Android Studio 将会为你生成多个 APK。
    android {
        splits {
          density {
        enable true
        // Specify a list of screen densities which Gradle won't create multiple APKs for
        exclude 'ldpi', 'mdpi'
        // Specify a list of compatible screen size for the manifest
        compatibleScreens 'small', 'normal', 'large', 'xlarge'
      }
     }
    }

    所以,你需要将他们所有都上传到 Google Play,最终你的用户将会下载与他们屏幕密度匹配的 APK (国内用户无感)

    五, 删除未使用替代资源
    有时,你创建一个本地的 app,你只想支持一些特殊的语言。但是,有一些依赖包含全世界的很多语言,你不需要所有的这些。因此,你可以使用resConfigs属性指定你想要的语言,你的 app 将更小。
    android {
          defaultConfig {
             resConfigs 'en', 'th'
              ...
             }
           }
    六, 压缩无用代码和资源
    默认情况下,Android Studio 的 minifyEnabled为false,但我认为很多人为了更小和安全因素把它设置为true来缩小和混淆你的代码。我建议你在app/build.gradle中添加shrinkResources,在压缩(minify)进程之后删除无用的资源。因为在压缩中,gradle将移除无用的代码,这些代码可能会引用一些资源。
    最后,我想大多数人都不知道-optimize。你能在proguard-android之后添加-optimize,它将为你构建 app 做更多的优化,你的 app 将会更小。
    android {
        buildTypes {
             release {
                 minifyEnabled true
    
                 shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

    请注意,此过程将花很多时间,所以你应该只在发布快中使用-optimize。

    七,使用Shape Drawable 去做需要的图片

    八,使用Webp (之前没听说,百度之后了解到,是GOOGLE大佬推出的新格式)。 PS:需要之一 系统支持问题。

    Webp 的 API 等级是API 15及以上支持。但是如果你想在 Webp 中支持透明背景,你需要支持API 18或者更高,Android Studio 还为您提供了一种将图像转换为 WebP 格式的简便方法。你可以右击你想要的图片,选择Convert to WebP

    八,使用VectorDrawable

    这里我们常会将SVG 转换成 Android 能用的 格式。在Android 5.0(21)后支持该功能

    如果你正在支持minSdkVersion 20或者更低。别担心,你可以用它。因为 Android 团队提供了一个库。因此你只需要使用23.2及其以上支持库。



    更快的构建 app的技术

    一 ,使用最新的 Android plugin

    dependencies {
         -  classpath 'com.android.tools.build:gradle:3.0.0'
         + classpath 'com.android.tools.build:gradle:3.2.1'
    }

    二 ,避免Legacy Multidex

    场景:app 超过 64K 方法,需要使用 Multidex,如果minSdkVersion 是21 或更低,那么你将使用 Legacy Multidex,这回是你在构建时变慢。

    productFlavors {
        development {
          minSdkVersion 21
          ...
         }
        }

    三 ,禁用 Multi APK

    我们该在开发构建环境禁用多个 APK 生成

    我们应该添加下面两行代码禁用它。

    buildTypes {
    ...
    debug {
      splits.abi.enable = false
      splits.density.enable = false
    }
    }

    四 ,包含最少的资源

    默认情况下,构建系统包含 app 和库使用的所有语言和屏幕密度。开发期间你不需要用到所有的这些资源,你能通过添加resConfigs来使用这些资源中的一组,并指定开发构建所需的语言和屏幕密度。

    productFlavors {
        dev {
          resConfigs('en', 'xhdpi')
          ...
        }
        }

    五 ,禁用PNG缩紧

    默认情况AAPT将会缩进PNG来减小它们的大小,对于你发布 APK 是一件好事,但是它对于你开发构建并不重要。要避免PNG缩紧,你可以使用下面的属性并将其设置为false。

    buildTypes {
        ...
        debug {
          aaptOptions.cruncherEnabled = false
          ...
        }
        }

    六 ,使用Instant Run

    默认情况下,当你点击 RUN 按钮时,系统将会尝试冷切换,app 需要重启,但是当你点击 Apply Changes 按钮时,系统将先尝试热交换,这会将更改直接推送到实时进程。

    七 ,禁用更新构建ID

    我想很多人使用 Crashlytics,每次构建 Crashlytics 将默认生成一个唯一的构建ID。你可能不知道他们为你提供了一个关闭它的方式,如下:

    buildTypes {
        debug {
          ext.alwaysUpdateBuildId = false
          ...
         }
        }

    八 配置gradle.properties

    org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    
    org.gradle.daemon=true
    org.gradle.parallel=true
    org.gradle.configureondemand=true
    org.gradle.caching=true
    android.enableBuildScriptClasspathCheck=false

    鼓励你尝试这些配置,我保证你将节省大量的建设时间。

    九 使用R8新代码 shrinker

    Android studio 3.3中可以使用 R8的下一代代码shrinker。它将减少无用的代码和资源,并缩小您的源代码。因此 Android Studio 声称构建时间和 APK 大小会更小。

  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/10435655.html
Copyright © 2011-2022 走看看