我配置了:
-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来混淆库,然后在另一个应用程序中使用该库)。
所以有以下选择:
Bar
。-dontnote
指令告诉Proguard不要打印这样的笔记。注意:配置保留入口点'...',但不保留描述符类'...'您的配置包含-keep选项以保留给定方法(或字段),但是给定类没有-keep选项这是方法描述符中的参数类型或返回类型。然后你可能想继续上课。否则,ProGuard将对其名称进行模糊处理,从而更改方法的签名。然后,该方法可能变得不可用作为入口点,例如,如果它是公共API的一部分。您可以使用-keep选项修饰符includedescriptorclasses(-keep,includedescriptorclasses ...)自动保留此类描述符类。您可以通过指定-dontnote选项来关闭这些注释。
在'proguard-rules.pro'文件中添加此行以解决此问题。
-ignorewarnings
来自docuemnts:
allowshrinking指定-keep选项中指定的入口点可能会缩小,即使必须另外保留它们。也就是说,可以在收缩步骤中删除入口点,但如果它们是必要的,它们可能不会被优化或混淆
因此,您似乎需要删除allowshrinking
修饰符。
在我的情况下,当我添加到build.gradle时会出现此问题
minifyEnable true
官方指示:https://flutter.dev/docs/deployment/android
Bug https://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.** { *; }
我在docs做了一些挖掘。您还没有提供整个配置文件,但我猜测com.trusteer.trf.dex_parser
设置为保持而不是混淆。
这意味着有一个从com.trusteer.trf.dex_parser
到一个名为org.jf.dexlib2.dexbacked.DexBackedDexFile
的类的引用,它被缩小或混淆。这意味着该链接现已被破坏 - dex_parser
无法导入DexBackedDexFile
。
因此要么禁用DexBackedDexFile
的收缩和混淆,要么允许对dex_parser
进行优化和混淆。