出版于

注意

在Android中掌握进程

在构建Android应用程序时,我们可能在项目中使用了Proguard。在此博客中,我们将了解所有功能以及如何在Android中有效使用Proguard。

最初出版在blog.mindorks.com

因此,让它在以下几点中分解,

什么是proguard?

Proguard是Android中的免费Java工具,可帮助我们完成以下操作,

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

它对我们的应用程序有用?

在Android中,Proguard对于制作生产就绪应用非常有用。它可以帮助我们减少代码并更快地使应用程序。默认情况下,Proguard从Android Studio默认情况下出来,它在很多方面都有帮助,下面很少有人提及其中的几个。

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

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

buildTypes {
发布 {
MinifyEnabled真的
proguardfilesgetDefaultProguardFile('proguard android.txt'),'proguard-rules.pro'
}
}

在这里,我们有Minfyenable如真实,它激活从文件中获取的proguard,

proguard android.txt

它在释放块下,这意味着它将仅应用于我们生成的构建的释放。

但是,当Proguard删除太多代码并且可能会破坏您的流程时,这可能会太多。

因此,配置代码我们必须添加一些自定义规则,以确保我们从混淆中删除一组代码。我们可以通过在我们的演奏中写出自定义规则来解决此问题,并且在生成构建时会尊重。

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

1.保留班级文件

假设我们有一个数据类,某些API需要执行该类别,但是生成构建,我们使该类混淆。例如,我们有一个用户数据类,

数据类用户(Val ID:String =“”)

而且我们不想使生成构建的类混淆,然后忽略它,使我们无法使用@保持注释和更新代码类似

@保持
数据类用户(Val ID:String =“”)

此注释有助于通过在缩小时使用proguard忽略全班。即使不使用,这也将保留类及其成员功能。

我们也可以使用,

-保持

在生成构建时保留课堂选项。使用-保持超过@保持我们可以更多地控制要保留的东西和不要保留的东西。

但是,我们也可以保留ID通过使用@SerializedName(使用GSON库)类似,在数据模型类中的字段类似

数据类用户(@SerializedName(“ ID”)
Val ID:String =“”)

如果您在这里注意到,我们不使用@keep。

2.让成员上课

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

-  keepclassmembers

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

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

-  keepclassmembers班级com注意样本用户{
民众*;
}

在这里,班级用户保留所有具有公共修饰符的成员。

3.保留班级和成员的名字

Let’s say we want to keep all the same names of the class and members of a class if it’s being used in the code i.e. if the class is not used it would be shrunk by proguard but not obfuscated because it has already been shrunk there is no need of obfuscation.

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

- 保存

它看起来像是

- 保存班级com注意样本glidemodule

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

4.使用Android中的任何库

使用任何库时,我们可能想为Proguard编写一些自定义规则。可能会有图书馆在logcat中发出警告,或者他们甚至没有自己的前进规则!!!

为了解决该问题,我们需要在应用程序方添加自定义规则。例如,如果我们开始从任何库中获取警告,那么我们补充说,

-dontwarn com.somelibrary.annotations。*

在我们的前进规则中,我们将看不到日志中出现任何警告。

为了为库编写自定义规则,您可以像您自己的班级一样编写它。

5.仅使您的项目混淆

考虑一个非常罕见的用例,您只想混淆代码而不收缩任何资源。这是一个非常罕见的用例,但对于某些小库可能很有用,然后我们编写旗帜,例如

-dontshrink
-Dontoptimize

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

6.维护注释

在构建应用程序时,Proguard删除了所有注释,并且对于项目中的某些代码,它仍然可以正常工作。但是,假设如果我们需要注释不被删除,那么我们可以选择,例如

-  keepattributes *注释 *

在这里,它保留了所有注释在您的应用中保存的属性。默认情况下,我们的规则中存在。

7.优化

在编写了Proguard的规则之后,我们可能需要为我们的应用提供额外的优化层。首先,我们更新build.gradle文件像

安卓 {
buildTypes {
发布 {
proguardfilesgetDefaultProguardFile('Proguard-android-optimize.txt')
}
}
}

现在,通常,我们不使用此选项,但是这里的用例是我们必须执行额外的优化水平。

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

- 优化通行5

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

现在,考虑一个示例,我们想在粒状水平上优化最后一堂课,而我们使用以前的情况,我们使用,

- 精选班级/标记/最后

在这里,最终课程将最高优化5倍,或者如果已经完成了优化,则可能会尽早结束。

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

- 选项字段/标记/私人的

大多数次优化是第一次进行。

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

-Dontoptimize

这就是我们可以以不同的方式工作的方式来使我们的应用程序使用Proguard更加安全和更轻。

要注意的重要事情:

如果您想编写更好的Proguard规则,请查看提示以编写更好的规则的提示。

如果您正在准备下一次Android面试,加入我们的Android专业课程在顶级科技公司学习最新的Android和Land Job。

愉快的学习。

团队插道:)

另外,让我们继续推特,,,,LinkedIn,,,,github, 和Facebook

- -

- -

获取中型应用betway娱乐官网

一个说“在应用商店上下载”的按钮,如果单击,它将带您到iOS App Store
一个说“获取它,Google Play”的按钮,如果单击它,它将带您到Google Play商店
Baidu