diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md
index 52fcc92..24dc7a8 100644
--- a/packages/e2e/CHANGELOG.md
+++ b/packages/e2e/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.2
+
+* Adds support for Android E2E tests that utilize other @Rule's, like GrantPermissionRule.
+
 ## 0.4.1
 
 * Remove Android dependencies fallback.
diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
index f214cd7..78f0c3c 100644
--- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
+++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
@@ -4,23 +4,24 @@
 
 package dev.flutter.plugins.e2e;
 
-import android.app.Activity;
 import android.util.Log;
 import androidx.test.rule.ActivityTestRule;
 import java.lang.reflect.Field;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import org.junit.Rule;
+import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runner.Runner;
 import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunNotifier;
 
 public class FlutterTestRunner extends Runner {
+
   private static final String TAG = "FlutterTestRunner";
 
   final Class testClass;
-  ActivityTestRule<Activity> rule = null;
+  TestRule rule = null;
 
   public FlutterTestRunner(Class<?> testClass) {
     super();
@@ -32,7 +33,10 @@
       if (field.isAnnotationPresent(Rule.class)) {
         try {
           Object instance = testClass.newInstance();
-          rule = (ActivityTestRule<Activity>) field.get(instance);
+          if (field.get(instance) instanceof ActivityTestRule) {
+            rule = (TestRule) field.get(instance);
+            break;
+          }
         } catch (InstantiationException | IllegalAccessException e) {
           // This might occur if the developer did not make the rule public.
           // We could call field.setAccessible(true) but it seems better to throw.
@@ -53,7 +57,9 @@
       throw new RuntimeException("Unable to run tests due to missing activity rule");
     }
     try {
-      rule.launchActivity(null);
+      if (rule instanceof ActivityTestRule) {
+        ((ActivityTestRule) rule).launchActivity(null);
+      }
     } catch (RuntimeException e) {
       Log.v(TAG, "launchActivity failed, possibly because the activity was already running. " + e);
       Log.v(
diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java
new file mode 100644
index 0000000..90218e8
--- /dev/null
+++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java
@@ -0,0 +1,25 @@
+package com.example.e2e_example;
+
+import android.Manifest.permission;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.rule.GrantPermissionRule;
+import dev.flutter.plugins.e2e.FlutterTestRunner;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+
+/**
+ * Demonstrates how a E2E test on Android can be run with permissions already granted. This is
+ * helpful if developers want to test native App behavior that depends on certain system service
+ * results which are guarded with permissions.
+ */
+@RunWith(FlutterTestRunner.class)
+public class MainActivityWithPermissionTest {
+
+  @Rule
+  public GrantPermissionRule permissionRule =
+      GrantPermissionRule.grant(permission.ACCESS_COARSE_LOCATION);
+
+  @Rule
+  public ActivityTestRule<MainActivity> rule =
+      new ActivityTestRule<>(MainActivity.class, true, false);
+}
diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml
index 72a782e..1857e2d 100644
--- a/packages/e2e/pubspec.yaml
+++ b/packages/e2e/pubspec.yaml
@@ -1,6 +1,6 @@
 name: e2e
 description: Runs tests that use the flutter_test API as integration tests.
-version: 0.4.1
+version: 0.4.2
 homepage: https://github.com/flutter/plugins/tree/master/packages/e2e
 
 environment:
