diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
index 7b78157..effd169 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
@@ -16,15 +16,20 @@
 import com.android.tools.r8.utils.StringUtils;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
 import java.nio.channels.SeekableByteChannel;
 import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.nio.file.StandardOpenOption;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.nio.file.attribute.PosixFileAttributeView;
 import java.nio.file.attribute.PosixFileAttributes;
 import java.nio.file.attribute.PosixFilePermission;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,6 +45,19 @@
           "String written: Hello World",
           "bytes read: 11",
           "String read: Hello World",
+          "bytes read: 11",
+          "String read: Hello World",
+          "null",
+          "true",
+          "unsupported");
+  private static final String EXPECTED_RESULT_24_26 =
+      StringUtils.lines(
+          "bytes written: 11",
+          "String written: Hello World",
+          "bytes read: 11",
+          "String read: Hello World",
+          "unsupported",
+          "unsupported",
           "null",
           "true",
           "unsupported");
@@ -49,6 +67,8 @@
           "String written: Hello World",
           "bytes read: 11",
           "String read: Hello World",
+          "bytes read: 11",
+          "String read: Hello World",
           "true",
           "true",
           "true");
@@ -69,8 +89,11 @@
   }
 
   private String getExpectedResult() {
-    return parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.O)
-        ? EXPECTED_RESULT_26
+    if (parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.O)) {
+      return EXPECTED_RESULT_26;
+    }
+    return parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N)
+        ? EXPECTED_RESULT_24_26
         : EXPECTED_RESULT;
   }
 
@@ -124,8 +147,12 @@
 
     public static void main(String[] args) throws Throwable {
       Path path = Files.createTempFile("example", ".txt");
-      readWrite(path);
+      readWriteThroughFilesAPI(path);
+      readThroughFileChannelAPI(path);
+      attributeAccess(path);
+    }
 
+    private static void attributeAccess(Path path) throws IOException {
       PosixFileAttributeView view = Files.getFileAttributeView(path, PosixFileAttributeView.class);
       if (view != null) {
         System.out.println(
@@ -154,7 +181,7 @@
       }
     }
 
-    private static void readWrite(Path path) throws IOException {
+    private static void readWriteThroughFilesAPI(Path path) throws IOException {
       try (SeekableByteChannel channel =
           Files.newByteChannel(path, StandardOpenOption.READ, StandardOpenOption.WRITE)) {
         String toWrite = "Hello World";
@@ -173,5 +200,26 @@
         System.out.println("String read: " + new String(byteBuffer2.array()));
       }
     }
+
+    private static void readThroughFileChannelAPI(Path path) throws IOException {
+      try {
+        Set<OpenOption> openOptions = new HashSet<>();
+        openOptions.add(LinkOption.NOFOLLOW_LINKS);
+        try (FileChannel channel = FileChannel.open(path, openOptions)) {
+          String toWrite = "Hello World";
+
+          // Read the String toWrite from the channel.
+          channel.position(0);
+          ByteBuffer byteBuffer2 = ByteBuffer.allocate(toWrite.length());
+          int read = channel.read(byteBuffer2);
+          System.out.println("bytes read: " + read);
+          System.out.println("String read: " + new String(byteBuffer2.array()));
+        }
+      } catch (NoClassDefFoundError err) {
+        // TODO(b/222647019): FileChannel#open is not supported in between 24 and 26.
+        System.out.println("unsupported");
+        System.out.println("unsupported");
+      }
+    }
   }
 }
