调用FirebaseFunctions.getInstance(FirebaseApp.getInstance())
时,会抛出一个NPE。在调用任何其他firebase功能之前,在扩展应用程序类onCreate
内部调用FirebaseApp.initializeApp(this);
。
这是堆叠竞赛:
Fatal Exception: java.lang.NullPointerException
at com.google.firebase.functions.internal.Preconditions.checkNotNull(Unknown Source:876)
at com.google.firebase.functions.FirebaseFunctions.<init>(Unknown Source:77)
at com.google.firebase.functions.FirebaseFunctions.getInstance(Unknown Source:141)
at com.google.firebase.functions.FirebaseFunctions.getInstance(Unknown Source:159)
只有在使用发布配置构建应用程序时才会抛出异常,这意味着代码会被DexGuard混淆,但所有的firebase类都被排除在混淆之外,在我的DexGuard-config:下面
...
-keep class com.google.** { *; }
-keep class android.** { *; }
-keep class com.firebase.** { *; }
-keep class com.android.** { *; }
...
我正在使用:
- com.google.firebase:firebase函数:12.0.1(所有其他firebase库也使用相同的版本(
- DexGuard 8.1.15版
- classpath com.google.gms:google服务:4.0.1'
当使用调试配置时,一切都很正常,你知道如何解决这个问题吗?
已经检查了这个类似的问题,但它已经过时了:Firebase可调用函数错误
编辑-新配置
我试着用下面的更新DexGuard依赖项和Firebase依赖项:
- com.google.firebase:firebase函数:16.1.1(所有其他firebase和gms依赖项都更新到最新版本,除了16.0.0的播放服务广告(
- DexGuard版本8.2.20
- classpath com.google.gms:google服务:4.0.1'
这是新的堆栈:
Fatal Exception: java.lang.NullPointerException: null reference
at com.google.firebase.functions.a.a.a(Unknown Source:30)
at com.google.firebase.functions.FirebaseFunctions.(Unknown Source:77)
at com.google.firebase.functions.FirebaseFunctions.getInstance(Unknown Source:141)
at com.google.firebase.functions.FirebaseFunctions.getInstance(Unknown Source:154)
对于那些可能面临相同问题的人,这是由于"projectId"字段为null
引起的,当时sdk使用FirebaseOptions.fromResource(Context)
初始化FirebaseOptions,并且应用程序受到DexGuard 保护
FirebaseOptions {
applicationId = ***********************,
apiKeyapiKey = ***********************,
databaseUrl = ***********************,
gcmSenderId = ***********************,
storageBucket = ***********************,
projectId = null
}
通过在DexGuard配置文件中添加以下行,问题已经得到解决:
-keepresources string/project_id