ProGuard 在 Android 上的使用姿势,开发这么久这些问题都不会

本文详细介绍了ProGuard在Android开发中的作用,包括代码压缩、混淆和优化,强调了其减少包体积、提升用户体验的重要性。同时,讨论了开启ProGuard可能遇到的构建中断、移除过多或过少类等问题,提供了相应的解决策略,如添加配置规则、使用APK Analyzer等。文章还提醒开发者在使用ProGuard时需进行彻底测试,确保应用的稳定性和性能。
摘要由CSDN通过智能技术生成

ProGuard 是一个压缩、优化、混淆代码的工具。尽管有很多其他工具供开发者们使用,但是 ProGuard 作为 Android Gradle 构建过程的一部分,已经打包在 SDK 中。

当我们构建应用时,使用 ProGuard 有很多好处。有的开发者更关心混淆这块功能,对我而言最大的用处是打包时移除 dex 中的无用代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8PSbPYKs-1630583794712)(https://user-gold-cdn.xitu.io/2018/1/15/160f7822ce7376b5?imageView2/0/w/1280/h/960/ignore-error/1)]

一个 Android 示例应用的空间分布图,源码地址 Topeka sample app

减少包体积的好处有很多,比如增加用户黏性和满意度,提升下载速度,减少安装时间,以便在终端设备上连接用户,尤其是在新兴市场。当然,有时候您不得不限制您的应用的大小,比如 Instant App 限制大小 4 MB,此时 ProGuard 显得必不可少了。

如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果:

  • 在一些版本的 Android 设备上,DEX 代码会在安装或者运行时被编译成机器码。原始的 DEX 和优化后的机器码都会保留在设备中,所以算一下就知道:代码越少,意味着编译时间越短,存储占用越少
  • ProGuard 除了可以大幅减少代码的空间之外,还可以让所有的标识符(包、类和成员)都使用更短的名字,如 a.Aa.a.B。这个过程就是混淆。混淆通过两种方式来减少代码:让表示名称的字符串更短;在这些方法或者属性有相同的签名情况,下这些字符串更容易被复用,最终减少了字符串池的数目。
  • 使用 ProGuard 是开启资源压缩的前提条件. 资源压缩功能会移除您项目中代码没有引用到的资源文件(如图片资源,这一般是 APK 中占比最大的部分了).
  • 通过仅将您代码中实际使用的方法打包到 APK 中,移除代码会帮您避免 64K dex 方法引用问题。尤其是您引用了很多第三方库的时候,这样可以大大降低在您应用中使用 Multidex 的需求。

每个 Android 应用都应该使用代码压缩吗?我认为是的!

但是在您激动的跳起来之前,请先继续阅读下去。当您开启 ProGuard 时,在某些非常微妙的情况下会让您的应用崩溃。虽然有些错误会在构建应用时发生,您能及时发现,但是也有些错误您只能在运行时发现,所以请确保您的应用经过彻底的测试。

如何使用 ProGuard?

在您的项目中开启 ProGuard 只需简单到添加如下几行代码在您的主应用模块的 build.gradle 文件中:

buildTypes {
/* you will normally want to enable ProGuard only for your release
builds, as it’s an additional step that makes the build slower and can make debugging more difficult */
  
  release 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值