diff --git a/annotation/processors/changeid/Android.bp b/annotation/processors/changeid/Android.bp
index 717738a..a29e564 100644
--- a/annotation/processors/changeid/Android.bp
+++ b/annotation/processors/changeid/Android.bp
@@ -10,6 +10,19 @@
     ],
 }
 
+java_library {
+    name: "xml-writer-device-lib",
+
+    srcs: [
+        "src/java/com/android/compat/annotation/XmlWriter.java",
+        "src/java/com/android/compat/annotation/Change.java",
+    ],
+
+    static_libs: [
+        "guava",
+    ],
+}
+
 java_plugin {
     name: "compat-changeid-annotation-processor",
     processor_class: "com.android.compat.annotation.ChangeIdProcessor",
diff --git a/annotation/processors/changeid/src/java/com/android/compat/annotation/Change.java b/annotation/processors/changeid/src/java/com/android/compat/annotation/Change.java
index c65e7b0..428fa8e 100644
--- a/annotation/processors/changeid/src/java/com/android/compat/annotation/Change.java
+++ b/annotation/processors/changeid/src/java/com/android/compat/annotation/Change.java
@@ -16,15 +16,19 @@
 
 package com.android.compat.annotation;
 
+import com.google.common.annotations.VisibleForTesting;
+
 /**
  * Simple data class that represents a change, built from the code annotations.
  */
+@VisibleForTesting
 public class Change {
     final Long id;
     final String name;
     final boolean disabled;
     final Integer enabledAfter;
 
+    @VisibleForTesting
     public Change(Long id, String name, boolean disabled, Integer enabledAfter) {
         this.id = id;
         this.name = name;
diff --git a/annotation/processors/changeid/src/java/com/android/compat/annotation/ChangeIdProcessor.java b/annotation/processors/changeid/src/java/com/android/compat/annotation/ChangeIdProcessor.java
index 4ba284a..52e48e8 100644
--- a/annotation/processors/changeid/src/java/com/android/compat/annotation/ChangeIdProcessor.java
+++ b/annotation/processors/changeid/src/java/com/android/compat/annotation/ChangeIdProcessor.java
@@ -17,9 +17,13 @@
 package com.android.compat.annotation;
 
 import static javax.tools.Diagnostic.Kind.ERROR;
+import static javax.tools.StandardLocation.CLASS_OUTPUT;
+
 
 import com.google.common.collect.ImmutableSet;
 
+import java.io.IOException;
+import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.util.Set;
 import java.util.Map;
@@ -91,7 +95,16 @@
             writer.addChange(change);
         }
 
-        writer.write(PACKAGE, CONFIG_XML, processingEnv.getFiler());
+        try (OutputStream output = processingEnv.getFiler().createResource(
+                CLASS_OUTPUT,
+                PACKAGE,
+                CONFIG_XML)
+                .openOutputStream()) {
+            writer.write(output);
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to write output", e);
+        }
+
 
         return true;
     }
diff --git a/annotation/processors/changeid/src/java/com/android/compat/annotation/XmlWriter.java b/annotation/processors/changeid/src/java/com/android/compat/annotation/XmlWriter.java
index eb8856c..71a4d0f 100644
--- a/annotation/processors/changeid/src/java/com/android/compat/annotation/XmlWriter.java
+++ b/annotation/processors/changeid/src/java/com/android/compat/annotation/XmlWriter.java
@@ -16,12 +16,11 @@
 
 package com.android.compat.annotation;
 
-import static javax.tools.StandardLocation.CLASS_OUTPUT;
+import com.google.common.annotations.VisibleForTesting;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import java.io.IOException;
 import java.io.OutputStream;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -32,7 +31,6 @@
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
-import javax.annotation.processing.Filer;
 
 /**
  * <p>Writes an XML config file containing provided changes.</p>
@@ -49,7 +47,8 @@
  * </pre>
  *
  */
-final class XmlWriter {
+@VisibleForTesting
+public final class XmlWriter {
     //XML tags
     private static final String XML_ROOT = "config";
     private static final String XML_CHANGE_ELEMENT = "compat-change";
@@ -58,17 +57,19 @@
     private static final String XML_DISABLED_ATTR = "disabled";
     private static final String XML_ENABLED_AFTER_ATTR = "enableAfterTargetSdk";
 
-    private Document document;
-    private Element root;
+    private Document mDocument;
+    private Element mRoot;
 
-    XmlWriter() {
-        document = createDocument();
-        root = document.createElement(XML_ROOT);
-        document.appendChild(root);
+    @VisibleForTesting
+    public XmlWriter() {
+        mDocument = createDocument();
+        mRoot = mDocument.createElement(XML_ROOT);
+        mDocument.appendChild(mRoot);
     }
 
-    void addChange(Change change) {
-        Element newElement = document.createElement(XML_CHANGE_ELEMENT);
+    @VisibleForTesting
+    public void addChange(Change change) {
+        Element newElement = mDocument.createElement(XML_CHANGE_ELEMENT);
         newElement.setAttribute(XML_NAME_ATTR, change.name);
         newElement.setAttribute(XML_ID_ATTR, change.id.toString());
         if (change.disabled) {
@@ -77,23 +78,20 @@
         if (change.enabledAfter != null) {
             newElement.setAttribute(XML_ENABLED_AFTER_ATTR, change.enabledAfter.toString());
         }
-        root.appendChild(newElement);
+        mRoot.appendChild(newElement);
     }
 
-    void write(String packageName, String fileName, Filer filer) {
-        try (OutputStream output = filer.createResource(
-                CLASS_OUTPUT,
-                packageName,
-                fileName)
-                .openOutputStream()) {
+    @VisibleForTesting
+    public void write(OutputStream output) {
+        try {
             TransformerFactory transformerFactory = TransformerFactory.newInstance();
             Transformer transformer = transformerFactory.newTransformer();
-            DOMSource domSource = new DOMSource(document);
+            DOMSource domSource = new DOMSource(mDocument);
 
             StreamResult result = new StreamResult(output);
 
             transformer.transform(domSource, result);
-        } catch (IOException | TransformerException e) {
+        } catch (TransformerException e) {
             throw new RuntimeException("Failed to write output", e);
         }
     }
@@ -102,8 +100,7 @@
         try {
             DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
             DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
-            Document document = documentBuilder.newDocument();
-            return document;
+            return documentBuilder.newDocument();
         } catch (ParserConfigurationException e) {
             throw new RuntimeException("Failed to create a new document", e);
         }
diff --git a/annotation/processors/changeid/test/src/com/android/compat/annotation/XmlWriterTest.java b/annotation/processors/changeid/test/src/com/android/compat/annotation/XmlWriterTest.java
index 3bc8e2b..eefac25 100644
--- a/annotation/processors/changeid/test/src/com/android/compat/annotation/XmlWriterTest.java
+++ b/annotation/processors/changeid/test/src/com/android/compat/annotation/XmlWriterTest.java
@@ -16,70 +16,49 @@
 
 package com.android.compat.annotation;
 
-import static org.mockito.Mockito.when;
-import static org.junit.Assert.assertThat;
 import static org.hamcrest.core.StringStartsWith.startsWith;
+import static org.junit.Assert.assertThat;
 
 import org.junit.Test;
-import org.mockito.Mock;
-
-import javax.annotation.processing.Filer;
-import javax.tools.FileObject;
-import javax.tools.StandardLocation;
 
 import java.io.ByteArrayOutputStream;
 import java.io.OutputStream;
 
-import org.junit.Before;
-import org.junit.Rule;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
 
 public class XmlWriterTest {
 
     private static final String HEADER =
             "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
 
-    @Mock private Filer filer;
-    @Mock private FileObject fileObject;
-    private OutputStream outputStream = new ByteArrayOutputStream();
-
-    @Rule public MockitoRule rule = MockitoJUnit.rule();
-
-    @Before
-    public void setUp() throws Exception {
-        when(filer.createResource(StandardLocation.CLASS_OUTPUT, "package", "name")).thenReturn(
-                fileObject);
-        when(fileObject.openOutputStream()).thenReturn(outputStream);
-    }
+    private OutputStream mOutputStream = new ByteArrayOutputStream();
 
     @Test
-    public void testNoChanges() throws Exception {
+    public void testNoChanges() {
         XmlWriter writer = new XmlWriter();
-        writer.write("package", "name", filer);
+        writer.write(mOutputStream);
 
         String expected = HEADER + "<config/>";
 
-        assertThat(outputStream.toString(), startsWith(expected));
+        assertThat(mOutputStream.toString(), startsWith(expected));
     }
 
     @Test
-    public void testOneChange() throws Exception {
+    public void testOneChange() {
         XmlWriter writer = new XmlWriter();
         Change c = new Change(123456789L, "change-name", false, null);
 
         writer.addChange(c);
-        writer.write("package", "name", filer);
+        writer.write(mOutputStream);
 
         String expected = HEADER + "<config>"
                 + "<compat-change id=\"123456789\" name=\"change-name\"/>"
                 + "</config>";
 
-        assertThat(outputStream.toString(), startsWith(expected));
+        assertThat(mOutputStream.toString(), startsWith(expected));
     }
 
     @Test
-    public void testSomeChanges() throws Exception {
+    public void testSomeChanges() {
         XmlWriter writer = new XmlWriter();
         Change c = new Change(111L, "change-name1", false, null);
         Change disabled = new Change(222L, "change-name2", true, null);
@@ -90,7 +69,7 @@
         writer.addChange(disabled);
         writer.addChange(sdkRestricted);
         writer.addChange(both);
-        writer.write("package", "name", filer);
+        writer.write(mOutputStream);
 
         String expected = HEADER + "<config>"
                 + "<compat-change id=\"111\" name=\"change-name1\"/>"
@@ -100,6 +79,6 @@
                 + "name=\"change-name4\"/>"
                 + "</config>";
 
-        assertThat(outputStream.toString(), startsWith(expected));
+        assertThat(mOutputStream.toString(), startsWith(expected));
     }
 }
