Skip to content

Commit

Permalink
Upgrade crashlytics to v2 plugin API (flutter#1370)
Browse files Browse the repository at this point in the history
* Upgraded Crashlytics to v2 of Flutter Plugins.
  • Loading branch information
gaaclarke authored and kroikie committed Nov 16, 2019
1 parent ad592c6 commit 61bccb3
Show file tree
Hide file tree
Showing 13 changed files with 144 additions and 19 deletions.
4 changes: 4 additions & 0 deletions packages/firebase_crashlytics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
27 changes: 27 additions & 0 deletions packages/firebase_crashlytics/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,30 @@ dependencies {
}

apply from: file("./user-agent.gradle")

// TODO(<github-username>): 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"
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ android {
targetSdkVersion 27
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
Expand All @@ -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'
Expand Down
Original file line number Diff line number Diff line change
@@ -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<EmbeddingV1Activity> rule =
new ActivityTestRule<>(EmbeddingV1Activity.class);
}
Original file line number Diff line number Diff line change
@@ -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<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@
android:name="io.flutter.app.FlutterApplication"
android:label="firebase_crashlytics_example"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".EmbeddingV1Activity"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
</activity>
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
Expand All @@ -27,9 +34,6 @@
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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(<github-username>): 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());
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
1 change: 1 addition & 0 deletions packages/firebase_crashlytics/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ dependencies:
path: ../

dev_dependencies:
e2e: ^0.2.1
flutter_test:
sdk: flutter
flutter_driver:
Expand Down
7 changes: 4 additions & 3 deletions packages/firebase_crashlytics/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@ 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 <flutter-dev@google.com>
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:
sdk: flutter
stack_trace: ^1.9.3

dev_dependencies:
e2e: ^0.2.1
flutter_test:
sdk: flutter
test: ^1.5.1
Expand Down
12 changes: 12 additions & 0 deletions packages/firebase_crashlytics/test/firebase_crashlytics_e2e.dart
Original file line number Diff line number Diff line change
@@ -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);
});
}

0 comments on commit 61bccb3

Please sign in to comment.