diff --git a/src/main/java/com/android/tools/r8/metadata/impl/R8KeepAttributesMetadataImpl.java b/src/main/java/com/android/tools/r8/metadata/impl/R8KeepAttributesMetadataImpl.java
index ee9f918..dabb6de 100644
--- a/src/main/java/com/android/tools/r8/metadata/impl/R8KeepAttributesMetadataImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/impl/R8KeepAttributesMetadataImpl.java
@@ -39,14 +39,6 @@
   private final boolean isInnerClassesKept;
 
   @Expose
-  @SerializedName("isLocalVariableTableKept")
-  private final boolean isLocalVariableTableKept;
-
-  @Expose
-  @SerializedName("isLocalVariableTypeTableKept")
-  private final boolean isLocalVariableTypeTableKept;
-
-  @Expose
   @SerializedName("isMethodParametersKept")
   private final boolean isMethodParametersKept;
 
@@ -87,10 +79,6 @@
   private final boolean isSourceDebugExtensionKept;
 
   @Expose
-  @SerializedName("isSourceDirKept")
-  private final boolean isSourceDirKept;
-
-  @Expose
   @SerializedName("isSourceFileKept")
   private final boolean isSourceFileKept;
 
@@ -103,8 +91,6 @@
     this.isEnclosingMethodKept = keepAttributes.enclosingMethod;
     this.isExceptionsKept = keepAttributes.exceptions;
     this.isInnerClassesKept = keepAttributes.innerClasses;
-    this.isLocalVariableTableKept = keepAttributes.localVariableTable;
-    this.isLocalVariableTypeTableKept = keepAttributes.localVariableTypeTable;
     this.isMethodParametersKept = keepAttributes.methodParameters;
     this.isPermittedSubclassesKept = keepAttributes.permittedSubclasses;
     this.isRuntimeInvisibleAnnotationsKept = keepAttributes.runtimeInvisibleAnnotations;
@@ -117,7 +103,6 @@
     this.isRuntimeVisibleTypeAnnotationsKept = keepAttributes.runtimeVisibleTypeAnnotations;
     this.isSignatureKept = keepAttributes.signature;
     this.isSourceDebugExtensionKept = keepAttributes.sourceDebugExtension;
-    this.isSourceDirKept = keepAttributes.sourceDir;
     this.isSourceFileKept = keepAttributes.sourceFile;
     this.isStackMapTableKept = keepAttributes.stackMapTable;
   }
@@ -144,12 +129,12 @@
 
   @Override
   public boolean isLocalVariableTableKept() {
-    return isLocalVariableTableKept;
+    return false;
   }
 
   @Override
   public boolean isLocalVariableTypeTableKept() {
-    return isLocalVariableTypeTableKept;
+    return false;
   }
 
   @Override
