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 大小会更小。

  • 相关阅读:
    几种流行Webservice框架性能对比
    java实现的单点登录
    SQL Server性能调优——报表数据库与业务数据库分离
    控制台console输出信息原理理解
    查看程序是否启动或者关闭--比如查看Tomcat是否开启!直接用ps命令查看进程就行了啊
    Tomcat日志问题
    客户端用httpurlconnection来进行http连接的
    一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事
    ps -ef能列出进程号,和端口号没任何关系
    Tomcat打印运行时日志(控制台),访问日志,启动日志
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/10435655.html
Copyright © 2011-2022 走看看