From 4e0f0afb4c8cb67f918901ddf684bc62100ecdc3 Mon Sep 17 00:00:00 2001 From: ducafecat Date: Mon, 8 Jun 2020 17:57:14 +0800 Subject: [PATCH] =?UTF-8?q?add=20->=2012=20=E9=87=87=E7=94=A8=20sentry=20?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=94=B6=E9=9B=86=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 6 ++++++ android/app/src/main/AndroidManifest.xml | 3 +++ .../flutterducafecatnews/CrashHandler.java | 12 ++++++++++++ .../flutterducafecatnews/MainActivity.kt | 7 +++++-- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 4 ++-- ...1\350\257\257\346\224\266\351\233\206.xmind" | Bin 0 -> 38625 bytes ios/Podfile | 2 ++ ios/Podfile.lock | 15 ++++++++++++++- ios/Runner/AppDelegate.swift | 16 ++++++++++++++++ lib/main.dart | 2 +- 11 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 android/app/src/main/kotlin/com/example/flutterducafecatnews/CrashHandler.java create mode 100644 "doc/flutter\351\224\231\350\257\257\346\224\266\351\233\206.xmind" diff --git a/android/app/build.gradle b/android/app/build.gradle index f4f81db..70c842f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -35,6 +35,11 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 28 + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + sourceSets { main.java.srcDirs += 'src/main/kotlin' } @@ -90,4 +95,5 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + implementation 'io.sentry:sentry-android:2.1.6' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 1119208..4562b3b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -26,6 +26,9 @@ + + + diff --git a/android/app/src/main/kotlin/com/example/flutterducafecatnews/CrashHandler.java b/android/app/src/main/kotlin/com/example/flutterducafecatnews/CrashHandler.java new file mode 100644 index 0000000..808d89a --- /dev/null +++ b/android/app/src/main/kotlin/com/example/flutterducafecatnews/CrashHandler.java @@ -0,0 +1,12 @@ +package com.example.flutterducafecatnews; + +import java.lang.Thread.UncaughtExceptionHandler; +import io.sentry.core.Sentry; + +public class CrashHandler implements UncaughtExceptionHandler { + + @Override + public void uncaughtException(Thread t, Throwable e) { + Sentry.captureException(e); + } +} diff --git a/android/app/src/main/kotlin/com/example/flutterducafecatnews/MainActivity.kt b/android/app/src/main/kotlin/com/example/flutterducafecatnews/MainActivity.kt index e32823f..5d66859 100644 --- a/android/app/src/main/kotlin/com/example/flutterducafecatnews/MainActivity.kt +++ b/android/app/src/main/kotlin/com/example/flutterducafecatnews/MainActivity.kt @@ -1,12 +1,15 @@ package com.example.flutterducafecatnews -import androidx.annotation.NonNull; +import androidx.annotation.NonNull import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant + class MainActivity: FlutterActivity() { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); + val crashHandler = CrashHandler() + Thread.setDefaultUncaughtExceptionHandler(crashHandler) + GeneratedPluginRegistrant.registerWith(flutterEngine) } } diff --git a/android/build.gradle b/android/build.gradle index 3100ad2..04ec349 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 296b146..4cd49c8 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Fri Jun 05 11:09:52 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git "a/doc/flutter\351\224\231\350\257\257\346\224\266\351\233\206.xmind" "b/doc/flutter\351\224\231\350\257\257\346\224\266\351\233\206.xmind" new file mode 100644 index 0000000000000000000000000000000000000000..5c089e85f2aac4fac710bdd636d7e753c9e59ece GIT binary patch literal 38625 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 w$3Mt5#KZhQuS85k{sjK%oPU5 'Flutter' + pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '5.1.2' + # Plugin Pods # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 7203925..df08e1d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -17,6 +17,9 @@ PODS: - Flutter - "permission_handler (5.0.0+hotfix.6)": - Flutter + - Sentry (5.1.2): + - Sentry/Core (= 5.1.2) + - Sentry/Core (5.1.2) - share (0.0.1): - Flutter - shared_preferences (0.0.1): @@ -40,6 +43,7 @@ DEPENDENCIES: - path_provider (from `.symlinks/plugins/path_provider/ios`) - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`) - permission_handler (from `.symlinks/plugins/permission_handler/ios`) + - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `5.1.2`) - share (from `.symlinks/plugins/share/ios`) - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) @@ -68,6 +72,9 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/path_provider_macos/ios" permission_handler: :path: ".symlinks/plugins/permission_handler/ios" + Sentry: + :git: https://github.com/getsentry/sentry-cocoa.git + :tag: 5.1.2 share: :path: ".symlinks/plugins/share/ios" shared_preferences: @@ -81,6 +88,11 @@ EXTERNAL SOURCES: webview_flutter: :path: ".symlinks/plugins/webview_flutter/ios" +CHECKOUT OPTIONS: + Sentry: + :git: https://github.com/getsentry/sentry-cocoa.git + :tag: 5.1.2 + SPEC CHECKSUMS: device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec @@ -91,6 +103,7 @@ SPEC CHECKSUMS: path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0 permission_handler: b7a0953389e699927c6217933754cdcd0fa2c5a7 + Sentry: 7ee9a34a2c075a5e9306a1501d61c93a4b5c2333 share: 0b2c3e82132f5888bccca3351c504d0003b3b410 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 @@ -98,6 +111,6 @@ SPEC CHECKSUMS: sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0 webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 -PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83 +PODFILE CHECKSUM: a12b2c18c1b95e0b8349840175e8e460fe93d59e COCOAPODS: 1.9.1 diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 70693e4..15842ca 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,13 +1,29 @@ import UIKit import Flutter +import Sentry @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { + override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { + + SentrySDK.start(options: [ + "dsn": "https://46df062f08f64573b6a2a84b787b25cc@o402094.ingest.sentry.io/5265498", + "debug": true, // Enabled debug when first installing is always helpful + "enableAutoSessionTracking": true + ]) + + NSSetUncaughtExceptionHandler { exception in + print(exception) + SentrySDK.capture(message: exception.description) + SentrySDK.capture(exception: exception) + } + GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } } diff --git a/lib/main.dart b/lib/main.dart index cb26a5e..f416f6c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,7 +17,7 @@ final SentryClient _sentry = new SentryClient( // 是否开发环境 bool get isInDebugMode { - return true; // false 开始上传 sentry + return false; // false 开始上传 sentry } // 上报异常的函数