diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceRegularExpression.java b/src/main/java/com/android/tools/r8/retrace/RetraceRegularExpression.java
index 20e12e0..f1603f7 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceRegularExpression.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceRegularExpression.java
@@ -767,7 +767,7 @@
     }
   }
 
-  private class SourceFileLineNumberGroup extends RegularExpressionGroup {
+  private static class SourceFileLineNumberGroup extends RegularExpressionGroup {
 
     @Override
     String shortName() {
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
index 6fea76f..ee1d8f8 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.retrace.Retrace;
 import com.android.tools.r8.retrace.RetraceCommand;
 import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.function.BiConsumer;
 import junit.framework.TestCase;
@@ -32,6 +33,12 @@
     return getTestParameters().withNoneRuntime().build();
   }
 
+  private static String REMAPPER_REGEX =
+      "(?:.*?\\bat\\s+%c\\.%m\\s*\\(%S\\)\\s*)"
+          + "|(?:(?:.*?[:\"]\\s+)?%c(?::.*)?)"
+          + "|(?:.*?%t\\s+%c\\.%m\\s*\\(%a\\)\\s*)";
+  private static String FINSKY_REGEX = "(?:.*Finsky\\s+:\\s+\\[\\d+\\]\\s+%c\\.%m\\(%l\\):.*)";
+
   public RetraceTests(TestParameters parameters) {}
 
   @Test
@@ -41,7 +48,82 @@
 
   @Test
   public void testFinskyStackTrace() {
-    runRetraceTest(new FinskyStackTrace(), "(?:.*Finsky\\s+:\\s+\\[\\d+\\]\\s+%c\\.%m\\(%l\\):.*)");
+    runRetraceTest(new FinskyStackTrace(), FINSKY_REGEX);
+  }
+
+  @Test
+  public void testCronetRemapperRegexpTest() {
+    runRetraceTest(new CronetStackTrace(), REMAPPER_REGEX);
+  }
+
+  @Test
+  public void testCronetAndFinskyStackTrace() {
+    CronetStackTrace cronetStackTrace = new CronetStackTrace();
+    FinskyStackTrace finskyStackTrace = new FinskyStackTrace();
+    runRetraceTest(
+        new StackTraceForTest() {
+          @Override
+          public List<String> obfuscatedStackTrace() {
+            ArrayList<String> obfuscated = new ArrayList<>();
+            obfuscated.addAll(cronetStackTrace.obfuscatedStackTrace());
+            obfuscated.addAll(finskyStackTrace.obfuscatedStackTrace());
+            return obfuscated;
+          }
+
+          @Override
+          public String mapping() {
+            return cronetStackTrace.mapping();
+          }
+
+          @Override
+          public List<String> retracedStackTrace() {
+            ArrayList<String> retraced = new ArrayList<>();
+            retraced.addAll(cronetStackTrace.retracedStackTrace());
+            retraced.addAll(finskyStackTrace.retracedStackTrace());
+            return retraced;
+          }
+
+          @Override
+          public int expectedWarnings() {
+            return 0;
+          }
+        },
+        FINSKY_REGEX + "|" + DEFAULT_REGULAR_EXPRESSION);
+  }
+
+  @Test
+  public void testCronetAndFinskyStackTraceRemapperRegExp() {
+    CronetStackTrace cronetStackTrace = new CronetStackTrace();
+    FinskyStackTrace finskyStackTrace = new FinskyStackTrace();
+    runRetraceTest(
+        new StackTraceForTest() {
+          @Override
+          public List<String> obfuscatedStackTrace() {
+            ArrayList<String> obfuscated = new ArrayList<>();
+            obfuscated.addAll(cronetStackTrace.obfuscatedStackTrace());
+            obfuscated.addAll(finskyStackTrace.obfuscatedStackTrace());
+            return obfuscated;
+          }
+
+          @Override
+          public String mapping() {
+            return cronetStackTrace.mapping();
+          }
+
+          @Override
+          public List<String> retracedStackTrace() {
+            ArrayList<String> retraced = new ArrayList<>();
+            retraced.addAll(cronetStackTrace.retracedStackTrace());
+            retraced.addAll(finskyStackTrace.retracedStackTrace());
+            return retraced;
+          }
+
+          @Override
+          public int expectedWarnings() {
+            return 0;
+          }
+        },
+        FINSKY_REGEX + "|" + REMAPPER_REGEX);
   }
 
   @Test
