diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSupportTest.java b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSupportTest.java
index 77e2e40..4a76dc8 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSupportTest.java
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSupportTest.java
@@ -64,6 +64,7 @@
         mReorderingAllowed = reorderingAllowed;
     }
 
+    @Ignore // b/326237469
     @Test
     public void preconditions() {
         final TransitionFragment fragment1 = TransitionFragment.newInstance(R.layout.scene2);
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
index 86bb5df..d5c1329 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
@@ -36,6 +36,7 @@
 import org.junit.After
 import org.junit.Assert.fail
 import org.junit.Before
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -76,6 +77,7 @@
         fragmentManager.removeOnBackStackChangedListener(onBackStackChangedListener)
     }
 
+    @Ignore // b/326237469
     // Test that normal view transitions (enter, exit, reenter, return) run with
     // a single fragment.
     @Test
@@ -120,6 +122,7 @@
         assertThat(onBackStackChangedTimes).isEqualTo(4)
     }
 
+    @Ignore // b/326237469
     // Test removing a Fragment with a Transition and adding it back before the Transition
     // finishes is handled correctly.
     @Test
@@ -155,6 +158,8 @@
         assertThat(fragment.requireView()).isEqualTo(view1)
         verifyNoOtherTransitions(fragment)
     }
+
+    @Ignore // b/326237469
     @Test
     fun testTimedPostponeImmediateStartNotCanceled() {
         val fm = activityRule.activity.supportFragmentManager
@@ -193,6 +198,7 @@
         assertThat(cancelCount).isEqualTo(0)
     }
 
+    @Ignore // b/326237469
     @Test
     fun ensureTransitionsFinishBeforeViewDestroyed() {
         // enter transition
@@ -229,6 +235,7 @@
         assertThat(fragment.transitionCountInOnDestroyView).isEqualTo(0)
     }
 
+    @Ignore // b/326237469
     // Test that shared elements transition from one fragment to the next
     // and back during pop.
     @Test
@@ -244,6 +251,7 @@
         verifyPopTransition(1, fragment2, fragment1)
     }
 
+    @Ignore // b/326237469
     @Test
     fun sharedElementNoOtherTransition() {
         val fragment1 = setupInitialFragment()
@@ -285,6 +293,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     @Test
     fun sharedElementAddNoOtherTransition() {
         val fragment1 = setupInitialFragment()
@@ -319,6 +328,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     // Test that shared elements transition from one fragment to the next
     // and back during pop.
     @Suppress("DEPRECATION")
@@ -336,6 +346,7 @@
         verifyPopTransition(1, fragment2, fragment1)
     }
 
+    @Ignore // b/326237469
     // Test that shared element transitions through multiple fragments work together
     @Test
     fun intermediateFragment() {
@@ -353,6 +364,7 @@
         verifyPopTransition(2, fragment3, fragment1, fragment2)
     }
 
+    @Ignore // b/326237469
     // Adding/removing the same fragment multiple times shouldn't mess anything up
     @Test
     fun removeAdded() {
@@ -406,6 +418,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     // Make sure that shared elements on two different fragment containers don't interact
     @Test
     fun crossContainer() {
@@ -445,6 +458,7 @@
         verifyCrossTransition(true, fragment1, fragment2)
     }
 
+    @Ignore // b/326237469
     // Make sure that onSharedElementStart and onSharedElementEnd are called
     @Suppress("UNCHECKED_CAST")
     @Test
@@ -505,6 +519,7 @@
         assertThat(snapshots.value).isNull()
     }
 
+    @Ignore // b/326237469
     // Make sure that onMapSharedElement works to change the shared element going out
     @Test
     fun onMapSharedElementOut() {
@@ -577,6 +592,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // Make sure that onMapSharedElement works to change the shared element target
     @Test
     fun onMapSharedElementIn() {
@@ -648,6 +664,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // Ensure that shared element transitions that have targets properly target the views
     @Test
     fun complexSharedElementTransition() {
@@ -710,6 +727,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // Ensure that after transitions have executed that they don't have any targets or other
     // unfortunate modifications.
     @Test
@@ -738,6 +756,7 @@
         assertThat(fragment2.reenterTransition.epicenterCallback).isNull()
     }
 
+    @Ignore // b/326237469
     // Ensure that transitions are done when a fragment is shown and hidden
     @Test
     fun showHideTransition() {
@@ -806,6 +825,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     // Test that setting allowEnterTransitionOverlap to false correctly delays
     // the enter transition until after the exit transition finishes
     @Test
@@ -857,6 +877,7 @@
             .isFalse()
     }
 
+    @Ignore // b/326237469
     // Ensure that transitions are done when a fragment is attached and detached
     @Test
     fun attachDetachTransition() {
@@ -906,6 +927,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     // Ensure that shared element without matching transition name doesn't error out
     @Test
     fun sharedElementMismatch() {
@@ -942,6 +964,7 @@
         verifyNoOtherTransitions(fragment2)
     }
 
+    @Ignore // b/326237469
     // Ensure that using the same source or target shared element results in an exception.
     @Test
     fun sharedDuplicateTargetNames() {
@@ -975,6 +998,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // Test that invisible fragment views don't participate in transitions
     @Test
     fun invisibleNoTransitions() {
@@ -1013,6 +1037,7 @@
         verifyNoOtherTransitions(fragment)
     }
 
+    @Ignore // b/326237469
     // No crash when transitioning a shared element and there is no shared element transition.
     @Test
     fun noSharedElementTransition() {
@@ -1095,6 +1120,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // No crash when there is no shared element transition and transitioning a shared element after
     // a pop
     @Test
@@ -1159,6 +1185,7 @@
         }
     }
 
+    @Ignore // b/326237469
     // When there is no matching shared element, the transition name should not be changed
     @Test
     fun noMatchingSharedElementRetainName() {
@@ -1206,6 +1233,7 @@
         assertThat(endGreen.transitionName).isEqualTo("greenSquare")
     }
 
+    @Ignore // b/326237469
     @Test
     fun ignoreWhenViewNotAttached() {
         with(ActivityScenario.launch(AddTransitionFragmentInActivity::class.java)) {
