【问题标题】:How to integrate instabug SDK into flutter app如何将 instabug SDK 集成到 Flutter 应用中
【发布时间】:2021-01-19 22:13:20
【问题描述】:

我正在尝试在我的 android Flutter 应用中实现 Instabug(崩溃分析),但我不知道应该在哪里输入此代码到我的项目中。

在 Application 子类的 onCreate() 方法中初始化 Instabug:

Image of the step from instabug

flutter 包中 Application 子类的 onCreate() 方法在哪里?如果我需要创建一个,我会在哪里制作?

【问题讨论】:

    标签: android flutter sdk instabug


    【解决方案1】:

    在 Flutter 应用根目录中,

    关注android/app/src/main/kotlin/your package/,你会看到MainActivity

    只需在MainActivity 的同一路径中创建一个继承自FlutterApplication 的类

    class CustomApplication : FlutterApplication {
        override fun onCreate() {
            super.onCreate()
            // Paste here the integration codes of instabug
        }
    }
    

    然后去Manifest,android/app/src/main/kotlin/your package/AndroidManifest.xml,修改应用部分

    <application
       android:name=".CustomApplication"
       ...
    </application>
    

    【讨论】:

    • “FlutterApplication”是什么,我需要修改 AndroidManifest.xml 文件中已经存在的 android:name 吗?
    • FlutterApplication 是由flutter编写的。正如我所写,您只需使用它来制作自定义应用程序类。是的,您需要通过修改 android:name 在清单中说明
    • 对于 FlutterApplication,我得到“无法解析符号 'FlutterApplication'”
    • 是的,它可能会发生,但运行应用程序不会有问题
    • :无法解析以下类的超类型。请确保您在类路径中有所需的依赖项:class com.ju.test_app_v2.CustomFlutterApplication,未解析的超类型:FlutterApplication
    【解决方案2】:

    你可以使用包https://pub.dev/packages/instabug_flutter
    对于Android,请按照Readme中提到的步骤进行操作
    第 1 步:将以下 Maven 存储库添加到您的项目级别 build.gradle

    allprojects {
        repositories {
            maven {
                url "https://sdks.instabug.com/nexus/repository/instabug-cp"
            }
        }
    }
    

    第 2 步:创建一个扩展 FlutterApplication 的新 Java 类并将其添加到您的 AndroidManifest.xml

    <application
        android:name=".CustomFlutterApplication"
        ...
    </application>
    

    第 3 步:在您新创建的 CustomFlutterApplication 类中,覆盖 onCreate() 并添加以下代码。

    CustomFlutterApplication 的代码来自https://github.com/Instabug/Instabug-Flutter/blob/master/example/android/app/src/main/java/com/instabug/instabugflutterexample/CustomFlutterApplication.java

    package com.instabug.instabugflutterexample;
    
    import io.flutter.app.FlutterApplication;
    import com.instabug.instabugflutter.InstabugFlutterPlugin;
    
    import java.util.ArrayList;
    
    public class CustomFlutterApplication extends FlutterApplication {
      @Override
      public void onCreate() {
        super.onCreate();
        ArrayList<String> invocation_events = new ArrayList<>();
        invocation_events.add(InstabugFlutterPlugin.INVOCATION_EVENT_FLOATING_BUTTON);
        InstabugFlutterPlugin instabug = new InstabugFlutterPlugin();
        instabug.start(CustomFlutterApplication.this, "2d355f559ea67051a56fce82603f8e41", invocation_events);
        instabug.setWelcomeMessageMode("WelcomeMessageMode.disabled");
      }
    }
    

    Dart 示例代码 sn-p https://github.com/Instabug/Instabug-Flutter/blob/master/example/lib/main.dart

    import 'dart:async';
    import 'dart:io' show Platform;
    import 'package:flutter/material.dart';
    import 'package:instabug_flutter/Instabug.dart';
    import 'package:instabug_flutter/BugReporting.dart';
    import 'package:instabug_flutter/Surveys.dart';
    import 'package:instabug_flutter/FeatureRequests.dart';
    import 'package:instabug_flutter/CrashReporting.dart';
    
    void main() async {
      FlutterError.onError = (FlutterErrorDetails details) {
        Zone.current.handleUncaughtError(details.exception, details.stack);
      };
    
      runZoned<Future<void>>(() async {
        runApp(MyApp());
      }, onError: (dynamic error, StackTrace stackTrace) {
        CrashReporting.reportCrash(error, stackTrace);
      });
    }
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      String _platformVersion = 'Unknown';
    
      @override
      void initState() {
        super.initState();
        if (Platform.isIOS) {
          Instabug.start('efa41f402620b5654f2af2b86e387029',
              <InvocationEvent>[InvocationEvent.floatingButton]);
        }
        initPlatformState();
      }
    

    【讨论】:

    • 你应该在哪里编写CustomFlutterApplication类?
    • 你知道我该如何解决这个问题吗? : 以下类的超类型无法解析。请确保您在类路径中有所需的依赖项:类 com.ju.test_app_v2.CustomFlutterApplication,未解析的超类型:FlutterApplication
    • 我建议你可以直接下载这个repo并直接测试它的例子。在它运作良好之后。您可以比较差异。
    【解决方案3】:

    在深入研究他们在 instabug github repo 上的示例后,我能够解决问题。

    1. 在 main/kotlin/com/example/app 下新建一个 java 文件 CustomFlutterApplication.java。这是 MainActivity.kt 所在的位置。
        package com.example.app;
        
        import io.flutter.app.FlutterApplication;
        import com.instabug.instabugflutter.InstabugFlutterPlugin;
        
        import java.util.ArrayList;
        
        public class CustomFlutterApplication extends FlutterApplication {
          @Override
          public void onCreate() {
            super.onCreate();
            ArrayList<String> invocationEvents = new ArrayList<>();
            invocationEvents.add(InstabugFlutterPlugin.INVOCATION_EVENT_SHAKE);
            new InstabugFlutterPlugin().start(CustomFlutterApplication.this, "<API KEY>", invocationEvents);
          }
        }
    
    1. 在您的 AndroidManifest.xml 中,将 android:name="io.flutter.app.FlutterApplication" 替换为 android:name=".CustomFlutterApplication"

    2. 在您的项目级别 build.gradle,

        allprojects {
            repositories {
                maven {
                    url "https://sdks.instabug.com/nexus/repository/instabug-cp"
                }
            }
        }
    
    1. 现在构建您的项目

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2022-10-15
      • 2020-09-22
      • 2021-05-16
      • 2021-10-25
      • 2021-12-28
      相关资源
      最近更新 更多