diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 443da73..823bee3 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -90,6 +90,8 @@
       "Landroid/content/res/TypedArray;";
   public static final String androidContentContentProviderClientDescriptorString =
       "Landroid/content/ContentProviderClient;";
+  public static final String androidDrmDrmManagerClientDescriptorString =
+      "Landroid/drm/DrmManagerClient;";
 
   /** Set of types that may be synthesized during compilation. */
   private final Set<DexType> possibleCompilerSynthesizedTypes = Sets.newIdentityHashSet();
@@ -618,6 +620,8 @@
       createStaticallyKnownType(androidContentResTypedArrayDescriptorString);
   public final DexType androidContentContentProviderClientType =
       createStaticallyKnownType(androidContentContentProviderClientDescriptorString);
+  public final DexType androidDrmDrmManagerClientType =
+      createStaticallyKnownType(androidDrmDrmManagerClientDescriptorString);
 
   public final StringBuildingMethods stringBuilderMethods =
       new StringBuildingMethods(stringBuilderType);
@@ -675,6 +679,8 @@
       new AndroidContentResTypedArrayMembers();
   public final AndroidContentContentProviderClientMembers
       androidContentContentProviderClientMembers = new AndroidContentContentProviderClientMembers();
+  public final AndroidDrmDrmManagerClientMembers androidDrmDrmManagerClientMembers =
+      new AndroidDrmDrmManagerClientMembers();
 
   // java.**
   public final JavaIoFileMembers javaIoFileMembers = new JavaIoFileMembers();
@@ -1173,6 +1179,14 @@
         createMethod(androidContentContentProviderClientType, createProto(voidType), "close");
   }
 
+  // android.drm.DrmManagerClient
+  public class AndroidDrmDrmManagerClientMembers extends LibraryMembers {
+    public final DexMethod release =
+        createMethod(androidDrmDrmManagerClientType, createProto(voidType), "release");
+    public final DexMethod close =
+        createMethod(androidDrmDrmManagerClientType, createProto(voidType), "close");
+  }
+
   public class BooleanMembers extends BoxedPrimitiveMembers {
 
     public final DexField FALSE = createField(boxedBooleanType, boxedBooleanType, "FALSE");
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 6d36d49..7ea2a53 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -46,6 +46,7 @@
 import com.android.tools.r8.ir.desugar.backports.CollectionMethodGenerators;
 import com.android.tools.r8.ir.desugar.backports.CollectionMethodRewrites;
 import com.android.tools.r8.ir.desugar.backports.ContentProviderClientMethodRewrites;
+import com.android.tools.r8.ir.desugar.backports.DrmManagerClientMethodRewrites;
 import com.android.tools.r8.ir.desugar.backports.FloatMethodRewrites;
 import com.android.tools.r8.ir.desugar.backports.LongMethodRewrites;
 import com.android.tools.r8.ir.desugar.backports.NumericMethodRewrites;
@@ -823,6 +824,14 @@
           new InvokeRewriter(
               factory.androidContentContentProviderClientMembers.close,
               ContentProviderClientMethodRewrites.rewriteClose()));
+
+      // android.drm.DrmManagerClient
+
+      // void android.drm.DrmManagerClient.close()
+      addProvider(
+          new InvokeRewriter(
+              factory.androidDrmDrmManagerClientMembers.close,
+              DrmManagerClientMethodRewrites.rewriteClose()));
     }
 
     /**
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/backports/DrmManagerClientMethodRewrites.java b/src/main/java/com/android/tools/r8/ir/desugar/backports/DrmManagerClientMethodRewrites.java
new file mode 100644
index 0000000..408f560
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/desugar/backports/DrmManagerClientMethodRewrites.java
@@ -0,0 +1,21 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. 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.android.tools.r8.ir.desugar.backports;
+
+import com.android.tools.r8.cf.code.CfInvoke;
+import com.android.tools.r8.ir.desugar.BackportedMethodRewriter.MethodInvokeRewriter;
+import org.objectweb.asm.Opcodes;
+
+public final class DrmManagerClientMethodRewrites {
+
+  private DrmManagerClientMethodRewrites() {}
+
+  public static MethodInvokeRewriter rewriteClose() {
+    // Rewrite android/drm/DrmManagerClient#close to android/drm/DrmManagerClient#release
+    return (invoke, factory) ->
+        new CfInvoke(
+            Opcodes.INVOKEVIRTUAL, factory.androidDrmDrmManagerClientMembers.release, false);
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/DrmManagerClientBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/DrmManagerClientBackportTest.java
new file mode 100644
index 0000000..6b16c6c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/backports/DrmManagerClientBackportTest.java
@@ -0,0 +1,104 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. 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.android.tools.r8.desugar.backports;
+
+import static org.junit.Assert.assertTrue;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.google.common.collect.ImmutableList;
+import java.io.IOException;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class DrmManagerClientBackportTest extends AbstractBackportTest {
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimesAndAllApiLevels().build();
+  }
+
+  public DrmManagerClientBackportTest(TestParameters parameters) throws IOException {
+    super(
+        parameters,
+        DrmManagerClientBackportTest.getDrmManagerClient(parameters),
+        ImmutableList.of(
+            DrmManagerClientBackportTest.getTestRunner(),
+            DrmManagerClientBackportTest.getDrmManagerClient(parameters)));
+
+    // The constructor is used by the test and release has been available since API 5 and is the
+    // method close is rewritten to.
+    ignoreInvokes("<init>");
+    ignoreInvokes("release");
+
+    // android.drm.DrmManagerClient.close added in API 24.
+    registerTarget(AndroidApiLevel.N, 1);
+  }
+
+  private static byte[] getDrmManagerClient(TestParameters parameters) throws IOException {
+    if (parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N)) {
+      assertTrue(parameters.getRuntime().asDex().getVm().isNewerThanOrEqual(DexVm.ART_7_0_0_HOST));
+      return transformer(DrmManagerClientApiLevel24.class)
+          .setClassDescriptor(DexItemFactory.androidDrmDrmManagerClientDescriptorString)
+          .transform();
+    } else {
+      return transformer(DrmManagerClient.class)
+          .setClassDescriptor(DexItemFactory.androidDrmDrmManagerClientDescriptorString)
+          .transform();
+    }
+  }
+
+  private static byte[] getTestRunner() throws IOException {
+    return transformer(TestRunner.class)
+        .replaceClassDescriptorInMethodInstructions(
+            descriptor(DrmManagerClient.class),
+            DexItemFactory.androidDrmDrmManagerClientDescriptorString)
+        .transform();
+  }
+
+  public static class DrmManagerClient {
+    public boolean wasClosed = false;
+
+    public void close() {
+      TestRunner.doFail("close should not be called");
+    }
+
+    public void release() {
+      wasClosed = true;
+    }
+  }
+
+  public static class DrmManagerClientApiLevel24 {
+    public boolean wasClosed = false;
+
+    public void close() {
+      wasClosed = true;
+    }
+
+    public void release() {
+      TestRunner.doFail("release should not be called");
+    }
+  }
+
+  public static class TestRunner extends MiniAssert {
+
+    public static void main(String[] args) {
+      DrmManagerClient drmManagerClient = new DrmManagerClient();
+      MiniAssert.assertFalse(drmManagerClient.wasClosed);
+      drmManagerClient.close();
+      MiniAssert.assertTrue(drmManagerClient.wasClosed);
+    }
+
+    // Forwards to MiniAssert to avoid having to make it public.
+    public static void doFail(String message) {
+      MiniAssert.fail(message);
+    }
+  }
+}
