广告
返回顶部
首页 > 资讯 > 移动开发 >Android开发ProGuard使用技巧掌握
  • 107
分享到

Android开发ProGuard使用技巧掌握

Android开发ProGuard技巧Android ProGuard 2022-11-21 22:11:20 107人浏览 泡泡鱼
摘要

目录前言什么是 ProGuard?它对我们的应用程序有什么用处?如何在我们的项目中使用它?前言 在构建 Android 应用程序时,我们可能在项目中使用了 ProGuard。在这篇文

前言

在构建 Android 应用程序时,我们可能在项目中使用了 ProGuard。在这篇文章中,我们将了解所有功能以及如何在 Android 中有效地使用 ProGuard。

因此,让我们将其分解为以下几点:

什么是 ProGuard?

ProGuard 是 Android 中的免费 java 工具,它可以帮助我们执行以下操作,

  • 缩小(缩小)代码:删除项目中未使用的代码。
  • 混淆代码:重命名类、字段等的名称。
  • 优化代码:做内联函数之类的事情。

简而言之,ProGuard 对我们的项目产生了以下影响,

  • 它减小了应用程序的大小。
  • 它删除了导致 Android 应用程序的 64K 方法计数限制的未使用类和方法。
  • 它通过混淆代码使应用程序难以进行逆向工程。

它对我们的应用程序有什么用处?

在 Android 中,proguard 对于制作可用于生产的应用程序非常有用。它可以帮助我们减少代码并使应用程序更快。默认情况下,Proguard 在 Android Studio 中是开箱即用的,它在很多方面都有帮助,下面提到的很少,

  • 它混淆了代码,这意味着它将名称更改为一些较小的名称,例如MainViewModel它可能会将名称更改为A。在混淆应用程序之后,您的应用程序的逆向工程现在成为一项艰巨的任务。
  • 它缩小了资源,即忽略了我们的类文件没有调用的资源,没有在我们的android应用程序中使用,比如drawables中的图像等。这将大大减少应用程序的大小。您应该始终缩小您的应用程序以使其重量轻且速度快。

如何在我们的项目中使用它?

要在您的项目中启用 Proguard,请在应用程序的 build.gradle 添加,

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

在这里,我们minfyEnabled确实如此,它激活了从文件中获取的proguard,

proguard-android.txt

它在发布块下,这意味着它只会应用于我们生成的构建的发布。

但有时当 proguard 删除太多代码时它可能太多了,它可能会破坏你的代码流。

因此,配置代码我们必须添加一些自定义规则,以确保我们从混淆中删除代码集。我们可以通过在我们的 proguard 中编写自定义规则来解决这个问题,它会在生成构建时遵守。

现在,让我们看看如何在 proguard 中编写自定义规则。

1. 保存类文件假设我们有一个数据类,某些 api 需要它来执行它,但它会生成我们对类进行混淆的构建。例如,我们有一个用户数据类,

data class User(val id: String = "")

我们不想混淆生成构建的类,然后忽略它的混淆,我们使用@Keep注释并更新代码,例如,

@Keep
data class User(val id: String = "")

此注释有助于在缩小时使用 proguard 来忽略该类。这将保留类及其成员函数,即使它们不被使用。

我们还可以使用,

-keep

在生成构建时保留类的选项。使用-keep而不是@Keep,我们可以更好地控制要保留的内容和不保留的内容。

但是,我们也可以通过使用@SerializedName(当使用 Gson 库时)来保留数据模型类中id字段的键,例如,

data class User(@SerializedName("id")
                 val id: String = "")

如果你注意到这里,我们没有使用@Keep。

2. 为班级保留成员假设我们想在收缩时只保留类成员而不是类,然后我们使用,

-keepclaSSMembers

在 proguard 规则文件中。这将帮助我们忽略特定类的成员。

考虑上面的 User 类,我们希望保留其中的所有公共方法。我们这样写规则,

