【问题标题】:How to exclude package name and sub package name while using progaurd In Android Studio?在Android Studio中使用proguard时如何排除包名和子包名?
【发布时间】:2020-07-11 17:34:34
【问题描述】:

我的项目包名称为

in.myapplication.app

我有一个包,其中包含几个包,就像这样

in.myapplication.app.samplePackage

in.myapplication.app.samplePackage.SubPackage

现在我想排除 samplePackage 包中存在的所有类,包括子包类。我在 progaurd 文件中尝试了这个保留规则

-keep class  in.myapplication.app.samplePackage.*{*;}

但它只允许 samplePackage 中的类而不是 samplePackage.SubPackage 中的类

我检查过类似的问题

  1. How to keep/exclude a particular package path when using proguard?
  2. Make Proguard completely ignore package

没有任何效果并尝试使用这些

-keep class in.myapplication.app.samplePackage.** {*;}

但它向我显示警告

shrinker 配置文件中未解析的引用名称

那么,如何在Android Studio中使用progaurd时排除包名和子包名?

【问题讨论】:

  • 这对我有用 -keep class in.myapplication.app.samplePackage.** { *; }
  • @Style-7 你用的是哪个安卓版本?我正在使用 android studio 4.0 我假设它存在于 4.0 及更高版本

标签: android android-r8


【解决方案1】:

将所有内容保存在包in.myapplication.app.samplePackage 和所有子包中的正确规则是:

-keep class in.myapplication.app.samplePackage.** {*;}

您看到的警告可能是假阴性,请参阅issue 153616200

【讨论】:

【解决方案2】:

Android Studio 4.0 及更高版本上,双星号 ()** 将不再编译。因此,如果您想修复此错误并排除子包,请这样做

-keep class in.myapplication.app.samplePackage.*.* {*;}

这也将排除samplePackage 中的包

【讨论】:

  • Android Studio 4.0 中的问题在于 IDE 错误地标记了 ** 语法。它仍然适用于实际的 R8 编译,所以我建议继续使用它,因为语义与 e.g. 不同。 *.*。见issue 153616200
  • @sgjesse 那么是IDE的问题吗?
  • 是的,IDE 会创建一个像 com.example.** 这样带有“未解析的类名”的类,但 R8 编译器会很好地处理它。请按照参考的错误了解修复此问题的进度。
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 2016-01-09
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2014-03-06
相关资源
最近更新 更多