[ci] Continue .cirrus.yml alignment with flutter/plugins (#2832)

* Enable more repo checks

* Remove Android from Pigeon iOS test app

* Add various mostly-no-op tasks

* Remove unused Java generation in ObjC test
diff --git a/.cirrus.yml b/.cirrus.yml
index 05cf7e9..8443fdb 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -107,6 +107,7 @@
           # has been fixed, this can be removed and there can just be a single
           # run with --require-excerpts and no exclusions.
           - ./script/tool_runner.sh readme-check --require-excerpts --exclude=script/configs/temp_exclude_excerpt.yaml
+        dependabot_script: $PLUGIN_TOOL_COMMAND dependabot-check
         version_script:
           # For pre-submit, pass the PR labels to the script to allow for
           # check overrides.
@@ -119,6 +120,14 @@
           -   ./script/tool_runner.sh version-check --check-for-missing-changes --pr-labels="$CIRRUS_PR_LABELS"
           - fi
         publishable_script: ./script/tool_runner.sh publish-check --allow-pre-release
+        federated_safety_script:
+          # This check is only meaningful for PRs, as it validates changes
+          # rather than state.
+          - if [[ $CIRRUS_PR == "" ]]; then
+          -   ./script/tool_runner.sh federation-safety-check
+          - else
+          -   echo "Only run in presubmit"
+          - fi
     - name: dart_unit_tests
       env:
         matrix:
@@ -220,6 +229,19 @@
           CHANNEL: "master"
           CHANNEL: "stable"
       << : *BUILD_ALL_PACKAGES_APP_TEMPLATE
+    - name: linux-platform_tests
+      # Don't run full platform tests on both channels in pre-submit.
+      skip: $CIRRUS_PR != '' && $CHANNEL == 'stable'
+      env:
+        matrix:
+          CHANNEL: "master"
+          CHANNEL: "stable"
+      build_script:
+        - ./script/tool_runner.sh build-examples --linux
+      native_test_script:
+        - xvfb-run ./script/tool_runner.sh native-test --linux --no-integration
+      drive_script:
+        - xvfb-run ./script/tool_runner.sh drive-examples --linux
 
 # Heavy-workload Linux tasks.
 # These use machines with more CPUs and memory, so will reduce parallelization
@@ -251,8 +273,16 @@
         # extension_google_sign_in_as_googleapis_auth is currently not building, see
         # https://github.com/flutter/flutter/issues/89301
         - ./script/tool_runner.sh build-examples --apk --exclude=extension_google_sign_in_as_googleapis_auth
+      lint_script:
+        - ./script/tool_runner.sh lint-android # must come after build-examples
       native_unit_test_scipt:
         - ./script/tool_runner.sh native-test --android --no-integration
+      # Upload the full lint results to Cirrus to display in the results UI.
+      always:
+        android-lint_artifacts:
+          path: "**/reports/lint-results-debug.xml"
+          type: text/xml
+          format: android-lint
     - name: android-build_all_packages
       env:
         BUILD_ALL_ARGS: "apk"
@@ -290,25 +320,13 @@
         - cd ../..
         - flutter packages get
         - dart testing/web_benchmarks_test.dart
-    ### Linux desktop tasks ###
-    - name: linux-platform_tests
-      # Don't run full platform tests on both channels in pre-submit.
-      skip: $CIRRUS_PR != '' && $CHANNEL == 'stable'
-      env:
-        matrix:
-          CHANNEL: "master"
-          CHANNEL: "stable"
-      build_script:
-        - ./script/tool_runner.sh build-examples --linux
-      native_test_script:
-        - ./script/tool_runner.sh native-test --linux --no-integration
 
+# ARM macOS tasks.
 task:
   << : *FLUTTER_UPGRADE_TEMPLATE
   << : *MACOS_ARM_TEMPLATE
   matrix:
     - name: macos-custom_package_tests
-      # Run on macOS x64 image with Java runtime installed.
       env:
         PATH: $PATH:/usr/local/bin
         matrix:
@@ -340,6 +358,16 @@
         - ./script/tool_runner.sh build-examples --ios
       native_test_script:
         - ./script/tool_runner.sh native-test --ios --ios-destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
+      drive_script:
+        # `drive-examples` contains integration tests, which changes the UI of the application.
+        # This UI change sometimes affects `xctest`.
+        # So we run `drive-examples` after `native-test`; changing the order will result ci failure.
+        - ./script/tool_runner.sh drive-examples --ios
+      xcode_analyze_script:
+        - ./script/tool_runner.sh xcode-analyze --ios
+      xcode_analyze_deprecation_script:
+        # Ensure we don't accidentally introduce deprecated code.
+        - ./script/tool_runner.sh xcode-analyze --ios --ios-min-version=13.0
     ### iOS tasks ###
     - name: ios-build_all_packages
       env:
@@ -359,8 +387,15 @@
         PATH: $PATH:/usr/local/bin
       build_script:
         - ./script/tool_runner.sh build-examples --macos
+      xcode_analyze_script:
+        - ./script/tool_runner.sh xcode-analyze --macos
+      xcode_analyze_deprecation_script:
+        # Ensure we don't accidentally introduce deprecated code.
+        - ./script/tool_runner.sh xcode-analyze --macos --macos-min-version=12.3
       native_test_script:
         - ./script/tool_runner.sh native-test --macos
+      drive_script:
+        - ./script/tool_runner.sh drive-examples --macos
 
 # Intel macOS tasks.
 task:
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 9576c20..9d38afb 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -22,3 +22,170 @@
     labels:
       - "team"
       - "team: infra"
+
+  - package-ecosystem: "gradle"
+    directory: "/packages/animations/example/android/app"
+    commit-message:
+      prefix: "[animations]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/dynamic_layouts/example/android/app"
+    commit-message:
+      prefix: "[dynamic_lyts]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/extension_google_sign_in_as_googleapis_auth/example/android/app"
+    commit-message:
+      prefix: "[ext_sign_in]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/flutter_adaptive_scaffold/example/android/app"
+    commit-message:
+      prefix: "[scaffold]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/flutter_markdown/example/android/app"
+    commit-message:
+      prefix: "[markdown]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/go_router/example/android/app"
+    commit-message:
+      prefix: "[go_router]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/imitation_game/imitation_tests/smiley/flutter/smiley/android/app"
+    commit-message:
+      prefix: "[imitation]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/palette_generator/example/android/app"
+    commit-message:
+      prefix: "[palette_gen]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/pigeon/platform_tests/test_plugin/android"
+    commit-message:
+      prefix: "[pigeon]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "com.android.tools.build:gradle"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "junit:junit"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "org.mockito:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "androidx.test:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "org.robolectric:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/pigeon/platform_tests/test_plugin/example/android/app"
+    commit-message:
+      prefix: "[pigeon]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/pigeon/platform_tests/alternate_language_test_plugin/android"
+    commit-message:
+      prefix: "[pigeon]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "com.android.tools.build:gradle"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "junit:junit"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "org.mockito:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "androidx.test:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+      - dependency-name: "org.robolectric:*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/app"
+    commit-message:
+      prefix: "[pigeon]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/rfw/example/hello/android/app"
+    commit-message:
+      prefix: "[rfw]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/rfw/example/local/android/app"
+    commit-message:
+      prefix: "[rfw]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+  - package-ecosystem: "gradle"
+    directory: "/packages/rfw/example/remote/android/app"
+    commit-message:
+      prefix: "[rfw]"
+    schedule:
+      interval: "weekly"
+    open-pull-requests-limit: 10
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-minor", "version-update:semver-patch"]
diff --git a/packages/pigeon/e2e_tests/test_objc/android/.project b/packages/pigeon/e2e_tests/test_objc/android/.project
deleted file mode 100644
index a4124be..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>android</name>
-	<comment>Project android created by Buildship.</comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
-	</natures>
-	<filteredResources>
-		<filter>
-			<id>1654625234632</id>
-			<name></name>
-			<type>30</type>
-			<matcher>
-				<id>org.eclipse.core.resources.regexFilterMatcher</id>
-				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
-			</matcher>
-		</filter>
-	</filteredResources>
-</projectDescription>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/.settings/org.eclipse.buildship.core.prefs b/packages/pigeon/e2e_tests/test_objc/android/.settings/org.eclipse.buildship.core.prefs
deleted file mode 100644
index 861b6d8..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/.settings/org.eclipse.buildship.core.prefs
+++ /dev/null
@@ -1,13 +0,0 @@
-arguments=
-auto.sync=false
-build.scans.enabled=false
-connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
-connection.project.dir=
-eclipse.preferences.version=1
-gradle.user.home=
-java.home=/Library/Java/JavaVirtualMachines/jdk-11.0.4.jdk/Contents/Home
-jvm.arguments=
-offline.mode=false
-override.workspace.settings=true
-show.console.view=true
-show.executions.view=true
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/.classpath b/packages/pigeon/e2e_tests/test_objc/android/app/.classpath
deleted file mode 100644
index 4a04201..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/"/>
-	<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
-	<classpathentry kind="output" path="bin/default"/>
-</classpath>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/.project b/packages/pigeon/e2e_tests/test_objc/android/app/.project
deleted file mode 100644
index 52248e4..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>app</name>
-	<comment>Project app created by Buildship.</comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
-	</natures>
-	<filteredResources>
-		<filter>
-			<id>1654625234643</id>
-			<name></name>
-			<type>30</type>
-			<matcher>
-				<id>org.eclipse.core.resources.regexFilterMatcher</id>
-				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
-			</matcher>
-		</filter>
-	</filteredResources>
-</projectDescription>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/.settings/org.eclipse.buildship.core.prefs b/packages/pigeon/e2e_tests/test_objc/android/app/.settings/org.eclipse.buildship.core.prefs
deleted file mode 100644
index b1886ad..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/.settings/org.eclipse.buildship.core.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-connection.project.dir=..
-eclipse.preferences.version=1
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/build.gradle b/packages/pigeon/e2e_tests/test_objc/android/app/build.gradle
deleted file mode 100644
index 3a0b81e..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/build.gradle
+++ /dev/null
@@ -1,67 +0,0 @@
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
-if (localPropertiesFile.exists()) {
-    localPropertiesFile.withReader('UTF-8') { reader ->
-        localProperties.load(reader)
-    }
-}
-
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-if (flutterRoot == null) {
-    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-}
-
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
-if (flutterVersionCode == null) {
-    flutterVersionCode = '1'
-}
-
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
-if (flutterVersionName == null) {
-    flutterVersionName = '1.0'
-}
-
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
-android {
-    compileSdkVersion 31
-
-    sourceSets {
-        main.java.srcDirs += 'src/main/kotlin'
-    }
-
-    lintOptions {
-        disable 'InvalidPackage'
-    }
-
-    defaultConfig {
-        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
-        applicationId "com.example.test_objc"
-        minSdkVersion 16
-        targetSdkVersion 28
-        versionCode flutterVersionCode.toInteger()
-        versionName flutterVersionName
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-    }
-
-    buildTypes {
-        release {
-            // TODO: Add your own signing config for the release build.
-            // Signing with the debug keys for now, so `flutter run --release` works.
-            signingConfig signingConfigs.debug
-        }
-    }
-}
-
-flutter {
-    source '../..'
-}
-
-dependencies {
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test:runner:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-}
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/debug/AndroidManifest.xml b/packages/pigeon/e2e_tests/test_objc/android/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index 8172dab..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.test_objc">
-    <!-- Flutter needs it to communicate with the running application
-         to allow setting breakpoints, to provide hot reload, etc.
-    -->
-    <uses-permission android:name="android.permission.INTERNET"/>
-</manifest>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/AndroidManifest.xml b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index e692be3..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.test_objc">
-    <application
-        android:name="${applicationName}"
-        android:label="test_objc"
-        android:icon="@mipmap/ic_launcher">
-        <activity
-            android:name=".MainActivity"
-            android:launchMode="singleTop"
-            android:theme="@style/LaunchTheme"
-            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
-            android:hardwareAccelerated="true"
-            android:windowSoftInputMode="adjustResize">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
-            </intent-filter>
-        </activity>
-        <!-- Don't delete the meta-data below.
-             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
-        <meta-data
-            android:name="flutterEmbedding"
-            android:value="2" />
-    </application>
-</manifest>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java
deleted file mode 100644
index bc7fe87..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java
+++ /dev/null
@@ -1,501 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Autogenerated from Pigeon (v4.0.2), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-
-package dev.flutter.aaclarke.pigeon;
-
-import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import io.flutter.plugin.common.BasicMessageChannel;
-import io.flutter.plugin.common.BinaryMessenger;
-import io.flutter.plugin.common.MessageCodec;
-import io.flutter.plugin.common.StandardMessageCodec;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-/** Generated class from Pigeon. */
-@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"})
-public class MessagePigeon {
-
-  public enum MessageRequestState {
-    PENDING(0),
-    SUCCESS(1),
-    FAILURE(2);
-
-    private int index;
-
-    private MessageRequestState(final int index) {
-      this.index = index;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class MessageSearchRequest {
-    private @Nullable String query;
-
-    public @Nullable String getQuery() {
-      return query;
-    }
-
-    public void setQuery(@Nullable String setterArg) {
-      this.query = setterArg;
-    }
-
-    private @Nullable Long anInt;
-
-    public @Nullable Long getAnInt() {
-      return anInt;
-    }
-
-    public void setAnInt(@Nullable Long setterArg) {
-      this.anInt = setterArg;
-    }
-
-    private @Nullable Boolean aBool;
-
-    public @Nullable Boolean getABool() {
-      return aBool;
-    }
-
-    public void setABool(@Nullable Boolean setterArg) {
-      this.aBool = setterArg;
-    }
-
-    public static final class Builder {
-      private @Nullable String query;
-
-      public @NonNull Builder setQuery(@Nullable String setterArg) {
-        this.query = setterArg;
-        return this;
-      }
-
-      private @Nullable Long anInt;
-
-      public @NonNull Builder setAnInt(@Nullable Long setterArg) {
-        this.anInt = setterArg;
-        return this;
-      }
-
-      private @Nullable Boolean aBool;
-
-      public @NonNull Builder setABool(@Nullable Boolean setterArg) {
-        this.aBool = setterArg;
-        return this;
-      }
-
-      public @NonNull MessageSearchRequest build() {
-        MessageSearchRequest pigeonReturn = new MessageSearchRequest();
-        pigeonReturn.setQuery(query);
-        pigeonReturn.setAnInt(anInt);
-        pigeonReturn.setABool(aBool);
-        return pigeonReturn;
-      }
-    }
-
-    @NonNull
-    Map<String, Object> toMap() {
-      Map<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("query", query);
-      toMapResult.put("anInt", anInt);
-      toMapResult.put("aBool", aBool);
-      return toMapResult;
-    }
-
-    static @NonNull MessageSearchRequest fromMap(@NonNull Map<String, Object> map) {
-      MessageSearchRequest pigeonResult = new MessageSearchRequest();
-      Object query = map.get("query");
-      pigeonResult.setQuery((String) query);
-      Object anInt = map.get("anInt");
-      pigeonResult.setAnInt(
-          (anInt == null) ? null : ((anInt instanceof Integer) ? (Integer) anInt : (Long) anInt));
-      Object aBool = map.get("aBool");
-      pigeonResult.setABool((Boolean) aBool);
-      return pigeonResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class MessageSearchReply {
-    private @Nullable String result;
-
-    public @Nullable String getResult() {
-      return result;
-    }
-
-    public void setResult(@Nullable String setterArg) {
-      this.result = setterArg;
-    }
-
-    private @Nullable String error;
-
-    public @Nullable String getError() {
-      return error;
-    }
-
-    public void setError(@Nullable String setterArg) {
-      this.error = setterArg;
-    }
-
-    private @Nullable MessageRequestState state;
-
-    public @Nullable MessageRequestState getState() {
-      return state;
-    }
-
-    public void setState(@Nullable MessageRequestState setterArg) {
-      this.state = setterArg;
-    }
-
-    public static final class Builder {
-      private @Nullable String result;
-
-      public @NonNull Builder setResult(@Nullable String setterArg) {
-        this.result = setterArg;
-        return this;
-      }
-
-      private @Nullable String error;
-
-      public @NonNull Builder setError(@Nullable String setterArg) {
-        this.error = setterArg;
-        return this;
-      }
-
-      private @Nullable MessageRequestState state;
-
-      public @NonNull Builder setState(@Nullable MessageRequestState setterArg) {
-        this.state = setterArg;
-        return this;
-      }
-
-      public @NonNull MessageSearchReply build() {
-        MessageSearchReply pigeonReturn = new MessageSearchReply();
-        pigeonReturn.setResult(result);
-        pigeonReturn.setError(error);
-        pigeonReturn.setState(state);
-        return pigeonReturn;
-      }
-    }
-
-    @NonNull
-    Map<String, Object> toMap() {
-      Map<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("result", result);
-      toMapResult.put("error", error);
-      toMapResult.put("state", state == null ? null : state.index);
-      return toMapResult;
-    }
-
-    static @NonNull MessageSearchReply fromMap(@NonNull Map<String, Object> map) {
-      MessageSearchReply pigeonResult = new MessageSearchReply();
-      Object result = map.get("result");
-      pigeonResult.setResult((String) result);
-      Object error = map.get("error");
-      pigeonResult.setError((String) error);
-      Object state = map.get("state");
-      pigeonResult.setState(state == null ? null : MessageRequestState.values()[(int) state]);
-      return pigeonResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class MessageNested {
-    private @Nullable MessageSearchRequest request;
-
-    public @Nullable MessageSearchRequest getRequest() {
-      return request;
-    }
-
-    public void setRequest(@Nullable MessageSearchRequest setterArg) {
-      this.request = setterArg;
-    }
-
-    public static final class Builder {
-      private @Nullable MessageSearchRequest request;
-
-      public @NonNull Builder setRequest(@Nullable MessageSearchRequest setterArg) {
-        this.request = setterArg;
-        return this;
-      }
-
-      public @NonNull MessageNested build() {
-        MessageNested pigeonReturn = new MessageNested();
-        pigeonReturn.setRequest(request);
-        return pigeonReturn;
-      }
-    }
-
-    @NonNull
-    Map<String, Object> toMap() {
-      Map<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("request", (request == null) ? null : request.toMap());
-      return toMapResult;
-    }
-
-    static @NonNull MessageNested fromMap(@NonNull Map<String, Object> map) {
-      MessageNested pigeonResult = new MessageNested();
-      Object request = map.get("request");
-      pigeonResult.setRequest(
-          (request == null) ? null : MessageSearchRequest.fromMap((Map) request));
-      return pigeonResult;
-    }
-  }
-
-  private static class MessageApiCodec extends StandardMessageCodec {
-    public static final MessageApiCodec INSTANCE = new MessageApiCodec();
-
-    private MessageApiCodec() {}
-
-    @Override
-    protected Object readValueOfType(byte type, ByteBuffer buffer) {
-      switch (type) {
-        case (byte) 128:
-          return MessageSearchReply.fromMap((Map<String, Object>) readValue(buffer));
-
-        case (byte) 129:
-          return MessageSearchRequest.fromMap((Map<String, Object>) readValue(buffer));
-
-        default:
-          return super.readValueOfType(type, buffer);
-      }
-    }
-
-    @Override
-    protected void writeValue(ByteArrayOutputStream stream, Object value) {
-      if (value instanceof MessageSearchReply) {
-        stream.write(128);
-        writeValue(stream, ((MessageSearchReply) value).toMap());
-      } else if (value instanceof MessageSearchRequest) {
-        stream.write(129);
-        writeValue(stream, ((MessageSearchRequest) value).toMap());
-      } else {
-        super.writeValue(stream, value);
-      }
-    }
-  }
-
-  /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
-  public interface MessageApi {
-    void initialize();
-
-    @NonNull
-    MessageSearchReply search(@NonNull MessageSearchRequest request);
-
-    /** The codec used by MessageApi. */
-    static MessageCodec<Object> getCodec() {
-      return MessageApiCodec.INSTANCE;
-    }
-
-    /** Sets up an instance of `MessageApi` to handle messages through the `binaryMessenger`. */
-    static void setup(BinaryMessenger binaryMessenger, MessageApi api) {
-      {
-        BasicMessageChannel<Object> channel =
-            new BasicMessageChannel<>(
-                binaryMessenger, "dev.flutter.pigeon.MessageApi.initialize", getCodec());
-        if (api != null) {
-          channel.setMessageHandler(
-              (message, reply) -> {
-                Map<String, Object> wrapped = new HashMap<>();
-                try {
-                  api.initialize();
-                  wrapped.put("result", null);
-                } catch (Error | RuntimeException exception) {
-                  wrapped.put("error", wrapError(exception));
-                }
-                reply.reply(wrapped);
-              });
-        } else {
-          channel.setMessageHandler(null);
-        }
-      }
-      {
-        BasicMessageChannel<Object> channel =
-            new BasicMessageChannel<>(
-                binaryMessenger, "dev.flutter.pigeon.MessageApi.search", getCodec());
-        if (api != null) {
-          channel.setMessageHandler(
-              (message, reply) -> {
-                Map<String, Object> wrapped = new HashMap<>();
-                try {
-                  ArrayList<Object> args = (ArrayList<Object>) message;
-                  MessageSearchRequest requestArg = (MessageSearchRequest) args.get(0);
-                  if (requestArg == null) {
-                    throw new NullPointerException("requestArg unexpectedly null.");
-                  }
-                  MessageSearchReply output = api.search(requestArg);
-                  wrapped.put("result", output);
-                } catch (Error | RuntimeException exception) {
-                  wrapped.put("error", wrapError(exception));
-                }
-                reply.reply(wrapped);
-              });
-        } else {
-          channel.setMessageHandler(null);
-        }
-      }
-    }
-  }
-
-  private static class MessageNestedApiCodec extends StandardMessageCodec {
-    public static final MessageNestedApiCodec INSTANCE = new MessageNestedApiCodec();
-
-    private MessageNestedApiCodec() {}
-
-    @Override
-    protected Object readValueOfType(byte type, ByteBuffer buffer) {
-      switch (type) {
-        case (byte) 128:
-          return MessageNested.fromMap((Map<String, Object>) readValue(buffer));
-
-        case (byte) 129:
-          return MessageSearchReply.fromMap((Map<String, Object>) readValue(buffer));
-
-        case (byte) 130:
-          return MessageSearchRequest.fromMap((Map<String, Object>) readValue(buffer));
-
-        default:
-          return super.readValueOfType(type, buffer);
-      }
-    }
-
-    @Override
-    protected void writeValue(ByteArrayOutputStream stream, Object value) {
-      if (value instanceof MessageNested) {
-        stream.write(128);
-        writeValue(stream, ((MessageNested) value).toMap());
-      } else if (value instanceof MessageSearchReply) {
-        stream.write(129);
-        writeValue(stream, ((MessageSearchReply) value).toMap());
-      } else if (value instanceof MessageSearchRequest) {
-        stream.write(130);
-        writeValue(stream, ((MessageSearchRequest) value).toMap());
-      } else {
-        super.writeValue(stream, value);
-      }
-    }
-  }
-
-  /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
-  public interface MessageNestedApi {
-    @NonNull
-    MessageSearchReply search(@NonNull MessageNested nested);
-
-    /** The codec used by MessageNestedApi. */
-    static MessageCodec<Object> getCodec() {
-      return MessageNestedApiCodec.INSTANCE;
-    }
-
-    /**
-     * Sets up an instance of `MessageNestedApi` to handle messages through the `binaryMessenger`.
-     */
-    static void setup(BinaryMessenger binaryMessenger, MessageNestedApi api) {
-      {
-        BasicMessageChannel<Object> channel =
-            new BasicMessageChannel<>(
-                binaryMessenger, "dev.flutter.pigeon.MessageNestedApi.search", getCodec());
-        if (api != null) {
-          channel.setMessageHandler(
-              (message, reply) -> {
-                Map<String, Object> wrapped = new HashMap<>();
-                try {
-                  ArrayList<Object> args = (ArrayList<Object>) message;
-                  MessageNested nestedArg = (MessageNested) args.get(0);
-                  if (nestedArg == null) {
-                    throw new NullPointerException("nestedArg unexpectedly null.");
-                  }
-                  MessageSearchReply output = api.search(nestedArg);
-                  wrapped.put("result", output);
-                } catch (Error | RuntimeException exception) {
-                  wrapped.put("error", wrapError(exception));
-                }
-                reply.reply(wrapped);
-              });
-        } else {
-          channel.setMessageHandler(null);
-        }
-      }
-    }
-  }
-
-  private static class MessageFlutterSearchApiCodec extends StandardMessageCodec {
-    public static final MessageFlutterSearchApiCodec INSTANCE = new MessageFlutterSearchApiCodec();
-
-    private MessageFlutterSearchApiCodec() {}
-
-    @Override
-    protected Object readValueOfType(byte type, ByteBuffer buffer) {
-      switch (type) {
-        case (byte) 128:
-          return MessageSearchReply.fromMap((Map<String, Object>) readValue(buffer));
-
-        case (byte) 129:
-          return MessageSearchRequest.fromMap((Map<String, Object>) readValue(buffer));
-
-        default:
-          return super.readValueOfType(type, buffer);
-      }
-    }
-
-    @Override
-    protected void writeValue(ByteArrayOutputStream stream, Object value) {
-      if (value instanceof MessageSearchReply) {
-        stream.write(128);
-        writeValue(stream, ((MessageSearchReply) value).toMap());
-      } else if (value instanceof MessageSearchRequest) {
-        stream.write(129);
-        writeValue(stream, ((MessageSearchRequest) value).toMap());
-      } else {
-        super.writeValue(stream, value);
-      }
-    }
-  }
-
-  /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */
-  public static class MessageFlutterSearchApi {
-    private final BinaryMessenger binaryMessenger;
-
-    public MessageFlutterSearchApi(BinaryMessenger argBinaryMessenger) {
-      this.binaryMessenger = argBinaryMessenger;
-    }
-
-    public interface Reply<T> {
-      void reply(T reply);
-    }
-
-    static MessageCodec<Object> getCodec() {
-      return MessageFlutterSearchApiCodec.INSTANCE;
-    }
-
-    public void search(
-        @NonNull MessageSearchRequest requestArg, Reply<MessageSearchReply> callback) {
-      BasicMessageChannel<Object> channel =
-          new BasicMessageChannel<>(
-              binaryMessenger, "dev.flutter.pigeon.MessageFlutterSearchApi.search", getCodec());
-      channel.send(
-          new ArrayList<Object>(Arrays.asList(requestArg)),
-          channelReply -> {
-            @SuppressWarnings("ConstantConditions")
-            MessageSearchReply output = (MessageSearchReply) channelReply;
-            callback.reply(output);
-          });
-    }
-  }
-
-  private static Map<String, Object> wrapError(Throwable exception) {
-    Map<String, Object> errorMap = new HashMap<>();
-    errorMap.put("message", exception.toString());
-    errorMap.put("code", exception.getClass().getSimpleName());
-    errorMap.put(
-        "details",
-        "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
-    return errorMap;
-  }
-}
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/kotlin/com/example/test_objc/MainActivity.kt b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/kotlin/com/example/test_objc/MainActivity.kt
deleted file mode 100644
index c860c3d..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/kotlin/com/example/test_objc/MainActivity.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-package com.example.test_objc
-
-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);
-    }
-}
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/drawable/launch_background.xml b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/drawable/launch_background.xml
deleted file mode 100644
index 304732f..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/drawable/launch_background.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Modify this file to customize your launch splash screen -->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:drawable="@android:color/white" />
-
-    <!-- You can insert your own image assets here -->
-    <!-- <item>
-        <bitmap
-            android:gravity="center"
-            android:src="@mipmap/launch_image" />
-    </item> -->
-</layer-list>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index db77bb4..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 17987b7..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 09d4391..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index d5f1c8d..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 4d6372e..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/values/styles.xml b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index 00fa441..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
-        <!-- Show a splash screen on the activity. Automatically removed when
-             Flutter draws its first frame -->
-        <item name="android:windowBackground">@drawable/launch_background</item>
-    </style>
-</resources>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/profile/AndroidManifest.xml b/packages/pigeon/e2e_tests/test_objc/android/app/src/profile/AndroidManifest.xml
deleted file mode 100644
index 8172dab..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/app/src/profile/AndroidManifest.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.test_objc">
-    <!-- Flutter needs it to communicate with the running application
-         to allow setting breakpoints, to provide hot reload, etc.
-    -->
-    <uses-permission android:name="android.permission.INTERNET"/>
-</manifest>
diff --git a/packages/pigeon/e2e_tests/test_objc/android/build.gradle b/packages/pigeon/e2e_tests/test_objc/android/build.gradle
deleted file mode 100644
index 2092f9d..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/build.gradle
+++ /dev/null
@@ -1,31 +0,0 @@
-buildscript {
-    ext.kotlin_version = '1.6.0'
-    repositories {
-        google()
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.0'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-    }
-}
-
-allprojects {
-    repositories {
-        google()
-        mavenCentral()
-    }
-}
-
-rootProject.buildDir = '../build'
-subprojects {
-    project.buildDir = "${rootProject.buildDir}/${project.name}"
-}
-subprojects {
-    project.evaluationDependsOn(':app')
-}
-
-task clean(type: Delete) {
-    delete rootProject.buildDir
-}
diff --git a/packages/pigeon/e2e_tests/test_objc/android/gradle.properties b/packages/pigeon/e2e_tests/test_objc/android/gradle.properties
deleted file mode 100644
index 38c8d45..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/gradle.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-org.gradle.jvmargs=-Xmx1536M
-android.enableR8=true
-android.useAndroidX=true
-android.enableJetifier=true
diff --git a/packages/pigeon/e2e_tests/test_objc/android/gradle/wrapper/gradle-wrapper.properties b/packages/pigeon/e2e_tests/test_objc/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 296b146..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Fri Jun 23 08:50:38 CEST 2017
-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
diff --git a/packages/pigeon/e2e_tests/test_objc/android/settings.gradle b/packages/pigeon/e2e_tests/test_objc/android/settings.gradle
deleted file mode 100644
index 5a2f14f..0000000
--- a/packages/pigeon/e2e_tests/test_objc/android/settings.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-include ':app'
-
-def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
-
-def plugins = new Properties()
-def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
-if (pluginsFile.exists()) {
-    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
-}
-
-plugins.each { name, path ->
-    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
-    include ":$name"
-    project(":$name").projectDir = pluginDirectory
-}
diff --git a/packages/pigeon/run_tests.sh b/packages/pigeon/run_tests.sh
index 9bfc9ab..02e82c4 100755
--- a/packages/pigeon/run_tests.sh
+++ b/packages/pigeon/run_tests.sh
@@ -252,13 +252,11 @@
   DARTLE_H="e2e_tests/test_objc/ios/Runner/dartle.h"
   DARTLE_M="e2e_tests/test_objc/ios/Runner/dartle.m"
   DARTLE_DART="e2e_tests/test_objc/lib/dartle.dart"
-  PIGEON_JAVA="e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java"
   $run_pigeon \
     --input pigeons/message.dart \
     --dart_out $DARTLE_DART \
     --objc_header_out $DARTLE_H \
     --objc_source_out $DARTLE_M \
-    --java_out $PIGEON_JAVA
   dart format $DARTLE_DART
 
   pushd $PWD