Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上Firebase需要什么ProGuard配置?_Android_Firebase_Proguard - Fatal编程技术网

Android上Firebase需要什么ProGuard配置?

Android上Firebase需要什么ProGuard配置?,android,firebase,proguard,Android,Firebase,Proguard,在使用Android应用程序的SDK时,我不断收到如下警告和错误(在Eclipse中): 不幸的是,Firebase没有任何关于它与ProGuard一起使用的官方文档 当我的应用程序与ProGuard混淆时,我需要什么指令才能成功地用Firebase编译发行版?根据我的个人测试,Firebase增强的Android应用程序必须使用ProGuard编译 在任何情况下,如果您在Firebase中使用自定义对象,即bean或POJO,则必须添加-keepnames class com.my.packa

在使用Android应用程序的SDK时,我不断收到如下警告和错误(在Eclipse中):

不幸的是,Firebase没有任何关于它与ProGuard一起使用的官方文档


当我的应用程序与ProGuard混淆时,我需要什么指令才能成功地用Firebase编译发行版?

根据我的个人测试,Firebase增强的Android应用程序必须使用ProGuard编译

在任何情况下,如果您在Firebase中使用自定义对象,即bean或POJO,则必须添加
-keepnames class com.my.package.beans.*{*}

Firebase SDK 1.0.18:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**
-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }
-keep class !com.my.package.** { *; }
Firebase SDK 1.1.1:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**
-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }
-keep class !com.my.package.** { *; }
Firebase SDK 2.0.0:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**
-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }
-keep class !com.my.package.** { *; }
最后手段:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**
-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }
-keep class !com.my.package.** { *; }
注意事项:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**
-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }
-keep class !com.my.package.** { *; }

欢迎任何官方指导方针。
-dontwarn
指令显然是危险的,代码可能会在我未测试的点中断。此外,上述规则非常宽松,其他规则可能会更好地优化您的APK。

这不是真正的官方文档,但Firebase在其一个Github存储库中展示了一些基本的proguard规则


继其他答案之后,使用Firebase 2.4.1,我只需在我的proguard配置(YMMV)中包括以下内容:


我的Firebase SDK 2.4.2的工作集:

-keep class com.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform

firebase 2.5.2的配置似乎已更改。这就是我的工作:

-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.shaded.fasterxml.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

我也为此挣扎。 感谢用户4989692和Ugo为我指明了正确的方向

以下是对我有效的方法:

格雷德尔先生

    buildTypes {
    debug {
        minifyEnabled false
        shrinkResources false
        useProguard false
        debuggable true
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled true
        shrinkResources true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}
proguard-rules.pro

-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform

-keepattributes Signature
-keepattributes *Annotation*
-keepattributes InnerClasses,EnclosingMethod

-keep class com.YOUR-APP-DOMAIN.** { *; }

# Basic ProGuard rules for Firebase Android SDK 2.0.0+
-keep class com.firebase.** { *; }

-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }

我在Firebase文档中发现了这一点:

当你在应用程序中使用FieldRealTimeBasic和PROGORID时,你需要考虑你的模型对象在混淆之后会被序列化和反序列化。如果使用DataSnapshot.getValue(类)或DatabaseReference.setValue(对象)读取和写入数据,则需要将规则添加到proguard-rules.pro文件:

# Add this global rule    
-keepattributes Signature

# This rule will properly ProGuard all the model classes in 
# the package com.yourcompany.models. Modify to fit the structure
# of your app.
-keepclassmembers class com.yourcompany.models.** {
*;
}
它解决了我的问题

将此添加到proguard规则文件中

-optimizations !class/merging/*

如果您使用的是Firebase实时数据库,则模型对象将在模糊强大文本后序列化和反序列化

-keep class com.yourdevelopername.urappname.** { *; }

这就是为什么清洁架构很容易修复的原因,看看这个场景,如果我的应用程序中有来自多个文件的多个firebase请求,那么试图让单个类让firebase工作将是一团糟,所以,如果我们有一个模块化的代码,并且我们将所有的请求和数据模型存储在一个数据层中,那么只保留使用firebase的类而不是整个项目将非常容易,这样做将更好地缩小apk的大小

2021答案
在数据类之前使用
@保留
注释,以便proguard保留它们。它是AndroidX的一部分,用于和。用于Firebase、Jetpack Navigator和改装

保持 数据类列表( val id:String=“”, val name:String=“” )

表示在生成时缩小代码时不应删除带注释的元素。这通常用于仅通过反射访问的方法和类,因此编译器可能认为代码未使用



@詹尼通:谢谢!对这些变化有何解释?我在SDK中找不到任何
org.apache.*
com.fasterxml.jackson.*
类,只有
shade
版本。我必须添加
-keepattributes签名才能让jackson正常工作。参考:@riccardocasata你说得对,这是必需的。我只是忘了提到它,因为我有这个属性。从我们的Slack频道:“如果您使用FirebaseUI,您需要添加以下行:
-dontwarn com.firebase.ui.auth.*
”您用“如果您在firebase中使用自定义对象,即bean或POJO”保存了我的一天。我的应用程序在生产中崩溃,因为没有此规则。谢谢谢谢这个消息来源!我的配置(见其他答案)的不同之处在于,他们删除了
org.joda.time.*
org.shade.apache.*
org.ietf.jgss.*
dontwarn
规则,而是为
org.apache.*
添加了一条规则。欢迎您。只是想添加它,因为它来自Firebase本身,也因为它与您的个人测试略有不同。所以它只是最后四个新条目,对吗?也许一个
-dontwarn com.firebase.*
在这里就足够了?不会保留com.YOUR-APP\u域只需禁用所有Proguard?这似乎真的错了。根据firebase,您需要:-keepclassmembers类com.yourcompany.models.*{*;}只需与实时数据库一起使用的模型!另请参见,不幸的是,这并没有解决Coinverse应用程序的Firebase问题。您可能会看到完整的代码。使用ProGuard的Firebase Firestore数据库是否有与使用实时数据库时类似的配置,如本节所述?能否提供文档链接?@SalicBlu3,以下是文档:。很遗憾,这并没有解决Firebase的问题。
@Keep
注释也可用于保留数据类。为Firebase测试并生效:在@Kaiffi中的方法对您不起作用吗?不幸的是,这并没有解决Coinverse应用程序的Firebase问题。您可能会看到完整的代码。不幸的是,这并没有解决Coinverse应用程序的Firebase问题。你可以看到完整的代码。哇!你是一个救生员,有一个非常优雅的解决方案!感谢男士:)谷歌可以通过更新其文档做得更好。您仍然需要添加
-keep class com.Google.firebase.*{*}
,否则您的应用程序将无法在三星设备上运行,请重新安装