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

时间:2015-02-24 08:20:12

标签: android proguard obfuscation

我已配置:

-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中)

我该怎么办?

6 个答案:

答案 0 :(得分:30)

你已告诉Proguard保留某个方法<a>,但要混淆描述符类void foo(Bar bar);

如果您要从外部源调用该方法,这只是一个问题,因为混淆会改变签名(如果您使用Proguard来混淆库,然后在另一个应用程序中使用该库)。

所以有以下选择:

  • 将Proguard配置为保留Bar

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

答案 1 :(得分:3)

注意:配置会保留入口点&#39; ...&#39;,而不是描述符类&#39; ...&#39; 您的配置包含保留给定方法(或字段)的-keep选项,但是对于给定类的no -keep选项,它是方法描述符中的参数类型或返回类型。然后你可能想继续上课。否则,ProGuard将对其名称进行模糊处理,从而更改方法的签名。然后,该方法可能变得不可用作为入口点,例如,如果它是公共API的一部分。您可以使用-keep选项修饰符includedescriptorclasses(-keep,includedescriptorclasses ...)自动保留此类描述符类。您可以通过指定-dontnote选项来关闭这些注释。

答案 2 :(得分:1)

将此行添加到“ proguard-rules.pro”文件中以解决此问题。

-ignorewarnings

答案 3 :(得分:0)

来自docuemnts

  

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

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

答案 4 :(得分:0)

In my case this problem appears when I add to build.gradle

minifyEnable true

Official instructions: https://flutter.dev/docs/deployment/android

Bug https://github.com/flutter/flutter/issues/19250

Sample proguard-rules.pro file:

#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.**  { *; }

答案 5 :(得分:-1)

我在docs进行了一些挖掘。您还没有提供整个配置文件,但我猜测com.trusteer.trf.dex_parser设置为保留而不是混淆。

这意味着com.trusteer.trf.dex_parser引用了一个名为org.jf.dexlib2.dexbacked.DexBackedDexFile的类,它被缩小或混淆了。这意味着该链接现已中断 - dex_parser无法导入DexBackedDexFile

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