diff --git a/.gitignore b/.gitignore
index ef538c9..1a5520c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,8 @@
 /third_party/junit/src/
 /third_party/mockito/src/
 /third_party/mojo/src/mojo/public/
+/third_party/mojo_devtools/
+/third_party/pyelftools/
 /third_party/requests/src/
 /third_party/requests/src/
 /third_party/robolectric/lib/
diff --git a/DEPS b/DEPS
index 1da218b..338bb40 100644
--- a/DEPS
+++ b/DEPS
@@ -65,10 +65,16 @@
      Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '7c81740601355556e630da515b74d889ba2f8d08',
 
   'src/third_party/mojo/src/mojo/public':
-     Var('chromium_git') + '/external/github.com/domokit/mojo_sdk.git' + '@' + 'ca51a4809257c8518f224ef5af982e136db1dda0',
+     Var('chromium_git') + '/external/github.com/domokit/mojo_sdk.git' + '@' + '8502ec3f82fdb0c4068353b038410b49413616e5',
 
   'src/tools/grit':
     Var('chromium_git') + '/external/grit-i18n.git' + '@' + 'c1b1591a05209c1ad467e845ba8543c22f9072af', # from svn revision 189
+
+  'src/third_party/pyelftools':
+    Var('chromium_git') + '/chromiumos/third_party/pyelftools.git' + '@' + '19b3e610c86fcadb837d252c794cb5e8008826ae',
+
+  'src/third_party/mojo_devtools':
+    'https://github.com/domokit/devtools.git' + '@' + 'b979a23b899ea5e5ed933cc15ef445835787d9c6',
 }
 
 deps_os = {
diff --git a/claude.py b/claude.py
index 967baa6..e549742 100755
--- a/claude.py
+++ b/claude.py
@@ -119,7 +119,8 @@
   if args.dry_run:
     base_command.append('--dry-run')
   _logger.info('Uploading network service binary')
-  retcode = subprocess.call(base_command + ['network_service'])
+  retcode = subprocess.call(base_command + ['--upload-symbols',
+                                            'network_service'])
   if retcode != 0:
     return retcode
   _logger.info('Uploading network service apptests binary')
diff --git a/mojo/services/network/BUILD.gn b/mojo/services/network/BUILD.gn
index 1bdbd26..9976f8c 100644
--- a/mojo/services/network/BUILD.gn
+++ b/mojo/services/network/BUILD.gn
@@ -5,18 +5,8 @@
 import("//third_party/mojo/src/mojo/public/mojo_application.gni")
 
 if (is_android) {
-  import("//build/config/android/rules.gni")
-
-  java_library_path = "$target_out_dir/java_library.dex.jar"
-
   mojo_android_application("network") {
     output_name = "network_service"
-    input_so = "$root_out_dir/lib.stripped/libnetwork_service.so"
-    input_dex_jar = java_library_path
-  }
-
-  shared_library("native_library") {
-    output_name = "network_service"
 
     sources = [
       "android_hooks.cc",
@@ -27,12 +17,8 @@
       "//base",
       "//net",
     ]
-  }
 
-  android_standalone_library("java_library") {
-    dex_path = java_library_path
-
-    deps = [
+    java_deps = [
       "//net/android:net_java",
     ]
   }
diff --git a/tools/upload_service.py b/tools/upload_service.py
index 84aa0d2..91ab49b 100755
--- a/tools/upload_service.py
+++ b/tools/upload_service.py
@@ -4,7 +4,9 @@
 # found in the LICENSE file.
 
 import argparse
+import glob
 import imp
+import itertools
 import os
 import subprocess
 import sys
@@ -12,6 +14,14 @@
 import time
 import zipfile
 
+sys.path.append(os.path.join(os.path.dirname(__file__),
+                             os.pardir, 'third_party', 'pyelftools'))
+import elftools.elf.elffile as elffile
+
+sys.path.append(os.path.join(os.path.dirname(__file__),
+                             os.pardir, 'third_party', 'mojo_devtools'))
+import android_gdb.signatures as signatures
+
 SERVICES = ["network_service", "network_service_apptests"]
 
 # A service does not need to expose interfaces. Those that do expose interfaces
@@ -86,6 +96,17 @@
     gsutil_cp(mojom_zip_file.name, dest, dry_run)
 
 
+def upload_symbols(binary_dir, dry_run):
+  dest_dir = "gs://mojo/symbols/"
+  symbols_dir = os.path.join(binary_dir, "symbols")
+  for name in os.listdir(symbols_dir):
+    path = os.path.join(symbols_dir, name)
+    with open(path) as f:
+      signature = signatures.get_signature(f, elffile)
+      if signature is not None:
+        dest = dest_dir + signature
+        gsutil_cp(path, dest, dry_run)
+
 def upload_binary(version_name, service, binary_dir, platform, dry_run):
   dest_dir = "gs://mojo/" + service + "/" + version_name + "/" + platform + "/"
   should_zip = service in SERVICES_WITH_ZIPPED_BINARIES
@@ -140,6 +161,9 @@
       help="Indicates that this is a build with change that is not committed. "
            "The change must be uploaded to Rietveld. The script needs to be "
            "run from the branch associated with the change.")
+  parser.add_argument(
+      "--upload-symbols", action="store_true",
+      help="Indicates that this should also upload all symbols.")
   args = parser.parse_args()
 
   if args.service not in SERVICES:
@@ -164,10 +188,14 @@
   if args.linux_x64_binary_dir:
     upload_binary(version_name, args.service, args.linux_x64_binary_dir,
                   "linux-x64", args.dry_run)
+    if args.upload_symbols:
+      upload_symbols(args.linux_x64_binary_dir, args.dry_run)
 
   if args.android_arm_binary_dir:
     upload_binary(version_name, args.service, args.android_arm_binary_dir,
                   "android-arm", args.dry_run)
+    if args.upload_symbols:
+      upload_symbols(args.android_arm_binary_dir, args.dry_run)
 
   if not args.dry_run:
     print "Uploaded artifacts for version %s" % (version_name, )
