Android:Proguard集成的解释
我已经做了一点Android开发,在我的一个项目中,我想使用Proguard缩小我的APk的大小,并帮助解决dex限制问题。不幸的是,我得到了一些错误和堆栈溢出的答案,但他们似乎是针对那些有更多经验 我的问题是你的Android:Proguard集成的解释,android,proguard,Android,Proguard,我已经做了一点Android开发,在我的一个项目中,我想使用Proguard缩小我的APk的大小,并帮助解决dex限制问题。不幸的是,我得到了一些错误和堆栈溢出的答案,但他们似乎是针对那些有更多经验 我的问题是你的proguard android.txt和proguard rules.pro有什么关系?为什么有两个不同的文件,为什么它们的格式不同?这些文件中的语句何时调用,顺序如何?我只是想了解一下在开发环境中使用Progurad的总体环境 提前谢谢。ProGuard使用配置文件及其包含的规则按
proguard android.txt
和proguard rules.pro
有什么关系?为什么有两个不同的文件,为什么它们的格式不同?这些文件中的语句何时调用,顺序如何?我只是想了解一下在开发环境中使用Progurad的总体环境
提前谢谢。ProGuard使用配置文件及其包含的规则按照您的方式处理Java字节码。ProGuard可以做很多事情。它会完全破坏你的应用程序,因此你必须确保添加正确的规则 我假设你的应用程序使用基于Gradle的构建。然后,您可能会遇到以下代码段,该代码段为您的应用程序(或Android库)的发布版本启用ProGuard: 在配置中,列表
proguardFiles
告诉构建它必须使用哪些包含ProGuard规则的文件。此列表可以包含任意数量的文件
为什么文件(proguard android.txt
和proguard rules.pro
)的定义不同?
神奇的getDefaultProguardFile('proguard-android.txt')
从android SDK中的标准位置加载名为proguard android.txt
的文件(位置为${android\u SDK}/tools/proguard/
)
其他配置文件在本地解析,因此文件proguard rules.pro
应位于当前Gradle模块的根目录下
为什么有两个独立的文件?那么proguard android.txt
和proguard rules.pro
之间的关系是什么呢?
ProGuard配置是可添加的。您可以在一个文件中定义一些规则,在其他文件中定义其他规则。这些规则在内部连接到单个规则列表中
文件getDefaultProguardFile('proguard-android.txt')
包含所有android应用程序的几个一般规则(请自己在SDK中的文件中检查它们)。本地proguard rules.pro
应包含特定于您自己的应用程序的规则。例如,当您仅通过反射使用某个类时,您希望确保该类不会被剥离(稍后我将对此进行讨论)
请注意,拥有多个本地文件非常有用。例如,您可以使用两个本地配置文件进行调试构建—一个包含应用程序的发布规则,另一个包含禁用模糊处理的规则
还要注意的是,配置的附加行为可能有点麻烦。如果在一个配置文件中添加规则,则无法在另一个配置文件中删除该规则。因此,请注意非常一般的规则(例如,想象添加-keep class**{*;}
)
这些文件中的语句何时调用,顺序如何?
你可以按任何顺序定义它们,没有区别。您可以在多个文件中定义相同的规则,这并不重要。指定文件的顺序也不重要
ProGuard本身在Android构建中作为单个作业运行(准确地说是单个Gradle任务)。该任务由以下所有输入提供:
- 要操纵的类
- 要使用但不操纵的库类
- 生成的已处理jar的输出路径
- 指定操作的ProGuard规则
- 各种输出信息的输出路径(删除的内容、映射等)
-injars
,-libraryjars
AndroidManifest.xml
和资源(布局)生成的规则。Android build(aapt工具)生成规则来保存清单中提到的类(活动、服务、接收者等)和布局中使用的自定义视图。您可以在build/intermediates/proguard rules/${PRODUCT\u FLAVOR}/${build\u TYPE}/aapt\u rules.txt
ProGuard.txt
文件)
在自己编写Android库时,要特别小心要添加到aar中的规则。由于规则的累加性,它可能会给绑定库的应用程序带来问题。您应该看看Hi,谢谢您的回答!我们是否应该将build/intermediates/proguard rules/${PRODUCT\u FLAVOR}/${build\u TYPE}/aapt\u rules.txt中的规则显式添加到proguard ru
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
'proguard-rules.pro'
}
}
...
}