Android: allow libnos to link with different datagram implementations

This removes the hard linking to the Citadel implementation.

Change-Id: I1a3ee719ad73351294744fbdeb0373bf4590903c
diff --git a/Android.bp b/Android.bp
index 2f59f5d..29289da 100644
--- a/Android.bp
+++ b/Android.bp
@@ -37,10 +37,8 @@
         "-Wno-extended-offsetof",
         "-Wno-unused-parameter",
     ],
-    header_libs: [
-        "nos_headers",
-        "libnos_headers",
-    ],
+    header_libs: ["nos_headers"],
+    shared_libs: ["libnos"]
 }
 
 cc_defaults {
diff --git a/libnos/Android.bp b/libnos/Android.bp
index cfbc1e3..3435daf 100644
--- a/libnos/Android.bp
+++ b/libnos/Android.bp
@@ -19,34 +19,42 @@
     "test",
 ]
 
-cc_library_headers {
-    name: "libnos_headers",
-    defaults: ["nos_shared_cc_defaults"],
-    header_libs: ["libnos_datagram_headers"],
-    export_include_dirs: ["include"],
-    export_header_lib_headers: ["libnos_datagram_headers"],
-}
-
 cc_library {
     name: "libnos",
     srcs: [
         "debug.cpp",
-        "NuggetClient.cpp",
     ],
     defaults: ["nos_shared_cc_defaults"],
-    header_libs: [
-        "nos_headers",
-        "libnos_headers",
-    ],
-    shared_libs: [
-        "libnos_datagram",
-        "libnos_transport",
-
-        // TODO: find a way to let each platform link in a datagram different
-        // datagram implementation to resolce the `nos_device_open()`
-        // dependency from NuggetClient
-        "libnos_datagram_citadel",
-    ],
-    export_header_lib_headers: ["libnos_headers"],
+    header_libs: ["nos_headers"],
+    shared_libs: ["libnos_datagram"],
+    export_include_dirs: ["include"],
     export_shared_lib_headers: ["libnos_datagram"],
 }
+
+// This part of libnos must be linked with the target's implementation of
+// libnos_datagram. A library should be created for this such as:
+//
+// cc_library {
+//     name: "libnos_client_xxx",
+//     srcs: [":libnos_client"],
+//     defaults: ["libnos_client_defaults"],
+//     shared_libs: ["libnos_datagram_xxx"],
+// }
+//
+// Components that directly use `NuggetClient` must link against it. Other
+// components should be written against `NuggetClientInterface` and can simply
+// link against `libnos`.
+
+filegroup {
+    name: "libnos_client",
+    srcs: ["NuggetClient.cpp"],
+}
+
+cc_defaults {
+    name: "libnos_client_defaults",
+    header_libs: ["nos_headers"],
+    shared_libs: [
+        "libnos",
+        "libnos_transport",
+    ],
+}
diff --git a/libnos/test/Android.bp b/libnos/test/Android.bp
index ebabb9e..2a3654a 100644
--- a/libnos/test/Android.bp
+++ b/libnos/test/Android.bp
@@ -17,7 +17,7 @@
 cc_test_library {
     name: "libnos_mock",
     defaults: ["nos_shared_cc_defaults"],
-    header_libs: ["libnos_headers"],
+    shared_libs: ["libnos"],
     export_include_dirs: ["include"],
-    export_header_lib_headers: ["libnos_headers"],
+    export_shared_lib_headers: ["libnos"],
 }
diff --git a/libnos_datagram/Android.bp b/libnos_datagram/Android.bp
index bd38e68..9f4a1c9 100644
--- a/libnos_datagram/Android.bp
+++ b/libnos_datagram/Android.bp
@@ -14,15 +14,8 @@
 // limitations under the License.
 //
 
-cc_library_headers {
-    name: "libnos_datagram_headers",
-    defaults: ["nos_shared_cc_defaults"],
-    export_include_dirs: ["include"],
-}
-
 cc_library {
     name: "libnos_datagram",
     defaults: ["nos_shared_cc_defaults"],
-    header_libs: ["libnos_datagram_headers"],
-    export_header_lib_headers: ["libnos_datagram_headers"],
+    export_include_dirs: ["include"],
 }