ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

海外App 崩溃率监控 之 FireBase 接入

2022-09-14 13:03:09  阅读:547  来源: 互联网

标签:google java firebase 接入 App implementation FireBase android com


背景: 海外 App 需要接入 FireBase SDK, 用来 监控崩溃率,需要上架 谷歌商店,所以只考虑了 谷歌自家的。

根据 FireBase 后台教程 大概就是三步走:

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.3.1')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics'
    implementation 'com.google.firebase:firebase-analytics'
}
在项目级 build.gradle 文件中,将 Crashlytics Gradle 插件作为 buildscript 依赖项添加。
buildscript {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }

    dependencies {
        // ...

        // Check that you have the Google services Gradle plugin v4.3.2 or later
        // (if not, add it).
        classpath 'com.google.gms:google-services:4.3.13'

        // Add the Crashlytics Gradle plugin
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
    }
}

allprojects {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }
}
在应用级 build.gradle 文件中,应用 Crashlytics Gradle 插件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin

// Apply the Crashlytics Gradle plugin
apply plugin: 'com.google.firebase.crashlytics'
Button crashButton = new Button(this);
crashButton.setText("Test Crash");
crashButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
       throw new RuntimeException("Test Crash"); // Force a crash
   }
});

addContentView(crashButton, new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT,
       ViewGroup.LayoutParams.WRAP_CONTENT));

 

解决问题过程记录,以及总结

1、由于 原来使用 google serviece API, 直接导入了 
implementation 'com.google.android.gms:play-services:12.0.1'
这个版本是 比较老的,现在需要使用 更新版本的 

//    implementation 'com.google.firebase:firebase-crashlytics:18.2.12'
//    implementation 'com.google.firebase:firebase-analytics:21.1.0'

然而这个版本又太新了, 我们的原有的部分 sdk 升级兼容成本太高,又需要 将 crashlytics 和 analytics 进行版本降级
最终 妥协到了 

    implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
    implementation 'com.google.firebase:firebase-analytics:16.0.5'

这个版本。

google service 只使用了

    implementation 'com.google.android.gms:play-services-ads:15.0.1' 

这个组件,我们就可以移除 

    // implementation 'com.google.android.gms:play-services:12.0.1'

这个 萝卜白菜一箩筐的 大包。

在 我们当前选择的 crashlytics 和 analytics 版本中,已经包含了  okhttp 等模块,我们又需要移除 目前项目gradle配置中的

//    implementation files('libs/okhttp-3.4.1.jar')
//    implementation files('libs/okio-1.8.0.jar')

这两个库,需要将libs 文件夹下的 这两个库文件删除。(否则会报库文件冗余的错)

总的操作下来,包体减小了大约 5M。 


在 gradle.properties 文件中,添加
android.useAndroidX=true
android.enableJetifier=true
来避免版本兼容的一些问题

比如:
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: android.support.v4.app.INotificationSideChannel
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)


Android X 是用来 优化统一 各种 android support 库的。
为了解决 support 上面的问题,在 2018 Google I/O 大会上推出了 AndroidX 来替换了 Android Support Library  。在 Android 9.0 (API级别 28) 正式发布后,新版本的支持库 AndroidX 就诞生了。它属于 Jetpack,除了现有的支持库以外,AndroidX 库还包含了最新的 JetPack 组件,在 Api27及更早版本,依然可以使用 Support Library 但是之后新开发的所有库都将在 AndroidX 库中进行了。
因此 AndroidX 库是 Support Library 库的替换,在 API 28 及以后就要使用 AndroidX 库来彻底替换 Support Library 库了。

作者:sydMobile
链接:https://juejin.cn/post/6850037267760611336
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

android.useAndroidX:设置true为时,此标志表示您要从现在开始使用AndroidX。如果该标志不存在,则Android Studio的行为就像标志设置为一样false。
android.enableJetifier:设置true为时,此标志表示您希望获得工具支持(来自Android Gradle插件)以自动转换现有的第三方库,就像它们是为AndroidX编写的一样。如果该标志不存在,则Android Studio的行为就像标志设置为一样false。

作者:Yun丶Lei
链接:https://www.jianshu.com/p/14ff3c6fe0cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


android.enableR8=true
Android Studio 稳定版 3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8
传统的 Java 编译器将源代码编译为 Java 字节码(.class)。 ProGuard 可以选择优化此代码,从而生成更小,更快的 Java 字节码。 dx 编译器最终可以将此 Java 字节码转换为 Dalvik 字节码(.dex)。 Dalvik 字节码打包在 apk 文件中,最终安装在设备上。 根据 Android 的版本,字节码被及时(Dalvik VM),提前(ART)或两者的组合(Android P)解释、编译。 

D8 已经产生比 dx 更好的字节码,具有更少的指令和更好的寄存器分配。
R8 是 D8 的衍生产品,旨在集成 ProGuard 和 D8 的功能:
R8 和当前的代码缩减解决方案 Proguard 相比,R8 可以更快地缩减代码,同时改善输出大小。
R8 可以 更好的 压缩混淆 java 代码

作者:JasonWuuu
链接:https://juejin.cn/post/6844903773144350734
来源:稀土掘金

 

标签:google,java,firebase,接入,App,implementation,FireBase,android,com
来源: https://www.cnblogs.com/lesten/p/16692645.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有