diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
index 6a27796..f56bd5c 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
@@ -5,11 +5,14 @@
 package com.android.tools.r8.optimize.accessmodification;
 
 import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.SystemPropertyUtils;
 
 public class AccessModifierOptions {
 
   // TODO(b/131130038): Do not allow accessmodification when kept.
-  private boolean forceModifyPackagePrivateAndProtectedMethods = true;
+  private boolean forceModifyPackagePrivateAndProtectedMethods =
+      SystemPropertyUtils.parseSystemPropertyOrDefault(
+          "com.android.tools.r8.accessmodification.forcePackagePrivateAndProtected", true);
 
   private final InternalOptions options;
 
@@ -25,10 +28,7 @@
     if (isAccessModificationRulePresent()) {
       return true;
     }
-    // TODO(b/288062771): Enable access modification by default for L8.
-    return !options.getLibraryDesugaringOptions().isL8()
-        && !options.forceProguardCompatibility
-        && options.isOptimizing();
+    return !options.forceProguardCompatibility && options.isOptimizing();
   }
 
   private boolean isAccessModificationRulePresent() {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
index 290a3c5..ef02ac6 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
@@ -18,6 +18,7 @@
 import static com.android.tools.r8.utils.FileUtils.JAVA_EXTENSION;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.TestParameters;
@@ -275,7 +276,7 @@
     Assume.assumeFalse(
         "getAllFilesWithSuffixInDirectory() seems to find different files on Windows",
         ToolHelper.isWindows());
-    Assume.assumeTrue(
+    assumeTrue(
         "Requires Java base extensions, should add it when not desugaring",
         parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel());
 
@@ -289,19 +290,34 @@
         Arrays.stream(JDK_11_STREAM_TEST_COMPILED_FILES)
             .filter(file -> !file.toString().contains("lang/invoke"))
             .collect(Collectors.toList());
-    return testForDesugaredLibrary(
-            parameters, libraryDesugaringSpecification, compilationSpecification)
-        .addProgramFiles(filesToCompile)
-        .applyIf(
-            !libraryDesugaringSpecification.hasNioFileDesugaring(parameters),
-            b -> b.addProgramFiles(getPathsFiles()))
-        .addProgramFiles(getSafeVarArgsFile())
-        .addProgramFiles(testNGSupportProgramFiles())
-        .addProgramClassFileData(getTestNGMainRunner())
-        .addOptionsModification(opt -> opt.testing.trackDesugaredAPIConversions = true)
-        .disableL8AnnotationRemoval()
-        .compile()
-        .withArt6Plus64BitsLib();
+    // Prohibit publicizing LoggingTestCase#setContext. Currently L8 does not support modifying the
+    // InternalOptions for the R8 compilation inside L8, so we use a system property.
+    System.setProperty(
+        "com.android.tools.r8.accessmodification.forcePackagePrivateAndProtected", "0");
+    try {
+      return testForDesugaredLibrary(
+              parameters, libraryDesugaringSpecification, compilationSpecification)
+          .addProgramFiles(filesToCompile)
+          .applyIf(
+              !libraryDesugaringSpecification.hasNioFileDesugaring(parameters),
+              b -> b.addProgramFiles(getPathsFiles()))
+          .addProgramFiles(getSafeVarArgsFile())
+          .addProgramFiles(testNGSupportProgramFiles())
+          .addProgramClassFileData(getTestNGMainRunner())
+          .addL8KeepRules(
+              // Keep LoggingTestCase#setContext so that it is not publicized.
+              // Otherwise, the test runner incorrectly tries to run it as a @Test.
+              "-keepclassmembers class j$.util.stream.LoggingTestCase {",
+              "  protected void setContext(java.lang.String, java.lang.Object);",
+              "}")
+          .addOptionsModification(opt -> opt.testing.trackDesugaredAPIConversions = true)
+          .disableL8AnnotationRemoval()
+          .compile()
+          .withArt6Plus64BitsLib();
+    } finally {
+      System.clearProperty(
+          "com.android.tools.r8.accessmodification.forcePackagePrivateAndProtected");
+    }
   }
 
   private void runSuccessfulTests(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
index fe478900..dc0a0ce 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
@@ -37,6 +37,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
@@ -266,6 +267,17 @@
             .applyIf(
                 !libraryDesugaringSpecification.hasNioFileDesugaring(parameters),
                 b -> b.addProgramFiles(getPathsFiles()))
+            .apply(
+                b ->
+                    // JDK 11 time tests inspect the visibility of private fields and constructors
+                    // using reflection.
+                    forEachImmutableClass(
+                        className ->
+                            b.addL8KeepRules(
+                                "-keepclassmembers class " + className + " {",
+                                "  private final <fields>;",
+                                "  private <init>(...);",
+                                "}")))
             .compile()
             .withArt6Plus64BitsLib();
     for (String success : toRun) {
@@ -282,4 +294,21 @@
       }
     }
   }
