使用带有 Firebase 身份验证的 ProGuard 构建 Flutter 崩溃

Posted

技术标签:

【中文标题】使用带有 Firebase 身份验证的 ProGuard 构建 Flutter 崩溃【英文标题】:Flutter build crashes using ProGuard with Firebase Auth 【发布时间】:2019-01-25 11:37:51 【问题描述】:

我关注了these instructions on adding ProGuard to Flutter,现在在启动应用程序时看到了这个异常:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/auth/internal/zzae;

这显然与 Firebase Auth 有关。上述说明还说明了以下内容:

任何其他库(例如 Firebase)都需要添加自己的规则。

但是,我确实没有找到任何资源显示我需要将哪些语句附加到proguard-rules.pro。 我可以想象其他 Firebase 组件在 Auth 组件修复后也会类似崩溃,所以我想知道 “例如 Firebase” 的含义是什么,即是否每个组件都有规则,或者如果我只需要为 Firebase 身份验证解决此问题。

【问题讨论】:

你可以试试-keep class com.google.firebase.** *; 试试com.google.android.** @RichardHeap 谢谢,现在这工作正常。我想知道是否有一个更优化的解决方案。 【参考方案1】:

包括

-keep class com.google.firebase.**  *; 

Proguard 为您提供了几个功能:删除死代码、通过将类成员和包名称重命名为短字符串来减少代码大小,并且通过重命名使代码更难阅读,从而进行逆向工程。

通过保持整个 com.google.firebase 树完好无损,您不会从尺寸减小中受益。我想在这种情况下混淆是无关紧要的,因为它是一个开源库。

您可以尝试只使用keeping 您使用的*** API 类(如果不阅读 firebase 插件实现,您可能无法分辨它们是什么)以实现尺寸减小,但这是很多工作以实现可能的 APK 大小减小,并且可能会引入一些脆弱性。

不,它不是“最佳”,但它很简单。

【讨论】:

以上是关于使用带有 Firebase 身份验证的 ProGuard 构建 Flutter 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

带有 WebView 的 Flutter 应用中的 Firebase 身份验证

带有 Firebase 身份验证的 Nuxt s-s-r 身份验证防护

使用带有 Firebase 身份验证的 ProGuard 构建 Flutter 崩溃

使用带有 Redux 和 Firebase 身份验证的 React-Navigation v5

带有 Firebase UI 的 Firebase 电话身份验证存在 SafetyNet 问题

使用带有条纹 Firebase 扩展的运行付款时,条纹产品元数据未返回到 Firebase 的经过身份验证的用户实例