面试Tip:Android优化之APK瘦身

程序员七猫  程序员七猫  3天前


每到夏日我们就因为增长的体重而拼命瘦身,那么在面对越发庞大的APK,你又是如何进行APK瘦身呢?


APK文件结构


1. META-INF\(Jar文件中常可以看到)

2. res\(存放资源文件的目录)

3. AndroidManifest.xml(程序全局配置文件)

4. classes.dex(Dalvik字节码)

5. resources.arsc(编译后的二进制资源文件)


AndroidStudio分析APK文件大小


使用AS的Build-Analyze APK

查看APK包内各个文字资源大小


APK瘦身思路


1.图片处理

1)使用一套图

一般市场上使用一套图就能够适应大部分需求,使用720dp分辨率,放置于xhdpi

2)使用TinyPng压缩图片

官网:https://tinypng.com/

图片压缩后对视觉影响不大,但体积显著减小

3)使用webp

4)使用jpg替代png

使用jpg替换不需要保留透明区的png

5)使用矢量图

VectorDrawable

AnimatedVectorDrawable

6)使用shape背景

7)使用selector文件

8)使用tintColor

9)使用.9图


2.去除多余资源

1)Andorid Studio Lint

AS的Analyze Run Inspection By Name 

输入unused resources查找多余的资源

2)shrinkResources

使用资源缩减器,去除无用资源

buildTypes { 
   release {
   shrinkResources true
   minifyEnabled true
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

3)resConfigs

通过resConfig属性指定语言(未指定的语言的任何资源都会被删除)

android {
   defaultConfig {
       ... resConfigs " zh","en"
   }
}


3.缩小资源AndResGuard

微信资源混淆打包工具AndResGuard

“AndResGuard是一个帮助你缩小APK大小的工具,

他的原理类似Java Proguard,但是只针对资源。

它会将原本冗长的资源路径变短,

例如将res/drawable/wechat变为r/d/a”

官网:

https://github.com/shwenzhang/AndResGuard


4.去除多余包依赖

第三方库里包含了你所需的引用包,则无需额外引入

使用Android Studio查看包依赖

android studio 终端terminal输入

gradlew  :Your Module Name:dependencies 

或者使用

gradlew  :Your Module Name:dependencies --configuration compile(或者implementation

可以查看到详细的包依赖关系


5.去除冗余代码

Proguard

ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。

可以删除没用的注释,最大限度地优化字节码文件。

它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。

buildTypes {
   release {
   minifyEnabled true //开启混淆
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆配置文件
   }
}


6.APK分割splits

android {
   ...
   splits {
       density {
           enable true //打开apk分割功能
           exclude "ldpi", "tvdpi", "xxxhdpi" //exclude排除
           compatibleScreens 'small', 'normal', 'large', 'xlarge' //将注入到mainfest配置compatible-screens中
       }
       abi {
           enable true
           reset() //重置列表,与include搭配使用,指定生成include包含的apk
           include 'x86', 'armeabi-v7a', 'mips' //include包括
           universalApk false // 不打包一个通用版本(包含所有的ABI)
       }
}


7.在线资源&H5

在线资源替代本地资源或者使用h5


--------------我是快乐的分割线--------------


以上就是今天TIP的内容了

愿你的APK瘦瘦瘦,愿你的身材棒棒棒~


本人公众号(程序员七猫) 不定期更新 欢迎关注与建议

程序员七猫



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值