NPE on FirebaseFunctions getInstance
NPE on FirebaseFunctions getInstance
调用 FirebaseFunctions.getInstance(FirebaseApp.getInstance())
时会抛出 NPE。 FirebaseApp.initializeApp(this);
在调用任何其他 firebase 功能之前在扩展应用程序 class onCreate
中被调用。
这是堆栈跟踪:
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 classes 已被排除在混淆之外,在我的 dexguard 配置下:
...
-keep class com.google.** { *; }
-keep class android.** { *; }
-keep class com.firebase.** { *; }
-keep class com.android.** { *; }
...
我正在使用:
- com.google.firebase:firebase-functions:12.0.1(所有其他 firebase 库也使用相同的版本)
- DexGuard 版本 8.1.15
- class路径'com.google.gms:google-services:4.0.1'
使用调试配置时一切正常,知道如何解决这个问题吗?
已经检查过这个类似的问题,但它已经过时了:Error with Firebase callable functions
编辑 - 新配置
我尝试使用以下内容更新 DexGuard 依赖项和 Firebase 依赖项:
- com.google.firebase:firebase-functions:16.1.1(所有其他 firebase 和 gms 依赖项都更新到最新的,除了 play-services-ads 是 16.0.0)
- DexGuard 版本 8.2.20
- class路径'com.google.gms:google-services: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)
对于可能遇到相同问题的人,这是由于 SDK 使用 FirebaseOptions.fromResource(Context)
初始化 FirebaseOptions 时 "projectId" 字段为 null
并且应用程序是使用 DexGuard
保护
FirebaseOptions {
applicationId = ***********************,
apiKeyapiKey = ***********************,
databaseUrl = ***********************,
gcmSenderId = ***********************,
storageBucket = ***********************,
projectId = null
}
问题已通过在 DexGuard 配置文件中添加以下行得到解决:
-keepresources string/project_id
调用 FirebaseFunctions.getInstance(FirebaseApp.getInstance())
时会抛出 NPE。 FirebaseApp.initializeApp(this);
在调用任何其他 firebase 功能之前在扩展应用程序 class onCreate
中被调用。
这是堆栈跟踪:
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 classes 已被排除在混淆之外,在我的 dexguard 配置下:
...
-keep class com.google.** { *; }
-keep class android.** { *; }
-keep class com.firebase.** { *; }
-keep class com.android.** { *; }
...
我正在使用:
- com.google.firebase:firebase-functions:12.0.1(所有其他 firebase 库也使用相同的版本)
- DexGuard 版本 8.1.15
- class路径'com.google.gms:google-services:4.0.1'
使用调试配置时一切正常,知道如何解决这个问题吗?
已经检查过这个类似的问题,但它已经过时了:Error with Firebase callable functions
编辑 - 新配置
我尝试使用以下内容更新 DexGuard 依赖项和 Firebase 依赖项:
- com.google.firebase:firebase-functions:16.1.1(所有其他 firebase 和 gms 依赖项都更新到最新的,除了 play-services-ads 是 16.0.0)
- DexGuard 版本 8.2.20
- class路径'com.google.gms:google-services: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)
对于可能遇到相同问题的人,这是由于 SDK 使用 FirebaseOptions.fromResource(Context)
初始化 FirebaseOptions 时 "projectId" 字段为 null
并且应用程序是使用 DexGuard
FirebaseOptions {
applicationId = ***********************,
apiKeyapiKey = ***********************,
databaseUrl = ***********************,
gcmSenderId = ***********************,
storageBucket = ***********************,
projectId = null
}
问题已通过在 DexGuard 配置文件中添加以下行得到解决:
-keepresources string/project_id