加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

如何在10分钟内让应用大小减少60%?

发布时间:2019-07-20 10:47:33 所属栏目:评论 来源:小房子
导读:副标题#e# 一个APP的包之所以大,主要包括一下文件 代码 lib so本地库 资源文件(图片,音频,字体等) 瘦身就主要瘦这些。 一、打包的時候刪除不用的代码 buildTypes{ debug{ ... shrinkResourcestrue//是否去除无效的资源文件(如果你的Debug也需要瘦身) } r
副标题[/!--empirenews.page--]

一个APP的包之所以大,主要包括一下文件

  • 代码
  • lib
  • so本地库
  • 资源文件(图片,音频,字体等)

瘦身就主要瘦这些。

一、打包的時候刪除不用的代码

  1. buildTypes { 
  2.  debug { 
  3.  ... 
  4.  shrinkResources true // 是否去除无效的资源文件(如果你的Debug也需要瘦身) 
  5.  } 
  6.  release { 
  7.  ... 
  8.  shrinkResources true // 是否去除无效的资源文件 
  9.  } 
  10.  } 

二、减少不必要的打包

  1. defaultConfig { 
  2.  ... 
  3.  //打包的语言类型(语种的翻译) 
  4.  resConfigs "en", "de", "fr", "it" 
  5.  //打包的文件夹 
  6.  resConfigs "nodpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi" 

或者

  1. android { 
  2.  ... 
  3.  splits { 
  4.  density { 
  5.  enable true 
  6.  exclude "ldpi", "tvdpi", "xxxhdpi" 
  7.  compatibleScreens 'small', 'normal', 'large', 'xlarge' 
  8.  //reset() 
  9.  //include 'x86', 'armeabi-v7a', 'mips' 
  10.  //universalApk true 
  11.  } 
  12.  } 

三、lib

尽量不用太复杂的lib,轻量级lib是首选。如果你的应用没用到兼容库,可以考虑去掉support包。

四、资源文件

我们可以通过Lint工具找到没有使用的资源(在Android Studio的“Analyze”菜单中选择“Inspect Code…”)

五、把现有图片转换为webP

我们可以通过 智图 或者isparta将其它格式的图片转换成webP格式,isparta可实现批量转换。

六、图片相关

在Android 5.0及以上的版本可以通过tintcolor实现只提供一张按钮的图片,在程序中实现按钮反选效果,前提是图片的内容一样,只是正反选按钮的颜色不一样。

  1. Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY ) 

在Android 5.0及以上的版本,可以使用VectorDrawable和SVG图片来替换原有图片

七、混淆

1 构建多个版本

在gradle中的buildTypes中增加不同的构建类型,使用applicationSuffix和versionNameSuffix可以生成多个版本在同一设备上运行

创建src/[buildType]/res/设置不同的ic_launcher以区别不同版本

2 混淆参数

  1. {  
  2. debug { minifyEnabled false }  
  3. release {  
  4. signingConfig signingConfigs.release  
  5. minifyEnabled true  
  6. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  7. }  

minifyEnabled true

  • 是否要启用通过 ProGuard 实现的代码压缩(true启用)
  • 请注意,代码压缩会拖慢构建速度,因此您应该尽可能避免在调试构建中使用。

注:Android Studio 会在使用Instant Run时停用 ProGuard。

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

getDefaultProguardFile(‘proguard-android.txt')方法可从 Android SDKtools/proguard/文件夹获取默认 ProGuard 设置。

提示:要想做进一步的代码压缩,可尝试使用位于同一位置的proguard-android-optimize.txt文件。它包括相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。

proguard-rules.pro文件用于添加自定义 ProGuard 规则。默认情况下,该文件位于模块根目录(build.gradle文件旁)。

要添加更多各构建变体专用的 ProGuard 规则,请在相应的productFlavor代码块中再添加一个proguardFiles属性。例如,以下 Gradle 文件会向flavor2产品风味添加flavor2-rules.pro。现在flavor2使用所有三个 ProGuard 规则,因为还应用了来自release代码块的规则。

每次构建时 ProGuard 都会输出下列文件 dump.txt 说明 APK 中所有类文件的内部结构。mapping.txt:提供原始与混淆过的类、方法和字段名称之间的转换。seeds.txt:列出未进行混淆的类和成员。usage.txt:列出从 APK 移除的代码。这些文件保存在/build/outputs/mapping/release/。

要修正错误并强制 ProGuard 保留特定代码,请在 ProGuard 配置文件中添加一行-keep代码。例如:

  1. -keeppublicclassMyClass 

您还可以向您想保留的代码添加[@Keep]

(https://developer.android.com/reference/android/support/annotation/Keep.html)注解。在类上添加@Keep可原样保留整个类。在方法或字段上添加它可完整保留方法/字段(及其名称)以及类名称。请注意,只有在使用注解支持库时,才能使用此注解。

在使用-keep选项时,有许多事项需要考虑;如需了解有关自定义配置文件的详细信息,请阅读ProGuard 手册。问题排查一章概述了您可能会在混淆代码时遇到的其他常见问题。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读