external: allow to import external packages from <subdirectory>/external.

When the workspace is embedded in some other parent workspace,
the relative path to external/ may be <path_to_subworkspace>/external.
Allow to configure this.

Bug: 242752091
Test: manual

Change-Id: I60507c440f9900c89cb92d11ba8584f7f76ebd5c
diff --git a/workspace/external.bzl b/workspace/external.bzl
index 8964ec5..15a29f4 100644
--- a/workspace/external.bzl
+++ b/workspace/external.bzl
@@ -15,10 +15,11 @@
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
 
 def import_external_repositories(
+        workspace_root = None,
         bazel_skylib = None,
         io_abseil_py = None,
         io_bazel_stardoc = None):
-    """Import repositories in external/ that are common to Bazel builds for Android.
+    """Import repositories in `{root}/external/` that are common to Bazel builds for Android.
 
     In particular, these external projects are shared by Android platform
     repo manifest and Android kernel repo manifest.
@@ -27,27 +28,36 @@
     of repositories imported by providing them in the arguments.
 
     Args:
+        workspace_root: Root under which the `external/` directory may be found, relative
+            to the main workspace.
+
+            When calling `import_external_repositories` in the main workspace's
+            `WORKSPACE` file, leave `root = None`.
         bazel_skylib: If `True`, load `bazel_skylib`.
         io_abseil_py: If `True`, load `io_abseil_py`.
         io_bazel_stardoc: If `True`, load `io_bazel_stardoc`.
     """
+    workspace_prefix = workspace_root or ""
+    if workspace_prefix:
+        workspace_prefix += "/"
+
     if bazel_skylib:
         maybe(
             repo_rule = native.local_repository,
             name = "bazel_skylib",
-            path = "external/bazel-skylib",
+            path = "{}external/bazel-skylib".format(workspace_prefix),
         )
 
     if io_abseil_py:
         maybe(
             repo_rule = native.local_repository,
             name = "io_abseil_py",
-            path = "external/python/absl-py",
+            path = "{}external/python/absl-py".format(workspace_prefix),
         )
 
     if io_bazel_stardoc:
         maybe(
             repo_rule = native.local_repository,
             name = "io_bazel_stardoc",
-            path = "external/stardoc",
+            path = "{}external/stardoc".format(workspace_prefix),
         )