diff --git a/packages/firebase_crashlytics/CHANGELOG.md b/packages/firebase_crashlytics/CHANGELOG.md index 17bf38da9b6f..18aeaf0e2a65 100644 --- a/packages/firebase_crashlytics/CHANGELOG.md +++ b/packages/firebase_crashlytics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.2 + +* Updated to use the v2 plugin API. + ## 0.1.1+2 * When reporting to Crashlytics on iOS, and printing supplied logs, do not diff --git a/packages/firebase_crashlytics/android/build.gradle b/packages/firebase_crashlytics/android/build.gradle index 4e8fe907794c..f7b25f43206e 100644 --- a/packages/firebase_crashlytics/android/build.gradle +++ b/packages/firebase_crashlytics/android/build.gradle @@ -42,3 +42,30 @@ dependencies { } apply from: file("./user-agent.gradle") + +// TODO(): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348 +afterEvaluate { + def containsEmbeddingDependencies = false + for (def configuration : configurations.all) { + for (def dependency : configuration.dependencies) { + if (dependency.group == 'io.flutter' && + dependency.name.startsWith('flutter_embedding') && + dependency.isTransitive()) + { + containsEmbeddingDependencies = true + break + } + } + } + if (!containsEmbeddingDependencies) { + android { + dependencies { + def lifecycle_version = "1.1.1" + implementation "android.arch.lifecycle:runtime:$lifecycle_version" + implementation "android.arch.lifecycle:common:$lifecycle_version" + implementation "android.arch.lifecycle:common-java8:$lifecycle_version" + implementation "android.arch.lifecycle:extensions:$lifecycle_version" + } + } + } +} diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index 0c3edff9991f..5e8af47b0691 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -4,9 +4,12 @@ package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics; +import android.content.Context; import android.util.Log; import com.crashlytics.android.Crashlytics; import io.fabric.sdk.android.Fabric; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -17,19 +20,39 @@ import java.util.Map; /** FirebaseCrashlyticsPlugin */ -public class FirebaseCrashlyticsPlugin implements MethodCallHandler { - +public class FirebaseCrashlyticsPlugin implements FlutterPlugin, MethodCallHandler { public static final String TAG = "CrashlyticsPlugin"; + private MethodChannel channel; - /** Plugin registration. */ - public static void registerWith(Registrar registrar) { + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + BinaryMessenger binaryMessenger = binding.getFlutterEngine().getDartExecutor(); + channel = setup(binaryMessenger, binding.getApplicationContext()); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + if (channel != null) { + channel.setMethodCallHandler(null); + channel = null; + } + } + + private static MethodChannel setup(BinaryMessenger binaryMessenger, Context context) { final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_crashlytics"); + new MethodChannel(binaryMessenger, "plugins.flutter.io/firebase_crashlytics"); channel.setMethodCallHandler(new FirebaseCrashlyticsPlugin()); if (!Fabric.isInitialized()) { - Fabric.with(registrar.context(), new Crashlytics()); + Fabric.with(context, new Crashlytics()); } + + return channel; + } + + /** Plugin registration. */ + public static void registerWith(Registrar registrar) { + setup(registrar.messenger(), registrar.context()); } @Override diff --git a/packages/firebase_crashlytics/example/android/app/build.gradle b/packages/firebase_crashlytics/example/android/app/build.gradle index b8ded1003c8d..891334951d8d 100644 --- a/packages/firebase_crashlytics/example/android/app/build.gradle +++ b/packages/firebase_crashlytics/example/android/app/build.gradle @@ -38,7 +38,7 @@ android { targetSdkVersion 27 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -55,6 +55,13 @@ flutter { } dependencies { + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation "android.arch.lifecycle:runtime:1.1.1" + implementation "android.arch.lifecycle:common:1.1.1" + implementation "android.arch.lifecycle:common-java8:1.1.1" + implementation "android.arch.lifecycle:extensions:1.1.1" } apply plugin: 'io.fabric' diff --git a/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/EmbeddingV1ActivityTest.java b/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..486cb4978c1b --- /dev/null +++ b/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/EmbeddingV1ActivityTest.java @@ -0,0 +1,15 @@ + +package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample.EmbeddingV1Activity; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class EmbeddingV1ActivityTest { + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbeddingV1Activity.class); +} diff --git a/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/MainActivityTest.java b/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/MainActivityTest.java new file mode 100644 index 000000000000..99ef1d38b37d --- /dev/null +++ b/packages/firebase_crashlytics/example/android/app/src/androidTest/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/MainActivityTest.java @@ -0,0 +1,12 @@ +package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample.MainActivity; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class MainActivityTest { + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); +} diff --git a/packages/firebase_crashlytics/example/android/app/src/main/AndroidManifest.xml b/packages/firebase_crashlytics/example/android/app/src/main/AndroidManifest.xml index 0c7d86680639..2d8b4785bcd4 100644 --- a/packages/firebase_crashlytics/example/android/app/src/main/AndroidManifest.xml +++ b/packages/firebase_crashlytics/example/android/app/src/main/AndroidManifest.xml @@ -16,6 +16,13 @@ android:name="io.flutter.app.FlutterApplication" android:label="firebase_crashlytics_example" android:icon="@mipmap/ic_launcher"> + + - diff --git a/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/EmbeddingV1Activity.java b/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/EmbeddingV1Activity.java new file mode 100644 index 000000000000..76245da23ea0 --- /dev/null +++ b/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/EmbeddingV1Activity.java @@ -0,0 +1,14 @@ + +package io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample; + +import android.os.Bundle; +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class EmbeddingV1Activity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} diff --git a/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/MainActivity.java b/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/MainActivity.java index e70d93f30b57..fed26b325298 100644 --- a/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/MainActivity.java +++ b/packages/firebase_crashlytics/example/android/app/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlyticsexample/MainActivity.java @@ -1,13 +1,16 @@ package io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample; -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import dev.flutter.plugins.e2e.E2EPlugin; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.firebase.crashlytics.firebasecrashlytics.FirebaseCrashlyticsPlugin; public class MainActivity extends FlutterActivity { + // TODO(): Remove this once v2 of GeneratedPluginRegistrant + // rolls to stable. https://github.com/flutter/flutter/issues/42694 @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); + public void configureFlutterEngine(FlutterEngine flutterEngine) { + flutterEngine.getPlugins().add(new FirebaseCrashlyticsPlugin()); + flutterEngine.getPlugins().add(new E2EPlugin()); } } diff --git a/packages/firebase_crashlytics/example/android/gradle.properties b/packages/firebase_crashlytics/example/android/gradle.properties index 7be3d8b46841..38c8d4544ff1 100644 --- a/packages/firebase_crashlytics/example/android/gradle.properties +++ b/packages/firebase_crashlytics/example/android/gradle.properties @@ -1,2 +1,4 @@ org.gradle.jvmargs=-Xmx1536M android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/firebase_crashlytics/example/pubspec.yaml b/packages/firebase_crashlytics/example/pubspec.yaml index 8a12ba4d4bd6..7476c78fff85 100644 --- a/packages/firebase_crashlytics/example/pubspec.yaml +++ b/packages/firebase_crashlytics/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: path: ../ dev_dependencies: + e2e: ^0.2.1 flutter_test: sdk: flutter flutter_driver: diff --git a/packages/firebase_crashlytics/pubspec.yaml b/packages/firebase_crashlytics/pubspec.yaml index 826dcad698af..2e7f16e99651 100644 --- a/packages/firebase_crashlytics/pubspec.yaml +++ b/packages/firebase_crashlytics/pubspec.yaml @@ -2,13 +2,13 @@ name: firebase_crashlytics description: Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the Firebase console. -version: 0.1.1+2 +version: 0.1.2 author: Flutter Team homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_crashlytics environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" - flutter: ">=1.5.0" + sdk: ">=2.0.0-dev.28.0 <3.0.0" + flutter: ">=1.9.1+hotfix.5 <2.0.0" dependencies: flutter: @@ -16,6 +16,7 @@ dependencies: stack_trace: ^1.9.3 dev_dependencies: + e2e: ^0.2.1 flutter_test: sdk: flutter test: ^1.5.1 diff --git a/packages/firebase_crashlytics/test/firebase_crashlytics_e2e.dart b/packages/firebase_crashlytics/test/firebase_crashlytics_e2e.dart new file mode 100644 index 000000000000..59f11e023913 --- /dev/null +++ b/packages/firebase_crashlytics/test/firebase_crashlytics_e2e.dart @@ -0,0 +1,12 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:e2e/e2e.dart'; +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; + +void main() { + E2EWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('get version', (WidgetTester tester) async { + final String version = await Crashlytics.instance.getVersion(); + expect(version, isNotNull); + }); +}