如何防止ProGuard混淆从JAR文件导入的库?

3

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

我尝试在生成的库目录中创建名为“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混淆库文件?

将问题分解成更小的问题,在Proguard中首先给出合格的子包,如果它有效,则添加更多内容,然后再进行整合。 - Shailesh Chandra
你解决了吗? - Deepak Joshi
1
@DeepakJoshi 不是的 Deepak。我已经向 DexGuard 团队提出了一张工单,他们说那时还不支持。我们最终购买了测试应用程序模块的许可证。 - Sri Harsha Chilakapati
@SriHarshaChilakapati,能否访问所提出的票据链接? - Deepak Joshi
@DeepakJoshi 我不这么认为。另外,我已经转到了一家新公司,所以也没有访问该链接的权限了。 - Sri Harsha Chilakapati
谢谢。我会尝试找到一种优雅简洁的方法来完成这个任务。 - Deepak Joshi
3个回答

0

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

要将ProGuard规则添加到您的库项目中,您必须在库的build.gradle文件的defaultConfig块内使用consumerProguardFiles属性指定文件名。例如,以下代码片段将lib-proguard-rules.txt设置为库的ProGuard配置文件:

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

请查看原始文档以获取更多细节。

0
对我而言,我需要将 jar 文件作为输入而不是库包含在您的 proguard.pro 文件中:
-injars jar-in-question.jar

不是

-libraryjars jar-in-question.jar

所有这些都是针对你问题中的-keep语句之外的补充。


0

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

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

1
不发出警告是我相信的另一回事。当我尝试将其添加到应用程序的build.gradle时,Gradle能够编译成功,但我开始在运行时看到错误。 - Sri Harsha Chilakapati
将此行添加到proguard.pro文件中。 - Bipin Gawand
抱歉打错了字,我是指已将它添加到应用程序的proguard.pro文件中。它编译得很好,但会抛出noclassdeffoundexception异常。 - Sri Harsha Chilakapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接