这可能过于宽泛,但我想解释如何在项目及其依赖项之间传递Proguard和缩小配置,以了解这些操作在项目的依赖树中的深度。
我在`{mododule'的build.gradle
:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
compile project(':someothermodule')
compile 'some.maven.central.library'
}
通过配置,似乎很清楚themodule
中的类将被缩小和混淆,但someothermodule
的类会发生什么?他们也会被缩小和混淆吗?即使someothermodule
有minifyEnabled true
?
如果'someothermodule'只是一个.jar依赖项,会发生什么?
some.maven.central.library
的配置会怎样?
是否正在构建模块的Proguard配置级联到其依赖关系,或者每个配置都遵循自己的规则?
答案 0 :(得分:3)
如果模块本身被模糊处理(consumerProguardFiles 'proguard-rules.pro'
),则使用模块(在您的情况下是应用程序)不会自动继承使用的配置。
Android gradle插件中有一种启用此功能的机制:
proguard-rules.pro
.aar
中包含的规则将自动包含在应用程序项目中,并与其他配置文件合并。
这仅适用于Android库项目(.jar
)。例如,如果您对maven central
上的-keep
文件具有依赖性,则不会有这样的使用者规则,您必须自己将所需的配置添加到应用程序项目中。
请记住,模糊模块的配置和使用应用程序/模块使用的配置不需要相同。在大多数情况下,消费者规则只是一组applicationContext.xml
规则。
答案 1 :(得分:2)
从技术上讲,它是以下内容:
图书馆项目本身不运行ProGuard,因此他们不使用 任何配置。
应用程序项目会混淆整个代码库,包括任何代码库 引用库,所以他们需要适当的配置 应用程序代码和库代码。
我有一个小案例,我有一个Facebook库作为gradle依赖项,因为我们使用minifyEnabled:true
混淆代码,我们必须使用常规keep命令来保持所有代码不被混淆,例如:
-keep class com.facebook.** { *; }
此外,关于.jar混淆,您可以查看this other post
此致