@@ -204,7 +189,7 @@
 
   @Override
   public boolean isSourceDirKept() {
-    return isSourceDirKept;
+    return false;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
index e8a384f..954a409 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
@@ -10,14 +10,11 @@
 public class ProguardKeepAttributes {
 
   public static final String SOURCE_FILE = "SourceFile";
-  public static final String SOURCE_DIR = "SourceDir";
   public static final String INNER_CLASSES = "InnerClasses";
   public static final String ENCLOSING_METHOD = "EnclosingMethod";
   public static final String SIGNATURE = "Signature";
   public static final String EXCEPTIONS = "Exceptions";
   public static final String LINE_NUMBER_TABLE = "LineNumberTable";
-  public static final String LOCAL_VARIABLE_TABLE = "LocalVariableTable";
-  public static final String LOCAL_VARIABLE_TYPE_TABLE = "LocalVariableTypeTable";
   public static final String METHOD_PARAMETERS = "MethodParameters";
   public static final String SOURCE_DEBUG_EXTENSION = "SourceDebugExtension";
   public static final String RUNTIME_VISIBLE_ANNOTATIONS = "RuntimeVisibleAnnotations";
@@ -34,13 +31,10 @@
   public static final String STACK_MAP_TABLE = "StackMapTable";
 
   public boolean sourceFile = false;
-  public boolean sourceDir = false;
   public boolean innerClasses = false;
   public boolean enclosingMethod = false;
   public boolean signature = false;
   public boolean exceptions = false;
-  public boolean localVariableTable = false;
-  public boolean localVariableTypeTable = false;
   public boolean methodParameters = false;
   public boolean sourceDebugExtension = false;
   public boolean runtimeVisibleAnnotations = false;
@@ -57,13 +51,10 @@
 
   public ProguardKeepAttributes keepAllAttributesExceptRuntimeInvisibleAnnotations() {
     sourceFile = true;
-    sourceDir = true;
     innerClasses = true;
     enclosingMethod = true;
     signature = true;
     exceptions = true;
-    localVariableTable = true;
-    localVariableTypeTable = true;
     methodParameters = true;
     sourceDebugExtension = true;
     runtimeVisibleAnnotations = true;
@@ -124,10 +115,8 @@
 
   public void applyPatterns(List<String> patterns) {
     sourceFile = update(sourceFile, SOURCE_FILE, patterns);
-    sourceDir = update(sourceDir, SOURCE_DIR, patterns);
     innerClasses = update(innerClasses, INNER_CLASSES, patterns);
     enclosingMethod = update(enclosingMethod, ENCLOSING_METHOD, patterns);
-    localVariableTypeTable = update(localVariableTypeTable, LOCAL_VARIABLE_TYPE_TABLE, patterns);
     exceptions = update(exceptions, EXCEPTIONS, patterns);
     methodParameters = update(methodParameters, METHOD_PARAMETERS, patterns);
     signature = update(signature, SIGNATURE, patterns);
@@ -174,7 +163,6 @@
     }
     ProguardKeepAttributes other = (ProguardKeepAttributes) o;
     return this.sourceFile == other.sourceFile
-        && this.sourceDir == other.sourceDir
         && this.innerClasses == other.innerClasses
         && this.enclosingMethod == other.enclosingMethod
         && this.signature == other.signature
@@ -195,7 +183,6 @@
   @Override
   public int hashCode() {
     return (this.sourceFile ? 1 : 0)
-        + (this.sourceDir ? 1 << 1 : 0)
         + (this.innerClasses ? 1 << 2 : 0)
         + (this.enclosingMethod ? 1 << 3 : 0)
         + (this.signature ? 1 << 4 : 0)
@@ -215,7 +202,6 @@
 
   public boolean isEmpty() {
     return !sourceFile
-        && !sourceDir
         && !innerClasses
         && !enclosingMethod
         && !signature
@@ -238,9 +224,6 @@
     if (sourceFile) {
       attributes.add(SOURCE_FILE);
     }
-    if (sourceDir) {
-      attributes.add(SOURCE_DIR);
-    }
     if (innerClasses) {
       attributes.add(INNER_CLASSES);
     }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index bd3cdcf..9292f76 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -345,8 +345,6 @@
     assert !proguardConfiguration.isObfuscating();
     getProguardConfiguration().getKeepAttributes().sourceFile = true;
     getProguardConfiguration().getKeepAttributes().sourceDebugExtension = true;
-    getProguardConfiguration().getKeepAttributes().localVariableTable = true;
-    getProguardConfiguration().getKeepAttributes().localVariableTypeTable = true;
   }
 
   void enableProtoShrinking() {
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index 31b2154..d2cd044 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -1388,10 +1388,10 @@
   public void testRenameSourceFileAttribute() throws Exception {
     for (String lineSeparator : lineSeparators) {
       reset();
-      Path proguardConfig = writeTextToTempFile(lineSeparator,
-          ImmutableList.of(
-              "-renamesourcefileattribute PG",
-              "-keepattributes SourceFile,SourceDir"));
+      Path proguardConfig =
+          writeTextToTempFile(
+              lineSeparator,
+              ImmutableList.of("-renamesourcefileattribute PG", "-keepattributes SourceFile"));
       ProguardConfigurationParser parser =
           new ProguardConfigurationParser(new DexItemFactory(), reporter);
       parser.parse(proguardConfig);
@@ -1399,7 +1399,6 @@
       ProguardConfiguration config = parser.getConfigRawForTesting();
       assertEquals("PG", config.getRenameSourceFileAttribute());
       assertTrue(config.getKeepAttributes().sourceFile);
-      assertTrue(config.getKeepAttributes().sourceDir);
     }
   }
 
@@ -1418,7 +1417,6 @@
       ProguardConfiguration config = parser.getConfigRawForTesting();
       assertEquals("", config.getRenameSourceFileAttribute());
       assertTrue(config.getKeepAttributes().sourceFile);
-      assertFalse(config.getKeepAttributes().sourceDir);
     }
   }
 
@@ -1438,7 +1436,6 @@
         ProguardConfiguration config = parser.getConfigRawForTesting();
         assertEquals("PG", config.getRenameSourceFileAttribute());
         assertTrue(config.getKeepAttributes().sourceFile);
-        assertFalse(config.getKeepAttributes().sourceDir);
       }
     }
   }
@@ -1459,7 +1456,6 @@
         ProguardConfiguration config = parser.getConfigRawForTesting();
         assertEquals("", config.getRenameSourceFileAttribute());
         assertTrue(config.getKeepAttributes().sourceFile);
-        assertFalse(config.getKeepAttributes().sourceDir);
       }
     }
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
index 9eadede..bf46563 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
@@ -81,12 +81,9 @@
   @Test
   public void keepLineNumberTableAndLocalVariableTable()
       throws CompilationFailedException, IOException, ExecutionException {
-    List<String> keepRules = ImmutableList.of(
-        "-keepattributes "
-            + ProguardKeepAttributes.LINE_NUMBER_TABLE
-            + ", "
-            + ProguardKeepAttributes.LOCAL_VARIABLE_TABLE
-    );
+    List<String> keepRules =
+        ImmutableList.of(
+            "-keepattributes " + ProguardKeepAttributes.LINE_NUMBER_TABLE + ", LocalVariableTable");
     MethodSubject mainMethod = compileRunAndGetMain(keepRules, CompilationMode.RELEASE);
     assertEquals(doesNotHavePcSupport(), mainMethod.hasLineNumberTable());
     // Locals are never included in release builds.
@@ -95,9 +92,7 @@
 
   @Test
   public void keepLocalVariableTable() throws Exception {
-    List<String> keepRules = ImmutableList.of(
-        "-keepattributes " + ProguardKeepAttributes.LOCAL_VARIABLE_TABLE
-    );
+    List<String> keepRules = ImmutableList.of("-keepattributes LocalVariableTable");
     // Compiling with a keep rule for locals but no line table no longer results in an error in R8.
     compileRunAndGetMain(keepRules, CompilationMode.RELEASE);
   }
diff --git a/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
index 4b11d03..baf96b4 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -434,10 +434,6 @@
     return addKeepAttributes(ProguardKeepAttributes.LINE_NUMBER_TABLE);
   }
 
-  public T addKeepAttributeLocalVariableTable() {
-    return addKeepAttributes(ProguardKeepAttributes.LOCAL_VARIABLE_TABLE);
-  }
-
   public T addKeepAttributeSignature() {
     return addKeepAttributes(ProguardKeepAttributes.SIGNATURE);
   }
