Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

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

 Share


NedK7

Recommended Posts

 

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

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

第 1 步:将 Firebase Crashlytics SDK 添加到您的应用

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'
}

第 2 步:将 Firebase Crashlytics 插件添加到您的应用

在项目级 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'

第 3 步:强制造成一次测试崩溃以完成设置

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 代码

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...