A problem occurred evaluating project ':app'.
> No signature of method: build_7cqkbrda1q788z3b02yxbvrx9.android() is applicable for argument types: (build_7cqkbrda1q788z3b02yxbvrx9$_run_closure2) values: [build_7cqkbrda1q788z3b02yxbvrx9$_run_closure2@41108b15]
4条答案
按热度按时间332nm8kg1#
首先,我们将在构建文件中启用收缩和模糊处理。找到
build.gradle
文件夹中的/android/app/
文件并以粗体添加行接下来,我们将创建一个配置,它将保留整个Flutter Package 器代码。创建
/android/app/proguard-rules.pro
文件并插入:注意:使用
signingConfigs.release
而不是signingConfigs.debug
来构建apk或appbundleddrv8njm2#
我将把这个答案留在这里,作为任何必须处理这个问题并遇到这个线程的可怜灵魂的补充。
截至2021年12月,使用最新的Android Sdk,Studio和Flutter版本,如果您尝试执行
useProguard true
,它将无法工作,因为它已经过时了。可悲的是,Gradle不会告诉你这一点,相反,你会得到这样的错误:你也看到了,这完全是胡言乱语,毫无用处。秘诀是根本不使用
useProguard
。默认情况下,Flutter被设置为使用R8来处理Android上的缩小。这里有一个关于这个的帖子供参考:Gradle : DSL element 'useProguard' is obsolete and will be removed soon
1yjd4xko3#
如果您使用的是firebase,请参阅Flutter build crashes using ProGuard with Firebase Auth
接下来,您需要考虑
pubspec.yaml
中的依赖项您可以立即忽略任何纯Dart包-您只是在寻找插件。在这些插件中,您只对那些使用现有库的插件感兴趣。你可能已经把这些添加到gradle中了。这些都是你需要保护的名称缩短。最简单的方法可能只是尝试一下,看看
NoClassDefFoundError
中会弹出哪些包名,然后不断迭代地添加它们。正如雷米所说,你的收益将是最小的,所以它真的值得麻烦。您应该会看到在即将发布的版本中APK大小有所改进。
gorkyyrv4#
最新解决方案
首先,您应该在
android/app/build.gradle
中使用shrinkResources true
而不是useProguard true
。在第二种情况下,不使用
proguard-android.txt
,而应该使用proguard-android-optimize.txt
。在Android官方文档中阅读更多内容。
阅读更多关于Android代码收缩的信息。
以下是新版本的proguard配置规则,以防止日志记录和其他改装保护:
要检查它,请安装
jadx
并打开your_app.apk
,然后在其中搜索关于log
的内容。你应该有非proguard之间的比较.apk和proguard配置.apk日志搜索结果.无Proguard规则
使用Proguard规则