处理泄漏时,我的Application.onCreate
内有leakcanary-android:1.4-beta2
。根据我的理解,这是因为LeakCanary创建了我的应用程序类而没有所有Google Play服务,Firebase无法成功初始化。任何想法如何解决这个问题?
编辑:
我使用#include<stdio.h>
int main()
{
int arr[5]={1,2,3,4,5},i;
for(i=0;i<5;i++)
{
printf("%d\n",*(arr+i));
}
return 0;
}
,这是在转储堆后发生的。
答案 0 :(得分:3)
或者,您可以按照文档的建议退出google play服务插件配置。
将FirebaseInitProvider添加到AndroidManifest.xml
,以禁用它<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:enabled="false" />
并将其添加到您的Application类
FirebaseOptions options = FirebaseOptions.fromResource(this);
FirebaseApp.initializeApp(this, options);
这样您就不必手动配置FirebaseOptions。
答案 1 :(得分:0)
我相信我找到了一个解决方法。您可以在google-services.json
或任何地方自行配置和初始化Firebase,而不是使用Google Play服务插件和Application.onCreate
。
@Provides
@Singleton
protected FirebaseApp proviceFirebaseApp(Application application) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId(application.getPackageName())
.setDatabaseUrl(BuildConfig.FIREBASE_DATABASE_URL)
.setApiKey(BuildConfig.FIREBASE_API_KEY)
.build();
return FirebaseApp.initializeApp(application, options);
}
找到钥匙有点神秘。在google-services.json
内,您需要数据库网址project_info.firebase_url
。如果您有多个使用Firebase仓库的应用,则此处会有多个client
个对象。
如果您使用的是Google登录,则oauth ID位于client[app].oauth_client[1].client_id
内。您可以根据包名找出client
,oauth_client
是第二个看起来像这样的对象:
{
"client_id": "asfagasdgdas",
"client_type": 3
}
api密钥为client[app].api_key
,再次根据您的包找到客户端。
原谅伪json。
结构可能会在以后更改,这是为Play Services 9.0.1版编写的。
答案 2 :(得分:0)
似乎问题是由Firebase的自动初始化过程引起的。要解决此问题,您应手动禁用Firebase Init Provider和init Firebase。为此,您应该执行以下操作:
在AndroidManifest
文件中停用提供商:
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="${applicationId}.firebaseinitprovider"
android:enabled="false" />
通过向Application
类添加此类行来手动初始化Firebase:
FirebaseApp.initializeApp(this, FirebaseOptions.fromResource(this))
P.S。 @ ne'mi的答案几乎是正确的,除了你需要添加authorities
来禁用提供者。决定创建一个新答案,其他人更容易找到完整功能的答案。