为了活动小家电-应用程序混淆(一)

50 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

前言

  • 如果您使用 gradle 3.4.0 或更高版本构建项目,则据说该插件不使用 ProGuard 来优化您的编译时代码,而是使用 R8 编译器来优化您的编译时代码。

  • 使用 Android Studio 创建新项目时,默认情况下不会启用应用瘦身、混淆和代码优化,因为会增加构建时间以及开发人员配置错误导致的潜在错误。

因此,最好在构建应用程序的最终版本时启用这些编译时操作。

什么是R8?

  • R8 是一个本机编译器,可将项目的 Java 字节码转换为在 Android 平台上运行的 DEX 格式。
  • R8 使用 ProGuard 规则文件。

R8 的作用

  • 代码收缩(Tree shaking)

    • 删除未使用的代码。
    • R8 确定的删除代码的过程在运行时不需要。
    • 应用程序和库依赖项中未使用的类、字段、方法和属性
  • 减少资源

    • 删除未使用的资源。
    • 打包应用未使用的资源,包括应用库依赖项中未使用的资源
    • 资源收缩仅在与代码收缩结合使用时才有效
  • 混淆

    • 缩短类和成员名称。
    • 混淆的目的是通过缩短应用程序的类、方法和字段的名称来减小应用程序的大小。
    • 总之,混淆减少了 DEX 文件的大小。
  • 优化

    • 代码检查和重写。
    • 进一步减小 DEX 文件大小。

keep

这意味着开发人员适当地定制了要保留的代码。 换句话说,keep 规则指定了 R8 在折叠应用程序时不得删除的类,并且 R8 认为该类可用作应用程序的入口点。

  • 将keep行添加到ProGuard 规则文件 
  • 在要保留的代码中 添加Keep注解
  • 整个类保持不变(方法、字段、类名保持不变)
  • 这些保留规则强制 R8 保留原始命名以及将代码保留在应用程序的最终 DEX 中。

为了活动小家电,下篇继续搞。