diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index c4a37c2..c565c4e 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -39,6 +39,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.io.ByteStreams;
+import com.google.common.io.Closer;
 import it.unimi.dsi.fastutil.objects.Object2IntMap;
 import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
 import java.io.ByteArrayOutputStream;
@@ -207,6 +208,16 @@
     return new Builder(reporter, app);
   }
 
+  public int applicationSize() throws IOException, ResourceException {
+    int bytes = 0;
+    try (Closer closer = Closer.create()) {
+      for (ProgramResource dex : getDexProgramResourcesForTesting()) {
+        bytes += ByteStreams.toByteArray(closer.register(dex.getByteStream())).length;
+      }
+    }
+    return bytes;
+  }
+
   /** Get full collection of all program resources from all program providers. */
   public Collection<ProgramResource> computeAllProgramResources() throws ResourceException {
     List<ProgramResource> resources = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
index a1e32b4..693eced 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
@@ -130,7 +130,7 @@
         .run(parameters.getRuntime(), PKG_NAME + ".HelloKt")
         .assertSuccessWithOutputLines("I'm Woody. Howdy, howdy, howdy.");
 
-    int size = applicationSize(AndroidApp.builder().addProgramFile(r8ProcessedKotlinc).build());
+    int size = AndroidApp.builder().addProgramFile(r8ProcessedKotlinc).build().applicationSize();
     assertTrue(size <= MAX_SIZE);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index 3e9a3cb..07b1906 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -213,16 +213,6 @@
     }
   }
 
-  public int applicationSize(AndroidApp app) throws IOException, ResourceException {
-    int bytes = 0;
-    try (Closer closer = Closer.create()) {
-      for (ProgramResource dex : app.getDexProgramResourcesForTesting()) {
-        bytes += ByteStreams.toByteArray(closer.register(dex.getByteStream())).length;
-      }
-    }
-    return bytes;
-  }
-
   public void assertIdenticalApplications(AndroidApp app1, AndroidApp app2)
       throws IOException, ResourceException {
     assertIdenticalApplications(app1, app2, false);
diff --git a/src/test/java/com/android/tools/r8/internal/Gmail17060416TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/Gmail17060416TreeShakeJarVerificationTest.java
index 82e7e93..99237cf 100644
--- a/src/test/java/com/android/tools/r8/internal/Gmail17060416TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/Gmail17060416TreeShakeJarVerificationTest.java
@@ -42,7 +42,7 @@
             .allowUnusedProguardConfigurationRules()
             .compile();
 
-    int appSize = applicationSize(compileResult.app);
+    int appSize = compileResult.app.applicationSize();
     assertTrue("Expected max size of " + MAX_SIZE+ ", got " + appSize, appSize < MAX_SIZE);
   }
 
diff --git a/src/test/java/com/android/tools/r8/internal/Gmail18082615TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/Gmail18082615TreeShakeJarVerificationTest.java
index 0f6a563..fc6e7d3 100644
--- a/src/test/java/com/android/tools/r8/internal/Gmail18082615TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/Gmail18082615TreeShakeJarVerificationTest.java
@@ -45,7 +45,7 @@
             .allowUnusedProguardConfigurationRules()
             .compile();
 
-    int appSize = applicationSize(compileResult.app);
+    int appSize = compileResult.app.applicationSize();
     assertTrue("Expected max size of " + MAX_SIZE+ ", got " + appSize, appSize < MAX_SIZE);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
index 86da48e..c577d60 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
@@ -47,7 +47,7 @@
             // Don't pass any inputs. The input will be read from the -injars in the Proguard
             // configuration file.
             ImmutableList.of());
-    int bytes = applicationSize(app);
+    int bytes = app.applicationSize();
     assertTrue("Expected max size of " + maxSize + ", got " + bytes, bytes < maxSize);
     return app;
   }
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
index 09cfa48..69b4748 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
@@ -34,7 +34,7 @@
             // Don't pass any inputs. The input will be read from the -injars in the Proguard
             // configuration file.
             ImmutableList.of());
-    int bytes = applicationSize(app);
+    int bytes = app.applicationSize();
     assertTrue("Expected max size of " + maxSize + ", got " + bytes, bytes < maxSize);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
index f29c397..f20a827 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
@@ -79,7 +79,7 @@
       System.out.println(actual.getStats(baseline));
     }
 
-    int applicationSize = applicationSize(compileResult.app);
+    int applicationSize = compileResult.app.applicationSize();
     System.out.println(applicationSize);
 
     assertTrue(
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
index 49b41aa..73da9f2 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
@@ -90,7 +90,7 @@
       System.out.println(actual.getStats(baseline));
     }
 
-    int applicationSize = applicationSize(compileResult.app);
+    int applicationSize = compileResult.app.applicationSize();
     System.out.println(applicationSize);
 
     assertTrue(
