proguard警告:配置保留入口点..但不是描述符类



我配置了:

-keep ,allowoptimization,allowobfuscation,allowshrinking public class     org.jf.dexlib2.dexbacked.** {
    *;
}

但仍收到警告:

 Note: the configuration keeps the entry point 'com.trusteer.trf.dex_parser { int get_strings_count(org.jf.dexlib2.dexbacked.DexBackedDexFile); }', but not the descriptor class 'org.jf.dexlib2.dexbacked.DexBackedDexFile'

我正在使用proguard版本4.7(在Android SDK中)

我该怎么办?

您已经告诉Proguard保留某个方法void foo(Bar bar);,但混淆描述符类Bar

只有当您要从外部源调用该方法时,这才是一个问题,因为模糊处理会更改签名(如果您使用Proguard来模糊一个库,然后在另一个应用程序中使用该库)。

因此有以下选择:

  • 将Proguard配置为同时保留Bar

  • 使用-dontnote指令告诉Proguard不要打印这样的笔记。

注意:配置保留入口点"…",但不是描述符类"…"您的配置包含一个保留给定方法(或字段)的保留选项,但对于方法描述符中的参数类型或返回类型的给定类,没有保留选项。然后你可能也想保留这门课。否则,ProGuard将混淆其名称,从而更改方法的签名。然后,该方法作为入口点可能变得不可理解,例如,如果它是公共API的一部分。您可以使用-keep选项修饰符includedescriptorclasses(-keep,includedescriptorclasses…)自动保留此类描述符类。您可以通过指定-dontnote选项来关闭这些注释。

在"proguard-rules.pro"文件中添加此行以解决此问题。

-ignorewarnings

来自文档:

allowshring指定在-keep中指定的入口点选项可能会缩小,即使它们必须以其他方式保留。也就是说,可以在收缩步骤中移除入口点,但是如果毕竟,它们是必要的,它们可能不会被优化或混淆

因此,您似乎需要删除allowshrinking修饰符。

在我的情况下,当我添加到build.gradle 时,就会出现这个问题

minifyEnable true

官方指示:https://flutter.dev/docs/deployment/android

Bughttps://github.com/flutter/flutter/issues/19250

proguard-rules.pro文件示例:

#Flutter Wrapper
-ignorewarnings
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

我在文档中做了一些挖掘。您还没有提供完整的配置文件,但我猜com.trusteer.trf.dex_parser设置为保留和不模糊。

这意味着从com.trusteer.trf.dex_parser到一个名为org.jf.dexlib2.dexbacked.DexBackedDexFile的类存在引用,该类要么被收缩,要么被混淆。这意味着链接现在已断开-dex_parser无法导入DexBackedDexFile

因此,要么禁用DexBackedDexFile的收缩和模糊处理,要么允许对dex_parser进行优化和模糊处理。

最新更新