+
+  private static void forEachImmutableClass(Consumer<String> consumer) {
+    consumer.accept("j$.time.Duration");
+    consumer.accept("j$.time.Instant");
+    consumer.accept("j$.time.LocalDate");
+    consumer.accept("j$.time.LocalDateTime");
+    consumer.accept("j$.time.LocalTime");
+    consumer.accept("j$.time.MonthDay");
+    consumer.accept("j$.time.OffsetDateTime");
+    consumer.accept("j$.time.OffsetTime");
+    consumer.accept("j$.time.Period");
+    consumer.accept("j$.time.Year");
+    consumer.accept("j$.time.YearMonth");
+    consumer.accept("j$.time.ZonedDateTime");
+    consumer.accept("j$.time.ZoneOffset");
+    consumer.accept("j$.time.temporal.ValueRange");
+  }
 }
diff --git a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 1c2b231..2128db5 100644
--- a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -33,6 +33,7 @@
 import com.android.tools.r8.utils.ConsumerUtils;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ThrowingConsumer;
 import com.android.tools.r8.utils.codeinspector.VerticallyMergedClassesInspector;
 import com.google.common.base.Charsets;
@@ -55,7 +56,7 @@
   private final CompilationSpecification compilationSpecification;
   private final TestCompilerBuilder<?, ?, ?, ? extends SingleTestRunResult<?>, ?> builder;
   private List<ArtProfileForRewriting> l8ArtProfilesForRewriting = new ArrayList<>();
-  private String l8ExtraKeepRules = "";
+  private List<String> l8ExtraKeepRules = new ArrayList<>();
   private Consumer<InternalOptions> l8OptionModifier = ConsumerUtils.emptyConsumer();
   private boolean l8FinalPrefixVerification = true;
   private boolean overrideDefaultLibrary = false;
@@ -281,9 +282,9 @@
     return this;
   }
 
-  public DesugaredLibraryTestBuilder<T> addL8KeepRules(String keepRules) {
+  public DesugaredLibraryTestBuilder<T> addL8KeepRules(String... keepRules) {
     if (compilationSpecification.isL8Shrink()) {
-      l8ExtraKeepRules += keepRules + "\n";
+      Collections.addAll(l8ExtraKeepRules, keepRules);
     }
     return this;
   }
@@ -465,7 +466,7 @@
       l8Builder
           .applyIf(
               compilationSpecification.isL8Shrink() && !l8ExtraKeepRules.isEmpty(),
-              b -> b.addKeepRules(l8ExtraKeepRules))
+              b -> b.addKeepRules(StringUtils.lines(l8ExtraKeepRules)))
           .addOptionsModifier(l8OptionModifier);
       for (ArtProfileForRewriting artProfileForRewriting : l8ArtProfilesForRewriting) {
         l8Builder.addArtProfileForRewriting(
diff --git a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
index 2fb1cc6..4ca66ed 100644
--- a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
@@ -180,6 +180,11 @@
     return l8Compile.writeToZip();
   }
 
+  public DesugaredLibraryTestCompileResult<T> writeL8ToZip(Path path) throws IOException {
+    l8Compile.writeToZip(path);
+    return this;
+  }
+
   public DesugaredLibraryTestCompileResult<T> addRunClasspathFiles(Path... classpathFiles) {
     runnableCompiledResult.addRunClasspathFiles(classpathFiles);
     return this;
