如何防止专业卫士对从JAR文件导入的库进行模糊处理?



有一个库是我使用Android Studio的"从JAR/AAR文件导入"对话框导入的。但是,ProGuard 正在混淆此库,因此这些类中的方法在我的其他模块中不可见。

我尝试在生成的库目录中的build.gradle文件旁边创建一个名称为proguard-rules.pro的文件。但是,ProGuard 没有拾取此文件,尽管这是我预期可能发生的情况。

我正在导入的库 JAR 在包com.merchant.lib下的两个子包中有 4 个类。这些是我添加的ProGuard遗憾。

-keep class com.merchant.lib.** { *; }

由Android Studio生成的build.gradle文件如下:

configurations.maybeCreate("default")
artifacts.add("default", file("merchant-lib.jar"))

我希望ProGuard能够保持该JAR文件中的类完好无损,而无需进行任何修改。但是,ProGuard 仍在处理此 JAR 文件,我无法访问这些类。

如何防止 ProGuard 混淆库文件?

从jar文件中获取软件包名称并使用-dontwarn

-dontwarn  com.sun.mail.**
-dontwarn  javax.mail.**

对我来说,我需要将 jar 文件作为输入而不是库包含在您的 proguard.pro 文件中:

-injars jar-in-question.jar

-libraryjars jar-in-question.jar

所有这些都是您问题中的 -keep 语句的补充。

consumerProguardFiles 'lib-proguard-rules.txt' 应该为库设置

要将 ProGuard 规则添加到库项目中,必须指定 带有 consumerProguardFiles 属性的文件名称,位于 库的 build.gradle 文件的 defaultConfig 块。例如 以下代码片段将 lib-proguard-rules.txt 设置为 库的 专业卫士配置文件:

android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.txt'
}
...
}

请参阅原始文档以获取更多详细信息

最新更新