-keepclassmembers class com.mindorks.sample.User{
    public *;
}

在这里,类 User 保留所有具有公共修饰符的成员。

3. 保留班级和成员的名字假设我们希望在代码中使用类和类成员的所有相同名称,即如果未使用该类,它将被 proguard 缩小但不会混淆,因为它已经被缩小了,所以没有需要混淆。

要完成我们使用的上述任务,

-keepnames

它的实际使用看起来像,

-keepnames class com.mindorks.sample.GlideModule

在这里,如果 GlideModule 将保留其所有的类名称和成员函数。

4.在Android中使用任何库在使用任何库时,我们可能希望为 proguard 编写一些自定义规则。库可能会在 loGCat 中引发警告,或者他们甚至可能没有自己的 proguard 规则!

为了解决这个问题,我们需要在应用程序端添加自定义规则。例如,如果我们开始从任何库中收到警告,那么我们添加,

-dontwarn com.somelibrary.annotations.*

在我们的 proguard 规则中,然后我们不会在日志中看到任何警告。

要为库编写自定义规则,您可以像为自己的类编写任何其他规则一样编写它。

5. 只混淆你的代码考虑一个非常罕见的用例,您只想混淆代码而不压缩任何资源。这是一个非常罕见的用例,但可能对一些小型库有用,然后我们编写如下标志,

-dontshrink
-dontoptimize

这将帮助我们不缩小和优化代码而只是混淆。

6. 维护注解在构建应用程序时,ProGuard 会删除所有注释,它可能仍然适用于您项目中的某些代码集。但是假设我们需要不删除注释,那么我们可以选择,

-keepattributes *Annotation*

在这里,它将所有注释的属性保留在您的应用程序中。它默认出现在我们的规则中。

7.优化在 ProGuard 中编写了这么多规则之后,我们可能需要为我们的应用程序提供额外的优化层。首先,我们更新build.gradle文件,例如,

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
    }
  }
}

现在,一般来说,我们不使用此选项,但这里的用例是我们必须执行额外级别的优化。

为了增加优化的周期数,例如我们想检查优化是否正确完成,如果没有完成,它将再次优化它直到我们使用一定次数,

-optimizationpasses 5

在这里,它将运行优化多达 5 次以使其更加优化。

现在,考虑一个示例,与以前相比,我们希望更细粒度地优化最终类,我们使用,

-optimizations class/marking/final

在这里,最终的类将被优化最多 5 倍,或者如果优化已经完成,它甚至可能提前结束。

现在,如果我们想优化我们现在使用的私有字段,

-optimizations field/marking/private

大多数情况下,优化是第一次完成。

如果我们根本不想优化我们使用,

-dontoptimize

这就是我们如何以不同的方式使用 proguard 使我们的应用程序更安全和更轻便的工作方式。

需要注意的重要事项:

  • 不要使用MainFragment.class.getSimpleName() 之类的东西作为片段标签。Proguard 可能会在混淆时为不同包中的两个不同片段分配相同的名称(A.class)。在这种情况下,两个片段将具有相同的 TAG。这将导致您的应用程序中的错误。
  • 保留 Proguard 的映射文件以追溯到原始代码。您可能必须将其上传到 PlayStore 控制台等不同的地方才能查看崩溃的原始堆栈跟踪。

翻译链接

https://blog.mindorks.com/applying-proguard-in-an-android-application

以上就是Android开发ProGuard使用技巧掌握的详细内容,更多关于Android开发ProGuard使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android开发ProGuard使用技巧掌握

