【问题标题】:Proguard: How to keep everything except specific condition?Proguard:如何保留除特定条件之外的所有内容?
【发布时间】:2016-09-10 02:22:39
【问题描述】:

我正在使用 Proguard 来混淆我的代码,并且我需要保留每个第三方库,例如:

-keep class com.layer.** -不要警告 com.layer.** - 继续上课 com.twitter。** -保持类 android.support.** -keep class com.crashlytics.** { *; } -不要警告 com.crashlytics。** ...

每当我添加一个新的第三方库时,我都需要检查它的包名并将其添加到我的 proguard 配置文件中,否则应用程序可能会崩溃。

我不能像这样写规则吗?我不在乎不属于我的代码。

-keep class !(my.package.name.**)
-dontwarn !(my.package.name.**)

谢谢!

【问题讨论】:

    标签: proguard


    【解决方案1】:

    要将除类之外的所有内容保留在您自己的包中,您可以使用您已经指出的规则(不包括括号):

    -keep class !my.package.name.** { *; }
    

    这将隐式保留其他所有内容。 如果需要,您仍然可以为您的课程添加额外的 -keep 规则。

    -dontwarn 的规则应该以类似的方式工作:

    -dontwarn !my.package.name.**,**
    

    如果需要,您还可以添加类似的 -dontnote 规则。

    【讨论】:

    • 我试过了,但第三方库警告仍然弹出。我只有 -keep、-dontwarn、-verbose 和 -keepattributes SourceFile、LineNumberTable、Annotation。
    • 那你可以试试 -dontwarn !my.package.name.**,**
    • 谢谢,, ** 是 -dontwarn 行所必需的。
    • 我不得不使用下面的语法来保持类和方法的完整性-keep class !my.package.name.**,** { *; }
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2017-09-02
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多