在Flutter 3.7.11上无法正确使用proguard/r8规则

问题描述 投票:0回答:1

我无法使用 android 的 flutter 有效地从最终 apk 中的代码混淆中排除类。

我正在开发一个插件,它包装了一些本机android代码/库并提供了一些flutter类。然后我正在开发的 flutter 应用程序将使用该包。

这一点很重要,因为以前一切都在一个项目上,并且通过通道调用本机代码,并且本机库没有问题。但由于我将该代码移到了插件中,代码混淆的问题使我无法使用该库。 专有的核心库似乎按名称加载类并抛出异常,因为最终 apk 中的所有类都给出了伪随机字母名称。 该问题仅在发布模式下出现。

这就是说这个问题是100%的混淆。因此,对我来说,使用 proguard 规则是有意义的。我知道 flutter 默认使用 r8 并且无法禁用它,但根据我的理解,它仍然应该解释 .pro 文件,并且语法应该是相同的。

但是,通过使用 android studio 工具检查 apk,class.dex 文件仅包含混淆的内容,除了来自 google 和条形码库的内容。

我的应用程序中的 gradle 看起来像这样(我尝试了一些变体,例如添加默认文件):

buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
            minifyEnabled true
            proguardFiles 'proguard-rules.pro'
        }
    }

proguard 文件(拼命尝试排除所有内容以便在发布的 apk 中看到某些内容):

-keep class com.example.printer.** { *; }
-keep class com.example.myapp.** { *; }

-dontshrink
-dontoptimize

我还尝试在我的插件的 android 文件夹中添加该 proguard 文件的副本(这是必需的吗?)。我尝试使用“flutter run --release”和“flutter build apk --release --no-shrink”来构建

flutter plugins proguard release obfuscation
1个回答
0
投票

显然是扩展名 .pro 引起了这个问题。 TXT 似乎工作得很好。因此,gradle 现在看起来像这样:

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug
        minifyEnabled true
        proguardFiles 'proguard-rules.txt'
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.