diff --git a/.travis.yml b/.travis.yml
index e518c82..a16db93 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@
 
 dart:
   - dev
-  - 2.0.0
+  - 2.4.0
 
 dart_task:
   - test: -p chrome,vm
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3dc43c..9af1b28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## 1.1.6-dev
+## 2.0.0-dev
+
+* **Breaking** The `sdkRoot` argument must be an `Uri`. Use `Uri.parse` for use
+  cases previously passing a `String`.
+* **Breaking** The deprecated `packageRoot` argument has been removed.
 
 ## 1.1.5
 
diff --git a/lib/source_map_stack_trace.dart b/lib/source_map_stack_trace.dart
index 1b08952..ae6967a 100644
--- a/lib/source_map_stack_trace.dart
+++ b/lib/source_map_stack_trace.dart
@@ -16,26 +16,10 @@
 /// If [packageResolver] is passed, it's used to reconstruct `package:` URIs for
 /// stack frames that come from packages.
 ///
-/// [sdkRoot] is the URI (usually a `file:` URI) for the SDK containing dart2js.
-/// It can be a [String] or a [Uri]. If it's passed, stack frames from the SDK
-/// will have `dart:` URLs.
-///
-/// `packageRoot` is deprecated and shouldn't be used in new code. This throws
-/// an [ArgumentError] if `packageRoot` and [packageResolver] are both passed.
+/// [sdkRoot] is the URI surfaced in the stack traces for SDK libraries.
+/// If it's passed, stack frames from the SDK will have `dart:` URLs.
 StackTrace mapStackTrace(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified = false,
-    SyncPackageResolver packageResolver,
-    sdkRoot,
-    @Deprecated('Use the packageResolver parameter instead.') packageRoot}) {
-  if (packageRoot != null) {
-    if (packageResolver != null) {
-      throw ArgumentError(
-          'packageResolver and packageRoot may not both be passed.');
-    }
-
-    packageResolver = SyncPackageResolver.root(packageRoot);
-  }
-
+    {bool minified = false, SyncPackageResolver packageResolver, Uri sdkRoot}) {
   if (stackTrace is Chain) {
     return Chain(stackTrace.traces.map((trace) {
       return Trace.from(mapStackTrace(sourceMap, trace,
@@ -45,10 +29,6 @@
     }));
   }
 
-  if (sdkRoot != null && sdkRoot is! String && sdkRoot is! Uri) {
-    throw ArgumentError('sdkRoot must be a String or a Uri, was "$sdkRoot".');
-  }
-
   var sdkLib = sdkRoot == null ? null : '$sdkRoot/lib';
 
   var trace = Trace.from(stackTrace);
diff --git a/pubspec.yaml b/pubspec.yaml
index aa69de5..3c1c82d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,12 +1,12 @@
 name: source_map_stack_trace
-version: 1.1.6-dev
+version: 2.0.0-dev
 
 description: A package for applying source maps to stack traces.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/source_map_stack_trace
 
 environment:
-  sdk: '>=2.0.0 <3.0.0'
+  sdk: '>=2.4.0 <3.0.0'
 
 dependencies:
   package_resolver: ^1.0.0
@@ -15,5 +15,8 @@
   source_maps: ^0.10.2
 
 dev_dependencies:
-  test: '>=0.12.0 <2.0.0'
+  test: ^1.12.0
   pedantic: ^1.0.0
+
+dependency_overrides:
+  test_core: ^0.3.0
diff --git a/test/source_map_stack_trace_test.dart b/test/source_map_stack_trace_test.dart
index 0bb3081..a7b8deb 100644
--- a/test/source_map_stack_trace_test.dart
+++ b/test/source_map_stack_trace_test.dart
@@ -127,25 +127,6 @@
     expect(frame.column, equals(4));
   });
 
-  test('uses package: URIs for frames within packageRoot', () {
-    var trace = Trace.parse('foo.dart.js 10  foo');
-    var builder = SourceMapBuilder()
-      ..addSpan(
-          SourceMapSpan.identifier(
-              SourceLocation(1,
-                  line: 1, column: 3, sourceUrl: 'packages/foo/foo.dart'),
-              'qux'),
-          SourceSpan(SourceLocation(8, line: 5, column: 0),
-              SourceLocation(12, line: 9, column: 1), '\n' * 4));
-
-    var mapping = parseJson(builder.build('foo.dart.js.map'));
-    var frame =
-        _mapTrace(mapping, trace, packageRoot: 'packages/').frames.first;
-    expect(frame.uri, equals(Uri.parse('package:foo/foo.dart')));
-    expect(frame.line, equals(2));
-    expect(frame.column, equals(4));
-  });
-
   test('uses package: URIs for frames within packageResolver.packageRoot', () {
     var trace = Trace.parse('foo.dart.js 10  foo');
     var builder = SourceMapBuilder()
@@ -200,7 +181,8 @@
               SourceLocation(12, line: 9, column: 1), '\n' * 4));
 
     var mapping = parseJson(builder.build('foo.dart.js.map'));
-    var frame = _mapTrace(mapping, trace, sdkRoot: 'sdk/').frames.first;
+    var frame =
+        _mapTrace(mapping, trace, sdkRoot: Uri.parse('sdk/')).frames.first;
     expect(frame.uri, equals(Uri.parse('dart:async/foo.dart')));
     expect(frame.line, equals(2));
     expect(frame.column, equals(4));
@@ -282,31 +264,17 @@
 /// Like [mapStackTrace], but is guaranteed to return a [Trace] so it can be
 /// inspected.
 Trace _mapTrace(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified = false,
-    SyncPackageResolver packageResolver,
-    sdkRoot,
-    packageRoot}) {
+    {bool minified = false, SyncPackageResolver packageResolver, Uri sdkRoot}) {
   return Trace.from(mapStackTrace(sourceMap, stackTrace,
-      minified: minified,
-      packageResolver: packageResolver,
-      sdkRoot: sdkRoot,
-      // ignore: deprecated_member_use_from_same_package
-      packageRoot: packageRoot));
+      minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot));
 }
 
 /// Like [mapStackTrace], but is guaranteed to return a [Chain] so it can be
 /// inspected.
 Chain _mapChain(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified = false,
-    SyncPackageResolver packageResolver,
-    sdkRoot,
-    packageRoot}) {
+    {bool minified = false, SyncPackageResolver packageResolver, Uri sdkRoot}) {
   return Chain.forTrace(mapStackTrace(sourceMap, stackTrace,
-      minified: minified,
-      packageResolver: packageResolver,
-      sdkRoot: sdkRoot,
-      // ignore: deprecated_member_use_from_same_package
-      packageRoot: packageRoot));
+      minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot));
 }
 
 /// Runs the mapper's prettification logic on [member] and returns the result.
