在处理泄漏时,我在Application.onCreate中得到一个Application.onCreate。据我所知,之所以会出现这种情况,是因为LeakCanary创建我的应用程序类时没有使用Google服务的所有内容,而Firebase无法成功初始化。有什么办法解决这个问题吗?
编辑:我使用的是leakcanary-android:1.4-beta2,这是在转储堆之后发生的。
发布于 2016-06-02 12:26:07
我想我找到了解决办法。与使用Google服务插件和google-services.json不同,您可以自己在Application.onCreate或其他地方配置和初始化Firebase。
@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内部,您将需要数据库url,即project_info.firebase_url。如果您有多个应用程序使用Firebase,这里将有多个client对象。
如果您使用谷歌登录,oauth id在client[app].oauth_client[1].client_id内。您可以根据包名计算出您的client,oauth_client是如下所示的第二个对象:
{
"client_id": "asfagasdgdas",
"client_type": 3
}api键是client[app].api_key,再次根据包查找客户端。
原谅那个伪君子。
结构以后可能会改变,这是为Play Services版本9.0.1编写的。
发布于 2016-09-04 11:38:38
或者,您可以按照文档的建议,保留google服务插件的配置。
通过将此添加到FirebaseInitProvider中禁用AndroidManifest.xml
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:enabled="false" />并将其添加到应用程序类中
FirebaseOptions options = FirebaseOptions.fromResource(this);
FirebaseApp.initializeApp(this, options);这样,您就不必手工配置FirebaseOptions。
发布于 2018-03-23 14:01:03
这一问题似乎是由Firebase的自动初始化过程引起的。要解决此问题,应手动禁用Firebase、Init提供程序和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))除了您需要添加authorities来禁用提供者这一事实之外,@ne‘’mi的回答几乎是正确的。决定创造一个新的答案,这将使其他人更容易找到完全实用的答案。
https://stackoverflow.com/questions/37585090
复制相似问题