构建任何应用程序时,应用程序大小都很重要。如果应用程序尺寸较大,则由于其尺寸太大,大多数用户将不会下载您的应用程序。大型应用程序将使您的用户花费大量数据,并且他还将需要磁盘空间才能安装您的应用程序。因此,减小APK的大小proguard是用于减小APK大小的重要Java工具之一。在本文中,我们将介绍以下主题:
- 什么是Proguard?
- Proguard的用途是什么?
- 如何在您的应用程序内使用Proguard?
- 使用Proguard的缺点是什么?
- Proguard中的自定义规则。
什么是Proguard?
Proguard是Android中提供的Java工具,用于减小应用程序大小。这是一个免费工具,可帮助您将应用程序大小减少8.5%。 Proguard会将您应用程序的代码转换为优化的Dalvik字节码。转换过程如下:
Proguard的用途是什么?
- Proguard会混淆您的代码并重命名您的代码。在此过程中,它将重命名不同Java类的文件。这将使您的应用程序更加安全,并且难以进行反向工程。
- 它将删除代码中未使用的代码段并优化代码。
- 使用proguard将使您的应用程序大小减少8.5%。
- Proguard会缩小应用程序内部未使用的资源。
- 使用proguard会减少您的应用程序大小,并使您的代码内联。这将使您的应用更快,更小。
如何在您的应用程序内使用Proguard?
要在您的应用程序内启用proguard,请导航至应用程序> gradle脚本>打开build.gradle文件。在该gradle文件中,您会在发布部分的文件中看到以下代码行。将minifyEnabled从false更改为true。这将使用proguard文件激活您的proguard。
buildTypes {
release {
// make change here
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
您将在发行版块中找到这组代码。这意味着仅将为您的发布应用程序激活Proguard。
Proguard中的自定义规则
当我们在应用程序内部使用proguard时,它将自动删除应用程序内部所需的一些模式类。因此,为避免删除这些文件,我们必须在应用程序内添加一些自定义规则。
1.保持我们的课堂
在使用库进行联网时或在实现RecyclerView或ListView时。我们必须创建一个Data类来存储所有数据。因此,在使用Proguard时,它将删除没有用的类变量。因此,为避免删除此类的变量,我们必须向该类添加@Keep批注。例如,我们正在创建一个数据类,用于在我们的类中存储studentName和StudentId,我们不希望proguard对我们的类进行混淆。因此,在这种情况下,我们将向其添加@Keep注释。因此,在下面的代码片段中,@ Keep将防止此类混淆。除了“ @keep”,我们还可以使用-keep来防止类混淆。如果必须保留类的任何变量,则将使用“ @SerializableName”注释该变量。当我们必须从JSON文件或服务器解析数据时,通常使用这种类型的注释。
Java
/*package whatever //do not write package name here */
import java.io.*;
@Keep
class GFG {
string StudentName;
int studentID;
}
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepnames class GFG {
string studentName;
int studentId;
}
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepclassmembers class GFG {
string studentName;
int studentId;
}
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepattributes @GET
class GFG {
string studentName;
int studentID;
}
2.保留班级及其成员的名字
假设如果我们必须保留类的名称及其成员变量,那么我们将使用注释作为“ -keepnames”。该注释将保留该类的名称及其成员变量。尽管proguard会缩减此类课程,但不会混淆您的课程。下面的代码片段将告诉我们如何使用“ -keepnames”保留类成员。
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepnames class GFG {
string studentName;
int studentId;
}
3.保持我们班级的成员
如果我们只想让班级成员而不是班级成员不被Proguard混淆。然后,我们将使用“ -keepclassmembers”注释该类。此注释将防止混淆我们的班级成员。下面是代码片段,我们将在其中查看此方法的实现。
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepclassmembers class GFG {
string studentName;
int studentId;
}
4.保留注释
使用Proguard时,它将删除我们在库提供的类中添加的所有注释。无论如何,此代码都可以正常工作而不会出现任何问题。但是,如果将其卸下,可能会导致问题。如果您正在使用Retrofit库从应用程序中的Web服务器获取数据,那么您将使用许多注释,例如“ @GET”,“ @ POST”,“ @ PUSH”等等。如果这些注释将被删除,则翻新可能会导致从服务器获取数据的问题。因此,为避免删除这些注释,我们将使用“ -keepattributes”关键字。下面是其用法的代码片段。
Java
/*package whatever //do not write package name here */
import java.io.*;
-keepattributes @GET
class GFG {
string studentName;
int studentID;
}
5.使用外部库
当我们使用一些外部库时。它们提供了可以添加到我们的保障规则中的特定规则。但是,如果库中没有任何规则。然后,在这种情况下,我们可以在日志中看到警告。为了避免对该库发出警告,我们必须在proguard中添加带有“ -dontwarn”注释的库。
-dontwarn “your library”
使用Proguard的缺点
有时,在使用Proguard时,它将删除大量所需的代码,这可能会导致应用程序崩溃。因此,请避免从我们的应用程序代码中删除此代码。我们必须在Proguard中添加一些自定义规则以保留该特定文件,以便避免删除该文件,即使使用proguard后,我们的应用程序也不会崩溃。
结论
因此,Proguard在减小我们应用程序的大小方面非常有帮助,这也将使我们的应用程序更安全且难以进行反向工程。因此,我们应该使用它来优化应用程序的大小。