diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart
index e50d449..b474f4a 100644
--- a/dev/tools/dartdoc.dart
+++ b/dev/tools/dartdoc.dart
@@ -10,6 +10,12 @@
 import 'package:path/path.dart' as path;
 import 'update_versions.dart';
 
+/// Whether to report all error messages (true) or attempt to filter out some
+/// known false positives (false).
+///
+/// Set this to false locally if you want to address Flutter-specific issues.
+const bool kVerbose = true; // please leave this as true on Travis
+
 const String kDocRoot = 'dev/docs/doc';
 
 /// This script expects to run with the cwd as the root of the flutter repo. It
@@ -68,8 +74,8 @@
       'FLUTTER_ROOT': Directory.current.path,
     },
   );
-  printStream(process.stdout);
-  printStream(process.stderr);
+  printStream(process.stdout, prefix: 'pub:stdout: ');
+  printStream(process.stderr, prefix: 'pub:stderr: ');
   final int code = await process.exitCode;
   if (code != 0)
     exit(code);
@@ -94,8 +100,12 @@
     '--favicon=favicon.ico',
     '--use-categories',
     '--category-order', 'flutter,Dart Core,flutter_test,flutter_driver',
+    '--show-warnings',
+    '--auto-include-dependencies',
   ];
 
+  // Explicitly list all the packages in //flutter/packages/* that are
+  // not listed 'nodoc' in their pubspec.yaml.
   for (String libraryRef in libraryRefs(diskPath: true)) {
     args.add('--include-external');
     args.add(libraryRef);
@@ -106,8 +116,18 @@
     args,
     workingDirectory: 'dev/docs',
   );
-  printStream(process.stdout);
-  printStream(process.stderr);
+  printStream(process.stdout, prefix: 'dartdoc:stdout: ',
+    filter: kVerbose ? const <Pattern>[] : <Pattern>[
+      new RegExp(r'^generating docs for library '), // unnecessary verbosity
+      new RegExp(r'^pars'), // unnecessary verbosity
+    ],
+  );
+  printStream(process.stderr, prefix: 'dartdoc:stderr: ',
+    filter: kVerbose ? const <Pattern>[] : <Pattern>[
+      new RegExp(r'^ warning: generic type handled as HTML:'), // https://github.com/dart-lang/dartdoc/issues/1475
+      new RegExp(r'^ warning: .+: \(.+/\.pub-cache/hosted/pub.dartlang.org/.+\)'), // packages outside our control
+    ],
+  );
   final int exitCode = await process.exitCode;
 
   if (exitCode != 0)
@@ -194,15 +214,17 @@
 void addHtmlBaseToIndex() {
   final File indexFile = new File('$kDocRoot/index.html');
   String indexContents = indexFile.readAsStringSync();
-  indexContents = indexContents.replaceFirst('</title>\n',
-    '</title>\n  <base href="./flutter/">\n');
+  indexContents = indexContents.replaceFirst(
+    '</title>\n',
+    '</title>\n  <base href="./flutter/">\n',
+  );
   indexContents = indexContents.replaceAll(
     'href="Android/Android-library.html"',
-    'href="https://docs.flutter.io/javadoc/"'
+    'href="/javadoc/"',
   );
   indexContents = indexContents.replaceAll(
       'href="iOS/iOS-library.html"',
-      'href="https://docs.flutter.io/objcdoc/"'
+      'href="/objcdoc/"',
   );
 
   indexFile.writeAsStringSync(indexContents);
@@ -257,9 +279,14 @@
   }
 }
 
-void printStream(Stream<List<int>> stream) {
+void printStream(Stream<List<int>> stream, { String prefix: '', List<Pattern> filter: const <Pattern>[] }) {
+  assert(prefix != null);
+  assert(filter != null);
   stream
     .transform(UTF8.decoder)
     .transform(const LineSplitter())
-    .listen(print);
+    .listen((String line) {
+      if (!filter.any((Pattern pattern) => line.contains(pattern)))
+        print('$prefix$line'.trim());
+    });
 }
diff --git a/dev/tools/java_and_objc_doc.dart b/dev/tools/java_and_objc_doc.dart
index f02f9d7..0998678 100644
--- a/dev/tools/java_and_objc_doc.dart
+++ b/dev/tools/java_and_objc_doc.dart
@@ -13,21 +13,16 @@
 /// This script downloads an archive of Javadoc and objc doc for the engine from
 /// the artifact store and extracts them to the location used for Dartdoc.
 Future<Null> main(List<String> args) async {
-  final String engineVersion =
-      new File('bin/internal/engine.version').readAsStringSync().trim();
+  final String engineVersion = new File('bin/internal/engine.version').readAsStringSync().trim();
 
-  final String javadocUrl =
-      'https://storage.googleapis.com/flutter_infra/flutter/$engineVersion/android-javadoc.zip';
+  final String javadocUrl = 'https://storage.googleapis.com/flutter_infra/flutter/$engineVersion/android-javadoc.zip';
   generateDocs(javadocUrl, 'javadoc', 'io/flutter/view/FlutterView.html');
 
-  final String objcdocUrl =
-      'https://storage.googleapis.com/flutter_infra/flutter/$engineVersion/ios-objcdoc.zip';
-  generateDocs(
-      objcdocUrl, 'objcdoc', 'Classes/FlutterViewController.html');
+  final String objcdocUrl = 'https://storage.googleapis.com/flutter_infra/flutter/$engineVersion/ios-objcdoc.zip';
+  generateDocs(objcdocUrl, 'objcdoc', 'Classes/FlutterViewController.html');
 }
 
-Future<Null> generateDocs(
-    final String url, String docName, String checkFile) async {
+Future<Null> generateDocs(String url, String docName, String checkFile) async {
   final http.Response response = await http.get(url);
 
   final Archive archive = new ZipDecoder().decodeBytes(response.bodyBytes);
