首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Firebase的Leakcanary崩溃

Google Firebase的Leakcanary崩溃
EN

Stack Overflow用户
提问于 2016-06-02 07:16:02
回答 3查看 1.1K关注 0票数 5

在处理泄漏时,我在Application.onCreate中得到一个Application.onCreate。据我所知,之所以会出现这种情况,是因为LeakCanary创建我的应用程序类时没有使用Google服务的所有内容,而Firebase无法成功初始化。有什么办法解决这个问题吗?

编辑:我使用的是leakcanary-android:1.4-beta2,这是在转储堆之后发生的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-02 12:26:07

我想我找到了解决办法。与使用Google服务插件和google-services.json不同,您可以自己在Application.onCreate或其他地方配置和初始化Firebase。

代码语言:javascript
复制
@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内。您可以根据包名计算出您的clientoauth_client是如下所示的第二个对象:

代码语言:javascript
复制
{
  "client_id": "asfagasdgdas",
  "client_type": 3
}

api键是client[app].api_key,再次根据包查找客户端。

原谅那个伪君子。

结构以后可能会改变,这是为Play Services版本9.0.1编写的。

票数 0
EN

Stack Overflow用户

发布于 2016-09-04 11:38:38

或者,您可以按照文档的建议,保留google服务插件的配置。

通过将此添加到FirebaseInitProvider中禁用AndroidManifest.xml

代码语言:javascript
复制
<provider
    android:name="com.google.firebase.provider.FirebaseInitProvider"
    android:enabled="false" />

并将其添加到应用程序类中

代码语言:javascript
复制
FirebaseOptions options = FirebaseOptions.fromResource(this);
FirebaseApp.initializeApp(this, options);

这样,您就不必手工配置FirebaseOptions。

票数 3
EN

Stack Overflow用户

发布于 2018-03-23 14:01:03

这一问题似乎是由Firebase的自动初始化过程引起的。要解决此问题,应手动禁用Firebase、Init提供程序和init Firebase。要做到这一点,您应该执行以下操作:

禁用AndroidManifest文件中的提供程序:

代码语言:javascript
复制
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider" 
android:authorities="${applicationId}.firebaseinitprovider" 
android:enabled="false" /> 

通过将此类行添加到Application类中,手动初始化Firebase:

代码语言:javascript
复制
FirebaseApp.initializeApp(this, FirebaseOptions.fromResource(this))

除了您需要添加authorities来禁用提供者这一事实之外,@ne‘’mi的回答几乎是正确的。决定创造一个新的答案,这将使其他人更容易找到完全实用的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37585090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档