Skip to content

Commit 61bccb3

Browse files
gaaclarkekroikie
authored andcommitted
Upgrade crashlytics to v2 plugin API (#1370)
* Upgraded Crashlytics to v2 of Flutter Plugins.
1 parent ad592c6 commit 61bccb3

File tree

13 files changed

+144
-19
lines changed

13 files changed

+144
-19
lines changed

packages/firebase_crashlytics/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.2
2+
3+
* Updated to use the v2 plugin API.
4+
15
## 0.1.1+2
26

37
* When reporting to Crashlytics on iOS, and printing supplied logs, do not

packages/firebase_crashlytics/android/build.gradle

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,30 @@ dependencies {
4242
}
4343

4444
apply from: file("./user-agent.gradle")
45+
46+
// TODO(<github-username>): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348
47+
afterEvaluate {
48+
def containsEmbeddingDependencies = false
49+
for (def configuration : configurations.all) {
50+
for (def dependency : configuration.dependencies) {
51+
if (dependency.group == 'io.flutter' &&
52+
dependency.name.startsWith('flutter_embedding') &&
53+
dependency.isTransitive())
54+
{
55+
containsEmbeddingDependencies = true
56+
break
57+
}
58+
}
59+
}
60+
if (!containsEmbeddingDependencies) {
61+
android {
62+
dependencies {
63+
def lifecycle_version = "1.1.1"
64+
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
65+
implementation "android.arch.lifecycle:common:$lifecycle_version"
66+
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
67+
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
68+
}
69+
}
70+
}
71+
}

packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44

55
package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics;
66

7+
import android.content.Context;
78
import android.util.Log;
89
import com.crashlytics.android.Crashlytics;
910
import io.fabric.sdk.android.Fabric;
11+
import io.flutter.embedding.engine.plugins.FlutterPlugin;
12+
import io.flutter.plugin.common.BinaryMessenger;
1013
import io.flutter.plugin.common.MethodCall;
1114
import io.flutter.plugin.common.MethodChannel;
1215
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
@@ -17,19 +20,39 @@
1720
import java.util.Map;
1821

1922
/** FirebaseCrashlyticsPlugin */
20-
public class FirebaseCrashlyticsPlugin implements MethodCallHandler {
21-
23+
public class FirebaseCrashlyticsPlugin implements FlutterPlugin, MethodCallHandler {
2224
public static final String TAG = "CrashlyticsPlugin";
25+
private MethodChannel channel;
2326

24-
/** Plugin registration. */
25-
public static void registerWith(Registrar registrar) {
27+
@Override
28+
public void onAttachedToEngine(FlutterPluginBinding binding) {
29+
BinaryMessenger binaryMessenger = binding.getFlutterEngine().getDartExecutor();
30+
channel = setup(binaryMessenger, binding.getApplicationContext());
31+
}
32+
33+
@Override
34+
public void onDetachedFromEngine(FlutterPluginBinding binding) {
35+
if (channel != null) {
36+
channel.setMethodCallHandler(null);
37+
channel = null;
38+
}
39+
}
40+
41+
private static MethodChannel setup(BinaryMessenger binaryMessenger, Context context) {
2642
final MethodChannel channel =
27-
new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_crashlytics");
43+
new MethodChannel(binaryMessenger, "plugins.flutter.io/firebase_crashlytics");
2844
channel.setMethodCallHandler(new FirebaseCrashlyticsPlugin());
2945

3046
if (!Fabric.isInitialized()) {
31-
Fabric.with(registrar.context(), new Crashlytics());
47+
Fabric.with(context, new Crashlytics());
3248
}
49+
50+
return channel;
51+
}
52+
53+
/** Plugin registration. */
54+
public static void registerWith(Registrar registrar) {
55+
setup(registrar.messenger(), registrar.context());
3356
}
3457

3558
@Override

packages/firebase_crashlytics/example/android/app/build.gradle

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ android {
3838
targetSdkVersion 27
3939
versionCode flutterVersionCode.toInteger()
4040
versionName flutterVersionName
41-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
41+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4242
}
4343

4444
buildTypes {
@@ -55,6 +55,13 @@ flutter {
5555
}
5656

5757
dependencies {
58+
androidTestImplementation 'androidx.test:runner:1.2.0'
59+
androidTestImplementation 'androidx.test:rules:1.2.0'
60+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
61+
implementation "android.arch.lifecycle:runtime:1.1.1"
62+
implementation "android.arch.lifecycle:common:1.1.1"
63+
implementation "android.arch.lifecycle:common-java8:1.1.1"
64+
implementation "android.arch.lifecycle:extensions:1.1.1"
5865
}
5966

6067
apply plugin: 'io.fabric'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics;
3+
4+
import androidx.test.rule.ActivityTestRule;
5+
import dev.flutter.plugins.e2e.FlutterRunner;
6+
import io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample.EmbeddingV1Activity;
7+
import org.junit.Rule;
8+
import org.junit.runner.RunWith;
9+
10+
@RunWith(FlutterRunner.class)
11+
public class EmbeddingV1ActivityTest {
12+
@Rule
13+
public ActivityTestRule<EmbeddingV1Activity> rule =
14+
new ActivityTestRule<>(EmbeddingV1Activity.class);
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.flutter.plugins.firebase.crashlytics.firebasecrashlytics;
2+
3+
import androidx.test.rule.ActivityTestRule;
4+
import dev.flutter.plugins.e2e.FlutterRunner;
5+
import io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample.MainActivity;
6+
import org.junit.Rule;
7+
import org.junit.runner.RunWith;
8+
9+
@RunWith(FlutterRunner.class)
10+
public class MainActivityTest {
11+
@Rule public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
12+
}

packages/firebase_crashlytics/example/android/app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@
1616
android:name="io.flutter.app.FlutterApplication"
1717
android:label="firebase_crashlytics_example"
1818
android:icon="@mipmap/ic_launcher">
19+
<activity
20+
android:name=".EmbeddingV1Activity"
21+
android:theme="@style/LaunchTheme"
22+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
23+
android:hardwareAccelerated="true"
24+
android:windowSoftInputMode="adjustResize">
25+
</activity>
1926
<activity
2027
android:name=".MainActivity"
2128
android:launchMode="singleTop"
@@ -27,9 +34,6 @@
2734
until Flutter renders its first frame. It can be removed if
2835
there is no splash screen (such as the default splash screen
2936
defined in @style/LaunchTheme). -->
30-
<meta-data
31-
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
32-
android:value="true" />
3337
<intent-filter>
3438
<action android:name="android.intent.action.MAIN"/>
3539
<category android:name="android.intent.category.LAUNCHER"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
package io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample;
3+
4+
import android.os.Bundle;
5+
import io.flutter.app.FlutterActivity;
6+
import io.flutter.plugins.GeneratedPluginRegistrant;
7+
8+
public class EmbeddingV1Activity extends FlutterActivity {
9+
@Override
10+
protected void onCreate(Bundle savedInstanceState) {
11+
super.onCreate(savedInstanceState);
12+
GeneratedPluginRegistrant.registerWith(this);
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package io.flutter.plugins.firebase.crashlytics.firebasecrashlyticsexample;
22

3-
import android.os.Bundle;
4-
import io.flutter.app.FlutterActivity;
5-
import io.flutter.plugins.GeneratedPluginRegistrant;
3+
import dev.flutter.plugins.e2e.E2EPlugin;
4+
import io.flutter.embedding.android.FlutterActivity;
5+
import io.flutter.embedding.engine.FlutterEngine;
6+
import io.flutter.plugins.firebase.crashlytics.firebasecrashlytics.FirebaseCrashlyticsPlugin;
67

78
public class MainActivity extends FlutterActivity {
9+
// TODO(<github-username>): Remove this once v2 of GeneratedPluginRegistrant
10+
// rolls to stable. https://github.com/flutter/flutter/issues/42694
811
@Override
9-
protected void onCreate(Bundle savedInstanceState) {
10-
super.onCreate(savedInstanceState);
11-
GeneratedPluginRegistrant.registerWith(this);
12+
public void configureFlutterEngine(FlutterEngine flutterEngine) {
13+
flutterEngine.getPlugins().add(new FirebaseCrashlyticsPlugin());
14+
flutterEngine.getPlugins().add(new E2EPlugin());
1215
}
1316
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.enableR8=true
3+
android.useAndroidX=true
4+
android.enableJetifier=true

packages/firebase_crashlytics/example/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ dependencies:
1414
path: ../
1515

1616
dev_dependencies:
17+
e2e: ^0.2.1
1718
flutter_test:
1819
sdk: flutter
1920
flutter_driver:

packages/firebase_crashlytics/pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ name: firebase_crashlytics
22
description:
33
Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the
44
Firebase console.
5-
version: 0.1.1+2
5+
version: 0.1.2
66
author: Flutter Team <[email protected]>
77
homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_crashlytics
88

99
environment:
10-
sdk: ">=2.0.0-dev.68.0 <3.0.0"
11-
flutter: ">=1.5.0"
10+
sdk: ">=2.0.0-dev.28.0 <3.0.0"
11+
flutter: ">=1.9.1+hotfix.5 <2.0.0"
1212

1313
dependencies:
1414
flutter:
1515
sdk: flutter
1616
stack_trace: ^1.9.3
1717

1818
dev_dependencies:
19+
e2e: ^0.2.1
1920
flutter_test:
2021
sdk: flutter
2122
test: ^1.5.1
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:e2e/e2e.dart';
3+
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
4+
5+
void main() {
6+
E2EWidgetsFlutterBinding.ensureInitialized();
7+
8+
testWidgets('get version', (WidgetTester tester) async {
9+
final String version = await Crashlytics.instance.getVersion();
10+
expect(version, isNotNull);
11+
});
12+
}

0 commit comments

Comments
 (0)