使用proguard时如何保留/排除特定的包路径?

Jon*_*ona 101 android proguard

我想从ProGuard中排除一些文件路径.例com.myapp.customcomponents

我怎样才能做到这一点?我讨厌为这个目录中的每个自定义组件文件放置-keep标志.

我尝试了以下但它不起作用:

-keep public class com.myapp.customcomponents.*
Run Code Online (Sandbox Code Playgroud)

Eri*_*une 217

您没有指定它以什么方式不起作用.您的配置保留指定包中所有公共类的名称:

-keep public class com.myapp.customcomponents.*
Run Code Online (Sandbox Code Playgroud)

以下配置保留指定包及其子包中所有公共类的名称:

-keep public class com.myapp.customcomponents.**
Run Code Online (Sandbox Code Playgroud)

以下配置保留指定包及其子包中所有公共/受保护类/字段/方法的名称:

-keep public class com.myapp.customcomponents.** {
  public protected *;
}
Run Code Online (Sandbox Code Playgroud)

  • 双星号 (**) 不再编译 (Android Studio 4.0) (17认同)
  • Android Studio 4.x 将显示双星号 (**) 的“未解析的类名”等错误,但它会按预期工作。 (3认同)

Paw*_*ari 49

在proguard.config的底部添加以下行

-keep class com.facebook.** { *; }
Run Code Online (Sandbox Code Playgroud)

相应地更换包名称,这里com.facebook将被排除在proguard之外

  • @MuhammadBabar我的意思是每个范围内的每个成员,方法,类,简而言之! (14认同)
  • 为什么要保持并且不要一起使用 (13认同)
  • 是什么`{*; }是指? (13认同)

mts*_*kis 8

使用 Android Studio 4.0 对我有用的是:

-keepclassmembers class com.myapp.customcomponents.* {
    <fields>;
    <init>();
    <methods>;
}
Run Code Online (Sandbox Code Playgroud)

其他答案中的双星号 (**) 对我不起作用。我也用R8试过上面的配置,工作正常。