本文链接: https://www.lsjlt.com/news/173366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android开发ProGuard使用技巧掌握
    目录前言什么是 ProGuard?它对我们的应用程序有什么用处?如何在我们的项目中使用它?前言 在构建 Android 应用程序时,我们可能在项目中使用了 ProGuard。在这篇文...
    99+
    2022-11-21
    Android开发ProGuard技巧 Android ProGuard
  • 如何快速掌握前端开发技巧
    这篇文章将为大家详细讲解有关如何快速掌握前端开发技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何高效学习H5前端开发?首先要学的是学HTML、CSS,这两个东西是一...
    99+
    2022-10-19
  • Java开发者必须掌握的NumPy API技巧?
    NumPy是一个Python库,用于进行数值计算。它提供了一个强大的多维数组对象,以及各种用于操作这些数组的函数。虽然NumPy是一个Python库,但是对于Java开发者来说,掌握NumPy API技巧同样非常重要。 在本文中,我们将介...
    99+
    2023-07-31
    api 开发技术 numpy
  • Go开发者必备:掌握Spring框架的技巧
    Go是一门强大的编程语言,而Spring框架则是Java开发中最为流行的框架之一。尽管两者语言不同,但是作为Go开发人员,掌握Spring框架的技巧对于你的开发工作仍然是非常有益的。在本文中,我们将会介绍一些Go开发者必备的Spring框架...
    99+
    2023-07-11
    开发技术 unix spring
  • JavaScript 开发者必看:掌握 PHP 面试中的 npm 使用技巧
    作为一名 JavaScript 开发者,你可能不会经常使用 PHP,但是在面试中了解 PHP 的知识还是非常有必要的。其中一个重要的方面就是了解 npm 的使用技巧,因为在 PHP 中也会用到类似的包管理工具 Composer。在本文中,...
    99+
    2023-09-17
    面试 javascript npm
  • Java容器同步技巧,Laravel开发者必须掌握!
    随着Java技术的发展,Java容器已经成为了Java开发者必不可少的工具。Java容器是一种用来存储和管理对象的数据结构,如List、Set、Map等。然而,在多线程环境下,Java容器的同步问题一直困扰着开发者们。为了解决这个问题,本...
    99+
    2023-09-14
    容器 同步 laravel
  • Java开发者必须掌握的UNIX PATH配置技巧
    在Java开发中,经常需要使用一些UNIX命令来进行文件操作、部署、启动应用等。因此,对于Java开发者来说,掌握UNIX PATH配置技巧是非常重要的。本文将介绍一些必须掌握的UNIX PATH配置技巧,并演示它们的使用方法。 PAT...
    99+
    2023-08-26
    path unix 开发技术
  • PHP开发者必备:掌握PATH API的5个技巧!
    PHP是一种非常流行的服务器端脚本语言,它广泛应用于Web开发领域。PATH API是PHP提供的一个非常重要的函数库,它提供了一系列用于处理文件路径的函数,对于PHP开发者来说,掌握PATH API是非常重要的。本文将介绍5个常用的PA...
    99+
    2023-10-25
    开发技术 path api
  • Python 面试必备:掌握实时 API 开发的技巧
    Python 是当今最受欢迎的编程语言之一,广泛应用于 Web 开发、数据科学、机器学习等领域。在 Python 的应用中,API 开发是一个重要的方向。本文将介绍如何使用 Python 开发实时 API,并分享一些技巧和实用的代码示例。...
    99+
    2023-08-16
    面试 实时 api
  • 想要更好地掌握 Python 开发技术中的 NumPy 函数,这些技巧必须掌握!
    Python 是一种广泛使用的编程语言,它在数据科学、人工智能、机器学习和其他领域都有着广泛的应用。NumPy 是 Python 中一个非常重要的库,它提供了高效的数值计算和数组操作功能。在 Python 开发中,掌握 NumPy 函数是非...
    99+
    2023-06-03
    开发技术 numy 函数
  • ASP开发者必备:掌握Linux应用程序打包技巧
    在ASP开发中,我们不可避免地需要使用一些Linux应用程序。而Linux应用程序的安装与运行方式与Windows下的程序有很大不同,因此我们需要掌握一些打包技巧来方便应用程序的管理和部署。本文将介绍一些常用的Linux应用程序打包技巧,...
    99+
    2023-10-13
    linux git 打包
  • 开发技术分享:掌握 PHP 学习笔记与存储技巧
    PHP 是一种广泛使用的服务器端脚本语言,常用于 Web 开发。它可以用于创建动态网页、Web 应用程序和数据库驱动的网站。在本文中,我们将分享一些学习 PHP 的笔记和存储技巧,帮助您更好地掌握 PHP 开发技术。 安装 PHP 在学...
    99+
    2023-09-02
    学习笔记 开发技术 存储
  • PHP 开发者必须掌握的 Laravel 响应优化技巧!
    Laravel 是 PHP 开发中最流行的框架之一,它的响应速度和性能一直是开发者们关注的焦点。为了提高应用程序的性能,我们必须优化响应时间。在本文中,我们将介绍一些 Laravel 响应优化技巧,以便您的应用程序可以更快地响应请求。 缓...
    99+
    2023-07-07
    laravel npm 响应
  • Python开发中的日志记录技巧,你掌握了吗?
    Python作为一门流行的编程语言,被广泛应用于各种应用领域。在实际的开发过程中,日志记录是非常重要的一项技术,可以帮助开发人员更好地了解程序的运行状况,以及及时发现和解决问题。本文将介绍一些Python开发中的日志记录技巧,帮助开发者更好...
    99+
    2023-10-13
    日志 开发技术 二维码
  • 掌握Unix系统下使用Go语言和Spring框架的开发技巧
    随着互联网技术的发展,开发人员对于不同编程语言和框架的需求也越来越多样化。在Unix系统下,使用Go语言和Spring框架进行开发已成为越来越流行的选择。本文将介绍如何掌握这些技巧,以及如何在开发过程中克服一些常见问题。 一、Go语言的使...
    99+
    2023-07-11
    开发技术 unix spring
  • Spring开发者必备:掌握Go索引并发的关键技巧
    随着互联网的发展,高并发已经成为了每个开发者必须面对的问题。尤其是在Spring开发中,掌握Go索引并发的关键技巧是非常重要的。本文将为大家介绍Go索引并发的几个重要技巧,以帮助开发者更好地应对高并发场景。 利用Go协程实现并发 Go...
    99+
    2023-10-06
    索引 并发 spring
  • ASP 开发者必须掌握的 npm 日志技巧是什么?
    在开发 ASP 应用程序时,npm 日志是一个非常重要的工具。npm 日志可以帮助 ASP 开发者快速定位问题并解决它们。然而,很多 ASP 开发者并不知道如何使用 npm 日志来优化他们的应用程序。在本文中,我们将介绍 ASP 开发者必...
    99+
    2023-09-18
    npm 日志 面试
  • Laravel 开发人员必须掌握的 ASP 响应接口技巧。
    Laravel 是一个流行的 PHP 开发框架,它提供了许多便捷的工具和接口来简化开发过程。但是,在使用 Laravel 进行开发时,我们也经常需要与其他系统进行交互,这时候就需要使用 ASP(Application Service Pro...
    99+
    2023-07-19
    响应 接口 laravel
  • Java 开发者必须掌握的打包 NumPy 和 Django 的技巧
    在 Java 开发中,可能会涉及到使用 Python 的一些库,比如 NumPy 和 Django。在实际开发中,如果需要使用这些库,就需要将其打包并集成到 Java 项目中。本文将介绍 ,并附上相关的代码演示。 一、打包 NumPy N...
    99+
    2023-09-04
    打包 numy django
  • PHP和JavaScript开发者必须掌握的技巧:数组API的使用方法
    PHP和JavaScript开发者必须掌握的技巧:数组API的使用方法 数组是编程中最常用的数据结构之一,而数组API是开发者必须掌握的技能之一。在PHP和JavaScript中,数组API能够极大地简化开发过程,提高开发效率。本文将介绍P...
    99+
    2023-10-25
    javascript 数组 api
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作