From ae01e9b37e530337b11098b781371d1197336f8e Mon Sep 17 00:00:00 2001
From: William Escande <wescande@google.com>
Date: Thu, 10 Mar 2022 12:48:12 +0000
Subject: [PATCH] Revert^2 "check check, is anyone there? *static*"

check check, is anyone there? *static*

* statically link libbluetooth into libbluetooth_jni
* clean up some build rule defaults
* statically link libchrome
* stop using whole static libs, to increase ability to prune unused code
* remove required libbluetooth
* statically link libstatlog_bt in a few location

:party:
:party:

Still some issue on local test. I suppose they should only be run in
the test suite. Test are:
* bluetooth-test-audio-hal-interface
* bluetooth_flatbuffer_bundler_test
* net_test_rfcomm_suite
* net_test_stack_rfcomm

Bug: 220805766
Test: compile, verify BT boots & basic use cases work
Testeted with all cc_test in packages/modules/Bluetooth:
`atest $(grep -w cc_test -A 1 $(find packages/modules/Bluetooth -name Android.bp) | grep name | cut -d '"' -f 2)`
Test: m bluetoothtbd
Test: atest bluetoothtbd_test
Test: m libstatslog_bt bt_headless libbluetooth_gd libbtif libbt-common bluetooth_stack_with_facade bluetooth_test_gd_unit bluetooth_gd_fuzz_test libbt_audio_hal_a2dp_encoding_fuzzer

Ignore-AOSP-First: apex changes not in AOSP yet

e634b3db677ea457101ede133d7fc8a31450a900

Change-Id: I99ea709fe591ca362208547051d7fd5810ed42ed
---
 android/app/Android.bp                        |  22 ++-
 .../app/jni/com_android_bluetooth_a2dp.cpp    |   2 -
 .../jni/com_android_bluetooth_a2dp_sink.cpp   |   2 -
 ...com_android_bluetooth_avrcp_controller.cpp |   2 -
 ...oid_bluetooth_btservice_AdapterService.cpp |   8 +
 ...android_bluetooth_csip_set_coordinator.cpp |   1 -
 .../app/jni/com_android_bluetooth_gatt.cpp    |   2 -
 .../jni/com_android_bluetooth_hap_client.cpp  |   2 -
 .../jni/com_android_bluetooth_hearing_aid.cpp |   2 -
 android/app/jni/com_android_bluetooth_hfp.cpp |   2 -
 .../jni/com_android_bluetooth_hfpclient.cpp   |   1 -
 .../jni/com_android_bluetooth_hid_device.cpp  |   2 -
 .../jni/com_android_bluetooth_hid_host.cpp    |   2 -
 .../jni/com_android_bluetooth_le_audio.cpp    |   2 -
 android/app/jni/com_android_bluetooth_pan.cpp |   2 -
 android/app/jni/com_android_bluetooth_sdp.cpp |   2 -
 android/app/jni/com_android_bluetooth_vc.cpp  |   2 -
 apex/Android.bp                               |   3 -
 system/audio_hal_interface/fuzzer/Android.bp  |   3 +
 system/bta/Android.bp                         |  22 +--
 system/btcore/Android.bp                      |  20 +-
 system/btcore/fuzzer/Android.bp               |   8 +-
 system/btif/Android.bp                        |  67 +++----
 system/build/Android.bp                       | 175 +++++++++++++++++-
 system/common/Android.bp                      |  11 +-
 system/device/Android.bp                      |   7 +-
 system/gd/Android.bp                          |  58 ++++--
 system/gd/common/byte_array_test.cc           |   4 +-
 system/gd/common/circular_buffer_test.cc      |   2 +-
 system/gd/common/list_map_test.cc             |   6 +-
 system/gd/common/lru_cache_test.cc            |  20 +-
 system/gd/common/multi_priority_queue_test.cc |   2 +-
 system/gd/common/sync_map_count_test.cc       |  40 ++--
 system/gd/hal/hci_hal_host_test.cc            |   2 +-
 system/gd/hci/class_of_device_unittest.cc     |   4 +-
 system/gd/hci/hci_packets_test.cc             |  34 ++--
 system/gd/l2cap/l2cap_packet_test.cc          |  10 +-
 system/gd/os/linux_generic/queue_unittest.cc  |   6 +-
 .../wakelock_manager_unittest.cc              |  10 +-
 .../packet/fragmenting_inserter_unittest.cc   |  14 +-
 system/gd/packet/packet_view_unittest.cc      |  12 +-
 .../parser/test/generated_packet_test.cc      |   6 +-
 system/gd/rust/shim/Android.bp                |  25 +--
 system/gd/rust/topshim/Android.bp             |   8 +-
 system/gd/rust/topshim/btav/btav_shim.cc      |   2 +-
 system/gd/rust/topshim/btif/btif_shim.cc      |   2 +-
 system/gd/rust/topshim/facade/Android.bp      |  19 +-
 system/gd/storage/config_cache_helper_test.cc |   4 +-
 system/hci/Android.bp                         |  72 +------
 system/include/Android.bp                     |   2 +-
 system/main/Android.bp                        |  80 +-------
 system/osi/Android.bp                         |  12 +-
 system/packet/Android.bp                      |   8 +-
 system/packet/tests/fuzzers/Android.bp        |  50 +++++
 system/profile/avrcp/Android.bp               |  16 +-
 system/profile/sdp/Android.bp                 |   2 +
 system/service/Android.bp                     |  90 ++++++++-
 system/service/hal/bluetooth_interface.cc     |  11 ++
 system/stack/Android.bp                       |  35 ++--
 system/test/headless/Android.bp               |  29 ++-
 system/test/rootcanal/Android.bp              |  12 +-
 system/test/suite/Android.bp                  | 128 +++++++++----
 system/test/suite/adapter/bluetooth_test.cc   |  10 +-
 system/types/Android.bp                       |   4 +
 64 files changed, 733 insertions(+), 492 deletions(-)

diff --git a/android/app/Android.bp b/android/app/Android.bp
index b2573c265f8..c729489f4da 100644
--- a/android/app/Android.bp
+++ b/android/app/Android.bp
@@ -52,6 +52,7 @@ java_library {
 
 cc_library_shared {
     name: "libbluetooth_jni",
+    defaults: ["fluoride_full_defaults"],
     srcs: ["jni/**/*.cpp"],
     header_libs: [
         "jni_headers",
@@ -60,14 +61,9 @@ cc_library_shared {
     include_dirs: [
         "packages/modules/Bluetooth/system/types",
     ],
-    shared_libs: [
-        "libbase",
-        "libchrome",
-        "liblog",
-        "libnativehelper",
-    ],
     static_libs: [
         "libbluetooth-types",
+        "libbluetooth",
     ],
     cflags: [
         "-Wall",
@@ -145,7 +141,19 @@ android_app {
     optimize: {
         enabled: false,
     },
-    required: ["libbluetooth"],
+    required: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
+        "android.hardware.bluetooth.audio-V1-ndk",
+        "audio_set_configurations_bfbs",
+        "audio_set_configurations_json",
+        "audio_set_scenarios_bfbs",
+        "audio_set_scenarios_json",
+        "bt_did.conf",
+        "bt_stack.conf",
+    ],
     apex_available: [
         "com.android.bluetooth",
     ],
diff --git a/android/app/jni/com_android_bluetooth_a2dp.cpp b/android/app/jni/com_android_bluetooth_a2dp.cpp
index abc8830b518..3f7b1634798 100644
--- a/android/app/jni/com_android_bluetooth_a2dp.cpp
+++ b/android/app/jni/com_android_bluetooth_a2dp.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothA2dpServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_av.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_a2dp_sink.cpp b/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
index a74b18d6fba..6b2cbbfbe06 100644
--- a/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
+++ b/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothA2dpSinkServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_av.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_avrcp_controller.cpp b/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
index 86bf0687913..316e1d0ac17 100755
--- a/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
+++ b/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothAvrcpControllerJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_rc.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp b/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
index 3c5bcdb276a..e761eb638d2 100644
--- a/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
+++ b/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
@@ -36,6 +36,9 @@
 #include <pthread.h>
 
 using bluetooth::Uuid;
+#ifndef DYNAMIC_LOAD_BLUETOOTH
+extern bt_interface_t bluetoothInterface;
+#endif
 
 namespace android {
 // Both
@@ -846,6 +849,10 @@ static bt_os_callouts_t sBluetoothOsCallouts = {
 };
 
 int hal_util_load_bt_library(const bt_interface_t** interface) {
+#ifndef DYNAMIC_LOAD_BLUETOOTH
+  *interface = &bluetoothInterface;
+  return 0;
+#else
   const char* sym = BLUETOOTH_INTERFACE_STRING;
   bt_interface_t* itf = nullptr;
 
@@ -875,6 +882,7 @@ error:
   if (handle) dlclose(handle);
 
   return -EINVAL;
+#endif
 }
 
 static void classInitNative(JNIEnv* env, jclass clazz) {
diff --git a/android/app/jni/com_android_bluetooth_csip_set_coordinator.cpp b/android/app/jni/com_android_bluetooth_csip_set_coordinator.cpp
index 45ebe6e807e..431247a9443 100644
--- a/android/app/jni/com_android_bluetooth_csip_set_coordinator.cpp
+++ b/android/app/jni/com_android_bluetooth_csip_set_coordinator.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 #define LOG_TAG "BluetoothCsipSetCoordinatorJni"
-#define LOG_NDEBUG 0
 #include <string.h>
 
 #include <shared_mutex>
diff --git a/android/app/jni/com_android_bluetooth_gatt.cpp b/android/app/jni/com_android_bluetooth_gatt.cpp
index a9802acdb95..cb360a80bb6 100644
--- a/android/app/jni/com_android_bluetooth_gatt.cpp
+++ b/android/app/jni/com_android_bluetooth_gatt.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BtGatt.JNI"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_gatt.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_hap_client.cpp b/android/app/jni/com_android_bluetooth_hap_client.cpp
index e94cb59f768..1d77a27eb33 100644
--- a/android/app/jni/com_android_bluetooth_hap_client.cpp
+++ b/android/app/jni/com_android_bluetooth_hap_client.cpp
@@ -17,8 +17,6 @@
 
 #define LOG_TAG "BluetoothHapClientJni"
 
-#define LOG_NDEBUG 0
-
 #include <string.h>
 
 #include <shared_mutex>
diff --git a/android/app/jni/com_android_bluetooth_hearing_aid.cpp b/android/app/jni/com_android_bluetooth_hearing_aid.cpp
index e359faf8a4b..5e2f88e680a 100644
--- a/android/app/jni/com_android_bluetooth_hearing_aid.cpp
+++ b/android/app/jni/com_android_bluetooth_hearing_aid.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothHearingAidServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "base/logging.h"
 #include "com_android_bluetooth.h"
 #include "hardware/bt_hearing_aid.h"
diff --git a/android/app/jni/com_android_bluetooth_hfp.cpp b/android/app/jni/com_android_bluetooth_hfp.cpp
index 813bdd0818b..fffaf8ccb48 100644
--- a/android/app/jni/com_android_bluetooth_hfp.cpp
+++ b/android/app/jni/com_android_bluetooth_hfp.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothHeadsetServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bluetooth_headset_callbacks.h"
 #include "hardware/bluetooth_headset_interface.h"
diff --git a/android/app/jni/com_android_bluetooth_hfpclient.cpp b/android/app/jni/com_android_bluetooth_hfpclient.cpp
index 763885e3d3e..c3e0c9842b5 100644
--- a/android/app/jni/com_android_bluetooth_hfpclient.cpp
+++ b/android/app/jni/com_android_bluetooth_hfpclient.cpp
@@ -16,7 +16,6 @@
  */
 
 #define LOG_TAG "BluetoothHeadsetClientServiceJni"
-#define LOG_NDEBUG 0
 
 #include "com_android_bluetooth.h"
 #include "hardware/bt_hf_client.h"
diff --git a/android/app/jni/com_android_bluetooth_hid_device.cpp b/android/app/jni/com_android_bluetooth_hid_device.cpp
index 17b6e97c015..2146222acdb 100644
--- a/android/app/jni/com_android_bluetooth_hid_device.cpp
+++ b/android/app/jni/com_android_bluetooth_hid_device.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothHidDeviceServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_hd.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_hid_host.cpp b/android/app/jni/com_android_bluetooth_hid_host.cpp
index 074e39d5b02..7a164233bc1 100644
--- a/android/app/jni/com_android_bluetooth_hid_host.cpp
+++ b/android/app/jni/com_android_bluetooth_hid_host.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothHidHostServiceJni"
 
-#define LOG_NDEBUG 1
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_hh.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_le_audio.cpp b/android/app/jni/com_android_bluetooth_le_audio.cpp
index de215273324..ae0b2c4bbd6 100644
--- a/android/app/jni/com_android_bluetooth_le_audio.cpp
+++ b/android/app/jni/com_android_bluetooth_le_audio.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothLeAudioServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include <hardware/bluetooth.h>
 
 #include <array>
diff --git a/android/app/jni/com_android_bluetooth_pan.cpp b/android/app/jni/com_android_bluetooth_pan.cpp
index b02ae9f9b15..84d7b1c78b0 100644
--- a/android/app/jni/com_android_bluetooth_pan.cpp
+++ b/android/app/jni/com_android_bluetooth_pan.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothPanServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_pan.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_sdp.cpp b/android/app/jni/com_android_bluetooth_sdp.cpp
index bba109ac456..ded546a05d8 100755
--- a/android/app/jni/com_android_bluetooth_sdp.cpp
+++ b/android/app/jni/com_android_bluetooth_sdp.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "BluetoothSdpJni"
 
-#define LOG_NDEBUG 0
-
 #include "com_android_bluetooth.h"
 #include "hardware/bt_sdp.h"
 #include "utils/Log.h"
diff --git a/android/app/jni/com_android_bluetooth_vc.cpp b/android/app/jni/com_android_bluetooth_vc.cpp
index 22baaeaa7fb..cc1e296e55a 100644
--- a/android/app/jni/com_android_bluetooth_vc.cpp
+++ b/android/app/jni/com_android_bluetooth_vc.cpp
@@ -17,8 +17,6 @@
 
 #define LOG_TAG "BluetoothVolumeControlServiceJni"
 
-#define LOG_NDEBUG 0
-
 #include <string.h>
 #include <shared_mutex>
 
diff --git a/apex/Android.bp b/apex/Android.bp
index 5315af77fc3..e77e2257113 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -16,9 +16,6 @@ apex_defaults {
     multilib: {
         first: {
             // Extractor process runs only with the primary ABI.
-            native_shared_libs: [
-                "libbluetooth",
-            ],
             jni_libs: [
                 "libbluetooth_jni",
             ],
diff --git a/system/audio_hal_interface/fuzzer/Android.bp b/system/audio_hal_interface/fuzzer/Android.bp
index f1724af3d49..704624f32e5 100644
--- a/system/audio_hal_interface/fuzzer/Android.bp
+++ b/system/audio_hal_interface/fuzzer/Android.bp
@@ -59,6 +59,8 @@ cc_defaults {
         "libbtcore",
         "libbt-bta",
         "libbt-hci",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
         "libjsoncpp",
         "libbt-utils",
         "libbtdevice",
@@ -84,6 +86,7 @@ cc_defaults {
         "libprotobuf-cpp-lite",
         "libbt-audio-hal-interface",
         "libbluetooth_rust_interop",
+        "libaudio-a2dp-hw-utils",
     ],
     include_dirs: [
         "packages/modules/Bluetooth/system",
diff --git a/system/bta/Android.bp b/system/bta/Android.bp
index b022934b391..0b48c77459b 100644
--- a/system/bta/Android.bp
+++ b/system/bta/Android.bp
@@ -9,7 +9,7 @@ package {
 
 cc_defaults {
     name: "fluoride_bta_defaults",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     local_include_dirs: [
         "include",
         "sys",
@@ -31,9 +31,6 @@ cc_defaults {
         "packages/modules/Bluetooth/system/utils/include",
         "packages/modules/Bluetooth/system/gd/rust/shim",
     ],
-    shared_libs: [
-        "libcutils",
-    ],
     header_libs: ["libbluetooth_headers"],
     cflags: ["-DBUILDCFG"],
 }
@@ -142,21 +139,8 @@ cc_library_static {
     ],
     static_libs: [
         "avrcp-target-service",
-        "libflatbuffers-cpp",
         "lib-bt-packets",
-        "libbt-platform-protos-lite",
     ],
-    shared_libs: [
-        "android.hardware.bluetooth.audio@2.0",
-        "android.hardware.bluetooth.audio@2.1",
-    ],
-    target: {
-        android: {
-            shared_libs: [
-                "android.hardware.bluetooth.audio-V1-ndk",
-            ],
-        },
-    },
     generated_headers: [
         "LeAudioSetConfigSchemas_h",
     ],
@@ -180,6 +164,8 @@ cc_test {
         "test/gatt/database_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
         "libcrypto",
         "liblog",
         "libprotobuf-cpp-lite",
@@ -256,7 +242,6 @@ cc_test {
     shared_libs: [
         "libbase",
         "libcrypto",
-        "libflatbuffers-cpp",
         "liblog",
         "libprotobuf-cpp-lite",
     ],
@@ -265,6 +250,7 @@ cc_test {
         "libbt-common",
         "libbt-protos-lite",
         "libbtcore",
+        "libflatbuffers-cpp",
         "libgmock",
     ],
     sanitize: {
diff --git a/system/btcore/Android.bp b/system/btcore/Android.bp
index dd9b1ba7aa0..93f75635ba5 100644
--- a/system/btcore/Android.bp
+++ b/system/btcore/Android.bp
@@ -10,7 +10,7 @@ package {
 
 cc_defaults {
     name: "libbtcore_defaults",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     local_include_dirs: ["include"],
     include_dirs: [
         "packages/modules/Bluetooth/system",
@@ -23,15 +23,8 @@ cc_defaults {
         "src/osi_module.cc",
         "src/property.cc",
     ],
-    shared_libs: [
-        "liblog",
-    ],
     header_libs: ["libbluetooth_headers"],
     host_supported: true,
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.bluetooth",
-    ],
     target: {
         linux_glibc: {
             cflags: ["-D_GNU_SOURCE"],
@@ -49,11 +42,6 @@ cc_library_static {
     min_sdk_version: "Tiramisu"
 }
 
-cc_library_static {
-    name: "libbtcore-static",
-    defaults: ["libbtcore_defaults"],
-}
-
 cc_library_headers {
     name: "libbtcore_headers",
     defaults: ["libchrome_support_defaults"],
@@ -81,12 +69,14 @@ cc_test {
         "test/property_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "liblog",
     ],
     static_libs: [
-        "libbtcore",
-        "libosi-AllocationTestHarness",
         "libosi",
+        "libosi-AllocationTestHarness",
+        "libbtcore",
     ],
     host_supported: true,
     test_options: {
diff --git a/system/btcore/fuzzer/Android.bp b/system/btcore/fuzzer/Android.bp
index 7368d715a2e..0cc34294777 100644
--- a/system/btcore/fuzzer/Android.bp
+++ b/system/btcore/fuzzer/Android.bp
@@ -26,11 +26,10 @@ package {
 cc_defaults {
     name: "btcore_fuzz_defaults",
     shared_libs: [
-        "libcrypto",
-        "libstatslog_bt",
-        "libbluetooth",
         "android.hardware.bluetooth@1.0",
         "android.hardware.bluetooth@1.1",
+        "libcrypto",
+        "libstatslog_bt",
     ],
     static_libs: [
         "libosi",
@@ -48,6 +47,9 @@ cc_defaults {
         "libbluetooth-protos",
         "libprotobuf-cpp-lite",
         "libbluetooth_rust_interop",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     include_dirs: [
         "packages/modules/Bluetooth/system",
diff --git a/system/btif/Android.bp b/system/btif/Android.bp
index 48d1863a9f9..449c7a862cd 100644
--- a/system/btif/Android.bp
+++ b/system/btif/Android.bp
@@ -93,7 +93,7 @@ genrule {
 // libbtif static library for target
 cc_defaults {
     name: "libbtif_defaults",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     include_dirs: btifCommonIncludes,
     srcs: [
         // AVRCP Target Service
@@ -160,25 +160,8 @@ cc_defaults {
         "BluetoothGeneratedDumpsysDataSchema_h",
         "BluetoothGeneratedPackets_h",
     ],
-    shared_libs: [
-        "android.hardware.bluetooth.a2dp@1.0",
-        "android.hardware.bluetooth.audio@2.0",
-        "android.hardware.bluetooth.audio@2.1",
-        "libcrypto",
-        "libflatbuffers-cpp",
-        "libhidlbase",
-        "libtinyxml2",
-        "libz",
-    ],
     target: {
         android: {
-            shared_libs: [
-                "android.hardware.bluetooth.audio-V1-ndk",
-                "libaaudio",
-                "libbinder_ndk",
-                "libfmq",
-                "libstatslog_bt",
-            ],
             srcs: ["src/btif_avrcp_audio_track.cc"],
         },
         host: {
@@ -188,9 +171,11 @@ cc_defaults {
                   ],
         },
     },
-    whole_static_libs: [
+    static_libs: [
         "avrcp-target-service",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
         "libbt-audio-hal-interface",
         "libaudio-a2dp-hw-utils",
     ],
@@ -206,11 +191,6 @@ cc_library_static {
     min_sdk_version: "Tiramisu"
 }
 
-cc_library_static {
-    name: "libbtif-static",
-    defaults: ["libbtif_defaults"],
-}
-
 // btif unit tests for target
 cc_test {
     name: "net_test_btif",
@@ -222,37 +202,38 @@ cc_test {
     ],
     header_libs: ["libbluetooth_headers"],
     shared_libs: [
-        "libaaudio",
         "android.hardware.bluetooth@1.0",
         "android.hardware.bluetooth@1.1",
-        "android.hardware.bluetooth.a2dp@1.0",
         "android.hardware.bluetooth.audio@2.0",
         "android.hardware.bluetooth.audio@2.1",
-        "android.system.suspend.control-V1-ndk",
+        "libaaudio",
         "libbinder_ndk",
+        "libcrypto",
         "libfmq",
         "libhidlbase",
         "libprotobuf-cpp-lite",
         "libprocessgroup",
-        "libcrypto",
     ],
     static_libs: [
+        "android.hardware.bluetooth.a2dp@1.0",
+        "android.system.suspend.control-V1-ndk",
+        "libbluetooth-types",
+        "libbt-audio-hal-interface",
         "libbt-bta",
-        "libbtcore",
         "libbt-common",
-        "libbt-stack",
+        "libbtcore",
+        "libbtdevice",
+        "libbt-hci",
+        "libbt-protos-lite",
         "libbt-sbc-decoder",
         "libbt-sbc-encoder",
+        "libbt-stack",
         "libbt-utils",
         "libFraunhoferAAC",
         "libg722codec",
         "liblc3",
-        "libbtdevice",
-        "libbt-hci",
-        "libudrv-uipc",
-        "libbluetooth-types",
         "libosi",
-        "libbt-protos-lite",
+        "libudrv-uipc",
    ],
     whole_static_libs: [
         "libbtif",
@@ -289,10 +270,12 @@ cc_test {
         "BluetoothGeneratedPackets_h",
     ],
     shared_libs: [
-        "libflatbuffers-cpp",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
     ],
     static_libs: [
         "libbluetooth-types",
+        "libflatbuffers-cpp",
         "libosi",
     ],
     cflags: ["-DBUILDCFG"],
@@ -363,7 +346,7 @@ cc_test {
     cflags: ["-DBUILDCFG"],
     target: {
         android: {
-            shared_libs: [
+            static_libs: [
                 "android.system.suspend.control-V1-ndk",
             ],
         },
@@ -465,12 +448,10 @@ cc_test {
       ],
       header_libs: ["libbluetooth_headers"],
       shared_libs: [
-          "android.hardware.bluetooth.a2dp@1.0",
           "android.hardware.bluetooth.audio@2.0",
           "android.hardware.bluetooth.audio@2.1",
           "libcrypto",
           "libcutils",
-          "libflatbuffers-cpp",
           "libhidlbase",
           "liblog",
           "libtinyxml2",
@@ -479,8 +460,16 @@ cc_test {
           "libbtif",
       ],
       static_libs: [
+          "android.hardware.bluetooth.a2dp@1.0",
+          "avrcp-target-service",
+          "libaudio-a2dp-hw-utils",
           "libbluetooth-types",
+          "libbt-audio-hal-interface",
           "libbtdevice",
+          "lib-bt-packets",
+          "lib-bt-packets-avrcp",
+          "lib-bt-packets-base",
+          "libflatbuffers-cpp",
           "libgmock",
           "libosi",
       ],
diff --git a/system/build/Android.bp b/system/build/Android.bp
index 70c509957f0..80ae3248294 100644
--- a/system/build/Android.bp
+++ b/system/build/Android.bp
@@ -25,7 +25,14 @@ bootstrap_go_package {
 
 fluoride_defaults {
     name: "libchrome_support_defaults",
-    shared_libs: ["libchrome"],
+    static_libs: [
+        "libchrome",
+        "libmodpb64",
+        "libevent",
+    ],
+    shared_libs: [
+      "libbase",
+    ],
     cflags: [
         "-Wall",
         "-Wextra",
@@ -35,6 +42,12 @@ fluoride_defaults {
         darwin: {
             enabled: false,
         },
+        android: {
+            shared_libs: [
+                "libcutils",
+                "liblog",
+            ],
+        }
     },
 }
 
@@ -93,6 +106,9 @@ fluoride_defaults {
         "libbluetooth-types",
         "libbt-platform-protos-lite",
         "libbluetooth_rust_interop",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
         "libcutils",
     ],
     shared_libs: [
@@ -102,6 +118,147 @@ fluoride_defaults {
     min_sdk_version: "current",
 }
 
+fluoride_defaults {
+    name: "fluoride_test_prod_shared_defaults",
+    defaults: ["fluoride_defaults"],
+}
+
+fluoride_defaults {
+    name: "fluoride_test_defaults",
+    defaults: ["fluoride_test_prod_shared_defaults"],
+    host_supported: true,
+    shared_libs: [
+        "libcrypto",
+        "liblog",
+        "libprotobuf-cpp-lite",
+    ],
+    static_libs: [
+        "libbt-common",
+        "libbt-protos-lite",
+        "libosi",
+        "libosi-AlarmTestHarness",
+        "libosi-AllocationTestHarness",
+        "libcutils",
+        "libgmock",
+    ],
+    sanitize: {
+        address: true,
+        cfi: true,
+        misc_undefined: ["bounds"],
+    },
+}
+
+fluoride_defaults {
+    name: "fluoride_unit_test_defaults",
+    defaults: ["fluoride_test_defaults"],
+    test_options: {
+        unit_test: true,
+    },
+}
+
+fluoride_defaults {
+    name: "fluoride_basic_defaults",
+    defaults: ["fluoride_test_prod_shared_defaults", "libchrome_support_defaults"],
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.bluetooth",
+    ],
+    shared_libs: [
+        "libcrypto",
+        "libbase",
+        "liblog",
+        "libnativehelper",
+    ],
+    static_libs: [
+        "android.hardware.bluetooth.a2dp@1.0",
+        "libflatbuffers-cpp",
+        "libbt-sbc-decoder",
+        "libbt-sbc-encoder",
+        "libFraunhoferAAC",
+        "libg722codec",
+        "liblc3",
+        "libudrv-uipc",
+        "libprotobuf-cpp-lite",
+        "libbluetooth_gd",
+        "libbluetooth-dumpsys",
+        "libbluetooth_rust_interop",
+        "libbluetooth-types",
+        "libbt-platform-protos-lite",
+        "libbt-protos-lite",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
+        "libstatslog_bt",
+    ],
+    target: {
+        android: {
+            shared_libs: [
+                "android.hardware.bluetooth.audio@2.0",
+                "android.hardware.bluetooth.audio@2.1",
+                "android.hardware.bluetooth.audio-V1-ndk",
+                "android.hardware.bluetooth@1.0",
+                "android.hardware.bluetooth@1.1",
+                "android.system.suspend-V1-ndk",
+                "libaaudio",
+                "libbinder_ndk",
+                "libcutils",
+                "libhidlbase",
+                "libfmq",
+                "libprocessgroup",
+                "libtinyxml2",
+                "libutils",
+                "libz",
+            ],
+            static_libs: [
+                "android.system.suspend.control-V1-ndk",
+            ],
+            required: [
+                "libldacBT_enc",
+                "libldacBT_abr",
+            ],
+        },
+        linux_glibc: {
+            shared_libs: [
+                "android.hardware.bluetooth.audio@2.0",
+                "android.hardware.bluetooth.audio@2.1",
+                "android.hardware.bluetooth@1.0",
+                "android.hardware.bluetooth@1.1",
+                "libbinder_ndk",
+                "libcutils",
+                "libhidlbase",
+                "libfmq",
+                "libprocessgroup",
+                "libtinyxml2",
+                "libutils",
+                "libz",
+            ],
+        },
+    },
+}
+
+fluoride_defaults {
+    name: "fluoride_full_defaults",
+    defaults: ["fluoride_basic_defaults"],
+    static_libs: [
+        "libbte",
+        "libbt-bta",
+        "libbt-common",
+        "libbtdevice",
+        "libbtif",
+        "libbt-hci",
+        "libbt-stack",
+        "libbt-utils",
+        "libbtcore",
+        "libosi",
+        "avrcp-target-service",
+        "lib-bt-packets",
+        "libbt-audio-hal-interface",
+        "libaudio-a2dp-hw-utils",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
+    ],
+}
+
 fluoride_defaults {
     name: "fluoride_defaults",
     defaults: ["fluoride_defaults_fuzzable", "fluoride_types_defaults"],
@@ -109,13 +266,17 @@ fluoride_defaults {
         "libbluetooth_gd",
         "libbluetooth_rust_interop",
         "libbt_shim_ffi",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
+        "libstatslog_bt",
     ],
     target: {
         darwin: {
             // libstatslog_bt -> libbinder doesn't build on mac
             enabled: false,
         },
-        android: {
+        linux_glibc: {
             shared_libs: [
                 "android.hardware.bluetooth@1.0",
                 "android.hardware.bluetooth@1.1",
@@ -124,6 +285,16 @@ fluoride_defaults {
                 "libstatslog_bt",
                 "libutils",
             ],
+        },
+        android: {
+            shared_libs: [
+                "android.hardware.bluetooth@1.0",
+                "android.hardware.bluetooth@1.1",
+                "libcutils",
+                "libhidlbase",
+                "libstatssocket",
+                "libutils",
+            ],
             cflags: [
                 "-DOS_ANDROID",
             ],
diff --git a/system/common/Android.bp b/system/common/Android.bp
index 37b2c1d8b2a..80075732835 100644
--- a/system/common/Android.bp
+++ b/system/common/Android.bp
@@ -10,7 +10,7 @@ package {
 cc_library_static {
     name: "libbt-common",
     defaults: [
-        "fluoride_defaults",
+        "fluoride_basic_defaults",
         "clang_file_coverage",
     ],
     host_supported: true,
@@ -33,18 +33,11 @@ cc_library_static {
     target: {
         android: {
             srcs: ["metrics.cc"],
-            shared_libs: ["libstatslog_bt"],
         },
         host: {
             srcs: ["metrics_linux.cc"],
         },
     },
-    shared_libs: [
-        "libcrypto",
-    ],
-    static_libs: [
-        "libbt-protos-lite",
-    ],
     min_sdk_version: "Tiramisu"
 }
 
@@ -107,6 +100,8 @@ cc_test {
         "test/thread_performance_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "liblog",
     ],
     static_libs: [
diff --git a/system/device/Android.bp b/system/device/Android.bp
index 152331d6651..a632d979a81 100644
--- a/system/device/Android.bp
+++ b/system/device/Android.bp
@@ -10,7 +10,7 @@ package {
 
 cc_library_static {
     name: "libbtdevice",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     host_supported: true,
     local_include_dirs: [
         "include",
@@ -26,9 +26,6 @@ cc_library_static {
         "src/esco_parameters.cc",
         "src/interop.cc",
     ],
-    shared_libs: [
-        "liblog",
-    ],
     min_sdk_version: "Tiramisu"
 }
 
@@ -42,6 +39,8 @@ cc_test {
         "test/interop_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "liblog",
         "libdl",
     ],
diff --git a/system/gd/Android.bp b/system/gd/Android.bp
index 449639bb708..35a0914443c 100644
--- a/system/gd/Android.bp
+++ b/system/gd/Android.bp
@@ -135,6 +135,7 @@ cc_defaults {
     defaults: [
         "gd_defaults",
         "gd_clang_file_coverage",
+        "libchrome_support_defaults",
     ],
     host_supported: true,
     target: {
@@ -195,7 +196,6 @@ cc_defaults {
         "BluetoothGeneratedPackets_h",
     ],
     shared_libs: [
-        "libchrome",
         "libcrypto",
         "libflatbuffers-cpp",
     ],
@@ -204,6 +204,9 @@ cc_defaults {
         "libbluetooth-protos",
         "libbluetooth_rust_interop",
         "libbt-platform-protos-lite",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     export_static_lib_headers: [ "libbluetooth_rust_interop" ],
 }
@@ -234,6 +237,7 @@ cc_binary {
     defaults: [
         "gd_defaults",
         "gd_clang_coverage_bin",
+        "libchrome_support_defaults",
     ],
     host_supported: true,
     srcs: [
@@ -268,10 +272,12 @@ cc_binary {
         "libbluetooth_gd",
         "libflatbuffers-cpp",
         "libbluetooth_rust_interop",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     shared_libs: [
         "libbacktrace",
-        "libchrome",
         "libcrypto",
         "libgrpc++",
         "libgrpc++_unsecure",
@@ -310,6 +316,7 @@ cc_test {
     defaults: [
         "gd_defaults",
         "gd_clang_coverage_bin",
+        "libchrome_support_defaults",
     ],
     host_supported: true,
     test_options: {
@@ -332,16 +339,19 @@ cc_test {
                 ":BluetoothHalTestSources_hci_android_hidl",
                 ":BluetoothOsTestSources_android",
             ],
+            static_libs: [
+                "android.system.suspend.control-V1-ndk",
+                "android.system.suspend-V1-ndk",
+                "libstatslog_bt",
+            ],
             shared_libs: [
                 "android.hardware.bluetooth@1.0",
                 "android.hardware.bluetooth@1.1",
-                "android.system.suspend.control-V1-ndk",
-                "android.system.suspend-V1-ndk",
                 "libbinder_ndk",
+                "libcutils",
                 "libhidlbase",
                 "libutils",
-                "libcutils",
-                "libstatslog_bt",
+                "libstatssocket",
             ],
         },
     },
@@ -377,12 +387,12 @@ cc_test {
         "libflatbuffers-cpp",
         "libgmock",
         "libbluetooth_rust_interop",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     shared_libs: [
-        "libchrome",
         "libcrypto",
-        "libgrpc++",
-        "libgrpc_wrap",
     ],
     sanitize: {
         address: true,
@@ -395,6 +405,7 @@ cc_test {
     defaults: [
         "gd_defaults",
         "gd_clang_coverage_bin",
+        "libchrome_support_defaults",
     ],
     include_dirs: ["packages/modules/Bluetooth/system/gd"],
     host_supported: true,
@@ -414,12 +425,10 @@ cc_test {
         cfi: true,
     },
     static_libs: [
-        "libchrome",
         "libbluetooth_rust_interop",
-    ],
-    shared_libs: [
-        "libgrpc++",
-        "libgrpc_wrap",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     target: {
         android: {
@@ -431,6 +440,15 @@ cc_test {
                 "libcutils",
             ],
         },
+        linux_glibc: {
+            shared_libs: [
+                "android.hardware.bluetooth@1.0",
+                "android.hardware.bluetooth@1.1",
+                "libhidlbase",
+                "libutils",
+                "libcutils",
+            ],
+        },
     },
 }
 
@@ -448,6 +466,9 @@ cc_defaults {
         "libgmock",
         "libgtest",
         "libbluetooth_rust_interop",
+        "libbt_callbacks_cxx",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
     ],
     host_supported: true,
     generated_headers: [
@@ -508,7 +529,10 @@ cc_fuzz {
 
 cc_benchmark {
     name: "bluetooth_benchmark_gd",
-    defaults: ["gd_defaults"],
+    defaults: [
+        "gd_defaults",
+        "libchrome_support_defaults"
+    ],
     host_supported: true,
     srcs: [
         "benchmark.cc",
@@ -516,9 +540,7 @@ cc_benchmark {
     ],
     static_libs: [
         "libbluetooth_gd",
-    ],
-    shared_libs: [
-        "libchrome",
+        "libbt_shim_bridge",
     ],
 }
 
diff --git a/system/gd/common/byte_array_test.cc b/system/gd/common/byte_array_test.cc
index f06b274adb8..114a79c3440 100644
--- a/system/gd/common/byte_array_test.cc
+++ b/system/gd/common/byte_array_test.cc
@@ -31,7 +31,7 @@ static uint8_t data[16] = {
 TEST(ByteArrayTest, test_constructor_array) {
   ByteArray<16> byte_array(data);
 
-  for (int i = 0; i < ByteArray<16>::kLength; i++) {
+  for (size_t i = 0; i < ByteArray<16>::kLength; i++) {
     ASSERT_EQ(data[i], byte_array.bytes[i]);
   }
 }
@@ -40,7 +40,7 @@ TEST(ByteArrayTest, test_from_str) {
   auto byte_array = ByteArray<16>::FromString(test_bytes);
   ASSERT_TRUE(byte_array);
 
-  for (int i = 0; i < ByteArray<16>::kLength; i++) {
+  for (size_t i = 0; i < ByteArray<16>::kLength; i++) {
     ASSERT_EQ(test_data[i], byte_array->bytes[i]);
   }
 }
diff --git a/system/gd/common/circular_buffer_test.cc b/system/gd/common/circular_buffer_test.cc
index bc67207944e..dc238c2f879 100644
--- a/system/gd/common/circular_buffer_test.cc
+++ b/system/gd/common/circular_buffer_test.cc
@@ -94,7 +94,7 @@ TEST(CircularBufferTest, max_timestamps) {
   }
 
   auto vec = buffer.Pull();
-  ASSERT_EQ(10, vec.size());
+  ASSERT_EQ(10ul, vec.size());
 
   int i = 0 + 1;
   for (auto v : vec) {
diff --git a/system/gd/common/list_map_test.cc b/system/gd/common/list_map_test.cc
index e682eea5086..580616f1a5a 100644
--- a/system/gd/common/list_map_test.cc
+++ b/system/gd/common/list_map_test.cc
@@ -28,7 +28,7 @@ using bluetooth::common::ListMap;
 
 TEST(ListMapTest, empty_test) {
   ListMap<int, int> list_map;
-  EXPECT_EQ(list_map.size(), 0);
+  EXPECT_EQ(list_map.size(), 0ul);
   EXPECT_EQ(list_map.find(42), list_map.end());
   list_map.clear();  // should not crash
   EXPECT_EQ(list_map.find(42), list_map.end());
@@ -180,7 +180,7 @@ TEST(ListMapTest, splice_same_list_test) {
 
 TEST(ListMapTest, put_get_and_contains_key_test) {
   ListMap<int, int> list_map;
-  EXPECT_EQ(list_map.size(), 0);
+  EXPECT_EQ(list_map.size(), 0ul);
   EXPECT_EQ(list_map.find(42), list_map.end());
   EXPECT_FALSE(list_map.contains(42));
   list_map.insert_or_assign(56, 200);
@@ -350,7 +350,7 @@ TEST(ListMapTest, pressure_test) {
     EXPECT_EQ(iter->second, key);
     EXPECT_TRUE(list_map.extract(key));
   }
-  EXPECT_EQ(list_map.size(), 0);
+  EXPECT_EQ(list_map.size(), 0ul);
 
   // test execution time
   auto done = std::chrono::high_resolution_clock::now();
diff --git a/system/gd/common/lru_cache_test.cc b/system/gd/common/lru_cache_test.cc
index 62b03dd2e12..d4aebf3f6eb 100644
--- a/system/gd/common/lru_cache_test.cc
+++ b/system/gd/common/lru_cache_test.cc
@@ -28,7 +28,7 @@ using bluetooth::common::LruCache;
 
 TEST(LruCacheTest, empty_test) {
   LruCache<int, int> cache(3);  // capacity = 3;
-  EXPECT_EQ(cache.size(), 0);
+  EXPECT_EQ(cache.size(), 0ul);
   EXPECT_EQ(cache.find(42), cache.end());
   cache.clear();  // should not crash
   EXPECT_EQ(cache.find(42), cache.end());
@@ -167,7 +167,7 @@ TEST(LruCacheTest, erase_in_for_loop_test) {
 
 TEST(LruCacheTest, get_and_contains_key_test) {
   LruCache<int, int> cache(3);  // capacity = 3;
-  EXPECT_EQ(cache.size(), 0);
+  EXPECT_EQ(cache.size(), 0ul);
   EXPECT_EQ(cache.find(42), cache.end());
   EXPECT_FALSE(cache.contains(42));
   EXPECT_FALSE(cache.insert_or_assign(56, 200));
@@ -186,11 +186,11 @@ TEST(LruCacheTest, put_and_get_sequence_1) {
   // Section 1: Ordered put and ordered get
   LruCache<int, int> cache(3);  // capacity = 3;
   EXPECT_FALSE(cache.insert_or_assign(1, 10));
-  EXPECT_EQ(cache.size(), 1);
+  EXPECT_EQ(cache.size(), 1ul);
   EXPECT_FALSE(cache.insert_or_assign(2, 20));
-  EXPECT_EQ(cache.size(), 2);
+  EXPECT_EQ(cache.size(), 2ul);
   EXPECT_FALSE(cache.insert_or_assign(3, 30));
-  EXPECT_EQ(cache.size(), 3);
+  EXPECT_EQ(cache.size(), 3ul);
   // 3, 2, 1 after above operations
 
   auto evicted = cache.insert_or_assign(4, 40);
@@ -210,7 +210,7 @@ TEST(LruCacheTest, put_and_get_sequence_1) {
   // Section 2: Over capacity put and ordered get
   evicted = cache.insert_or_assign(5, 50);
   // 5, 3, 2 after above operations, 4 is evicted
-  EXPECT_EQ(cache.size(), 3);
+  EXPECT_EQ(cache.size(), 3ul);
   EXPECT_TRUE(evicted);
   EXPECT_EQ(*evicted, std::make_pair(4, 40));
 
@@ -249,7 +249,7 @@ TEST(LruCacheTest, put_and_get_sequence_2) {
   EXPECT_EQ(*evicted, std::make_pair(1, 10));
   EXPECT_FALSE(cache.insert_or_assign(2, 200));
   // 2, 3 in cache, nothing is evicted
-  EXPECT_EQ(cache.size(), 2);
+  EXPECT_EQ(cache.size(), 2ul);
 
   EXPECT_FALSE(cache.contains(1));
   LruCache<int, int>::const_iterator iter;
@@ -274,7 +274,7 @@ TEST(LruCacheTest, put_and_get_sequence_2) {
   EXPECT_TRUE(cache.extract(4));
   EXPECT_FALSE(cache.contains(4));
   // 3 in cache
-  EXPECT_EQ(cache.size(), 1);
+  EXPECT_EQ(cache.size(), 1ul);
   EXPECT_FALSE(cache.insert_or_assign(2, 2000));
   // 2, 3 in cache
 
@@ -289,7 +289,7 @@ TEST(LruCacheTest, put_and_get_sequence_2) {
   EXPECT_FALSE(cache.insert_or_assign(5, 50));
   EXPECT_FALSE(cache.insert_or_assign(1, 100));
   EXPECT_FALSE(cache.insert_or_assign(5, 1000));
-  EXPECT_EQ(cache.size(), 2);
+  EXPECT_EQ(cache.size(), 2ul);
   // 5, 1 in cache
 
   evicted = cache.insert_or_assign(6, 2000);
@@ -448,7 +448,7 @@ TEST(LruCacheTest, pressure_test) {
     EXPECT_EQ(iter->second, key);
     EXPECT_TRUE(cache.extract(key));
   }
-  EXPECT_EQ(cache.size(), 0);
+  EXPECT_EQ(cache.size(), 0ul);
 
   // test execution time
   auto done = std::chrono::high_resolution_clock::now();
diff --git a/system/gd/common/multi_priority_queue_test.cc b/system/gd/common/multi_priority_queue_test.cc
index c0918adfee1..b40095205ec 100644
--- a/system/gd/common/multi_priority_queue_test.cc
+++ b/system/gd/common/multi_priority_queue_test.cc
@@ -29,7 +29,7 @@ TEST(MultiPriorityQueueTest, without_high_priority_item) {
   q.push(0);
   q.push(1, 0);
   q.push(2);
-  ASSERT_EQ(q.size(), 3);
+  ASSERT_EQ(q.size(), 3ul);
   for (int i = 0; i < 3; i++) {
     ASSERT_EQ(q.front(), i);
     q.pop();
diff --git a/system/gd/common/sync_map_count_test.cc b/system/gd/common/sync_map_count_test.cc
index 1ed8d6a69d0..d8692003894 100644
--- a/system/gd/common/sync_map_count_test.cc
+++ b/system/gd/common/sync_map_count_test.cc
@@ -51,19 +51,19 @@ TEST(SyncMapCount, simple) {
   SyncMapCount<std::string> map;
   LoadStringMap(map);
 
-  ASSERT_EQ(5, map.Size());
+  ASSERT_EQ(5ul, map.Size());
 
   auto m = map.Get();
-  ASSERT_EQ(3, m["Three"]);
-  ASSERT_EQ(2, m["Two"]);
-  ASSERT_EQ(1, m["One"]);
+  ASSERT_EQ(3ul, m["Three"]);
+  ASSERT_EQ(2ul, m["Two"]);
+  ASSERT_EQ(1ul, m["One"]);
 }
 
 TEST(SyncMapCount, sized) {
   SyncMapCount<std::string> map(2);
   LoadStringMap(map);
 
-  ASSERT_EQ(2, map.Size());
+  ASSERT_EQ(2ul, map.Size());
 }
 
 TEST(SyncMapCount, sorted_string_value_low_to_high) {
@@ -71,8 +71,8 @@ TEST(SyncMapCount, sorted_string_value_low_to_high) {
   LoadStringMap(map);
 
   auto entries = map.GetSortedLowToHigh();
-  ASSERT_EQ(3, entries[entries.size() - 1].count);
-  ASSERT_EQ(2, entries[entries.size() - 2].count);
+  ASSERT_EQ(3ul, entries[entries.size() - 1].count);
+  ASSERT_EQ(2ul, entries[entries.size() - 2].count);
 }
 
 TEST(SyncMapCount, sorted_string_value_high_to_low) {
@@ -80,8 +80,8 @@ TEST(SyncMapCount, sorted_string_value_high_to_low) {
   LoadStringMap(map);
 
   auto entries = map.GetSortedHighToLow();
-  ASSERT_EQ(3, entries[0].count);
-  ASSERT_EQ(2, entries[1].count);
+  ASSERT_EQ(3ul, entries[0].count);
+  ASSERT_EQ(2ul, entries[1].count);
 }
 
 struct TestString {
@@ -113,12 +113,12 @@ TEST(SyncMapCount, simple_struct) {
   SyncMapCount<TestString> map;
   LoadTestStringMap(map);
 
-  ASSERT_EQ(5, map.Size());
+  ASSERT_EQ(5ul, map.Size());
 
   auto m = map.Get();
-  ASSERT_EQ(3, m[TestString("Three")]);
-  ASSERT_EQ(2, m[TestString("Two")]);
-  ASSERT_EQ(1, m[TestString("One")]);
+  ASSERT_EQ(3ul, m[TestString("Three")]);
+  ASSERT_EQ(2ul, m[TestString("Two")]);
+  ASSERT_EQ(1ul, m[TestString("One")]);
 }
 
 TEST(SyncMapCount, sorted_string_struct_value_low_to_high) {
@@ -126,8 +126,8 @@ TEST(SyncMapCount, sorted_string_struct_value_low_to_high) {
   LoadTestStringMap(map);
 
   auto entries = map.GetSortedLowToHigh();
-  ASSERT_EQ(3, entries[entries.size() - 1].count);
-  ASSERT_EQ(2, entries[entries.size() - 2].count);
+  ASSERT_EQ(3ul, entries[entries.size() - 1].count);
+  ASSERT_EQ(2ul, entries[entries.size() - 2].count);
 }
 
 TEST(SyncMapCount, sorted_string_struct_value_high_to_low) {
@@ -135,22 +135,22 @@ TEST(SyncMapCount, sorted_string_struct_value_high_to_low) {
   LoadTestStringMap(map);
 
   auto entries = map.GetSortedHighToLow();
-  ASSERT_EQ(3, entries[0].count);
-  ASSERT_EQ(2, entries[1].count);
+  ASSERT_EQ(3ul, entries[0].count);
+  ASSERT_EQ(2ul, entries[1].count);
 }
 
 TEST(SyncMapCount, locked_for_map_copy) {
   SyncMapCount<TestString> map;
   LoadTestStringMap(map);
 
-  ASSERT_EQ(5, map.Size());
+  ASSERT_EQ(5ul, map.Size());
   std::vector<SyncMapCount<TestString>::Item> vec;
   for (auto& it : map.Get()) {
     map.Clear();
     vec.push_back(SyncMapCount<TestString>::Item{it.first, it.second});
   }
-  ASSERT_EQ(0, map.Size());
-  ASSERT_EQ(5, vec.size());
+  ASSERT_EQ(0ul, map.Size());
+  ASSERT_EQ(5ul, vec.size());
 }
 
 }  // namespace testing
diff --git a/system/gd/hal/hci_hal_host_test.cc b/system/gd/hal/hci_hal_host_test.cc
index da2ada6a0cd..884e4b9bb16 100644
--- a/system/gd/hal/hci_hal_host_test.cc
+++ b/system/gd/hal/hci_hal_host_test.cc
@@ -325,7 +325,7 @@ TEST_F(HciHalRootcanalTest, receive_multiple_acl_batch) {
   for (int i = 0; i < num_packets; i++) {
     write(fake_server_socket_, incoming_packet.data(), incoming_packet.size());
   }
-  while (incoming_packets_queue_.size() != num_packets) {
+  while (incoming_packets_queue_.size() != (size_t)num_packets) {
   }
   for (int i = 0; i < num_packets; i++) {
     auto packet = incoming_packets_queue_.front();
diff --git a/system/gd/hci/class_of_device_unittest.cc b/system/gd/hci/class_of_device_unittest.cc
index eb0ced26532..62d304c54b1 100644
--- a/system/gd/hci/class_of_device_unittest.cc
+++ b/system/gd/hci/class_of_device_unittest.cc
@@ -102,12 +102,12 @@ TEST(ClassOfDeviceTest, classOfDeviceFromUint32Legacy) {
   auto cod = ClassOfDevice::FromUint32Legacy(0);
   ASSERT_TRUE(cod);
   ASSERT_THAT(cod->cod, testing::ElementsAre(0x00, 0x00, 0x00));
-  ASSERT_EQ(cod->ToUint32Legacy(), 0);
+  ASSERT_EQ(cod->ToUint32Legacy(), 0ul);
 
   cod = ClassOfDevice::FromUint32Legacy(0xab214c);
   ASSERT_TRUE(cod);
   ASSERT_THAT(cod->cod, testing::ElementsAre(0xab, 0x21, 0x4c));
-  ASSERT_EQ(cod->ToUint32Legacy(), 0xab214c);
+  ASSERT_EQ(cod->ToUint32Legacy(), 0xab214cul);
 
   ASSERT_FALSE(ClassOfDevice::FromUint32Legacy(0x1ab214c));
 }
diff --git a/system/gd/hci/hci_packets_test.cc b/system/gd/hci/hci_packets_test.cc
index 99963354517..06148c1ed6e 100644
--- a/system/gd/hci/hci_packets_test.cc
+++ b/system/gd/hci/hci_packets_test.cc
@@ -73,15 +73,15 @@ TEST(HciPacketsTest, testWriteExtendedInquiryResponse) {
   auto view = WriteExtendedInquiryResponseView::Create(CommandView::Create(packet_bytes_view));
   ASSERT_TRUE(view.IsValid());
   auto gap_data = view.GetExtendedInquiryResponse();
-  ASSERT_GE(gap_data.size(), 4);
+  ASSERT_GE(gap_data.size(), 4ul);
   ASSERT_EQ(gap_data[0].data_type_, GapDataType::COMPLETE_LOCAL_NAME);
-  ASSERT_EQ(gap_data[0].data_.size(), 10);
+  ASSERT_EQ(gap_data[0].data_.size(), 10ul);
   ASSERT_EQ(gap_data[1].data_type_, GapDataType::COMPLETE_LIST_16_BIT_UUIDS);
-  ASSERT_EQ(gap_data[1].data_.size(), 24);
+  ASSERT_EQ(gap_data[1].data_.size(), 24ul);
   ASSERT_EQ(gap_data[2].data_type_, GapDataType::COMPLETE_LIST_32_BIT_UUIDS);
-  ASSERT_EQ(gap_data[2].data_.size(), 0);
+  ASSERT_EQ(gap_data[2].data_.size(), 0ul);
   ASSERT_EQ(gap_data[3].data_type_, GapDataType::COMPLETE_LIST_128_BIT_UUIDS);
-  ASSERT_EQ(gap_data[3].data_.size(), 128);
+  ASSERT_EQ(gap_data[3].data_.size(), 128ul);
 
   std::vector<GapData> no_padding{gap_data.begin(), gap_data.begin() + 4};
   auto builder = WriteExtendedInquiryResponseBuilder::Create(view.GetFecRequired(), no_padding);
@@ -171,7 +171,7 @@ TEST(HciPacketsTest, testLeSetExtendedScanParameters) {
   ASSERT_TRUE(view.IsValid());
   ASSERT_EQ(1, view.GetScanningPhys());
   auto params = view.GetParameters();
-  ASSERT_EQ(1, params.size());
+  ASSERT_EQ(1ul, params.size());
   ASSERT_EQ(LeScanType::ACTIVE, params[0].le_scan_type_);
   ASSERT_EQ(18, params[0].le_scan_interval_);
   ASSERT_EQ(18, params[0].le_scan_window_);
@@ -190,7 +190,7 @@ TEST(HciPacketsTest, testLeSetExtendedScanParameters_6553) {
   ASSERT_TRUE(view.IsValid());
   ASSERT_EQ(1, view.GetScanningPhys());
   auto params = view.GetParameters();
-  ASSERT_EQ(1, params.size());
+  ASSERT_EQ(1ul, params.size());
   ASSERT_EQ(LeScanType::ACTIVE, params[0].le_scan_type_);
   ASSERT_EQ(6553, params[0].le_scan_interval_);
   ASSERT_EQ(6553, params[0].le_scan_window_);
@@ -291,8 +291,8 @@ TEST(HciPacketsTest, testLeSetExtendedAdvertisingParametersLegacySet0) {
       LeAdvertisingCommandView::Create(CommandView::Create(packet_bytes_view)));
   ASSERT_TRUE(view.IsValid());
   ASSERT_EQ(0, view.GetAdvertisingHandle());
-  ASSERT_EQ(400, view.GetPrimaryAdvertisingIntervalMin());
-  ASSERT_EQ(450, view.GetPrimaryAdvertisingIntervalMax());
+  ASSERT_EQ(400ul, view.GetPrimaryAdvertisingIntervalMin());
+  ASSERT_EQ(450ul, view.GetPrimaryAdvertisingIntervalMax());
   ASSERT_EQ(0x7, view.GetPrimaryAdvertisingChannelMap());
   ASSERT_EQ(OwnAddressType::RANDOM_DEVICE_ADDRESS, view.GetOwnAddressType());
   ASSERT_EQ(PeerAddressType::PUBLIC_DEVICE_OR_IDENTITY_ADDRESS, view.GetPeerAddressType());
@@ -314,8 +314,8 @@ TEST(HciPacketsTest, testLeSetExtendedAdvertisingParametersSet1) {
       LeAdvertisingCommandView::Create(CommandView::Create(packet_bytes_view)));
   ASSERT_TRUE(view.IsValid());
   ASSERT_EQ(1, view.GetAdvertisingHandle());
-  ASSERT_EQ(400, view.GetPrimaryAdvertisingIntervalMin());
-  ASSERT_EQ(450, view.GetPrimaryAdvertisingIntervalMax());
+  ASSERT_EQ(400ul, view.GetPrimaryAdvertisingIntervalMin());
+  ASSERT_EQ(450ul, view.GetPrimaryAdvertisingIntervalMax());
   ASSERT_EQ(0x7, view.GetPrimaryAdvertisingChannelMap());
   ASSERT_EQ(OwnAddressType::RANDOM_DEVICE_ADDRESS, view.GetOwnAddressType());
   ASSERT_EQ(PeerAddressType::PUBLIC_DEVICE_OR_IDENTITY_ADDRESS, view.GetPeerAddressType());
@@ -363,7 +363,7 @@ TEST(HciPacketsTest, testLeSetExtendedAdvertisingDisable1) {
       LeAdvertisingCommandView::Create(CommandView::Create(packet_bytes_view)));
   ASSERT_TRUE(view.IsValid());
   auto disabled_set = view.GetDisabledSets();
-  ASSERT_EQ(1, disabled_set.size());
+  ASSERT_EQ(1ul, disabled_set.size());
   ASSERT_EQ(1, disabled_set[0].advertising_handle_);
 }
 
@@ -372,7 +372,7 @@ TEST(HciPacketsTest, testLeSetAdvertisingDataBuilderLength) {
   gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
   gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
   auto builder = LeSetAdvertisingDataBuilder::Create({gap_data});
-  ASSERT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /* data_length */ + 31 /* data */, builder->size());
+  ASSERT_EQ(2ul /*opcode*/ + 1ul /* parameter size */ + 1ul /* data_length */ + 31ul /* data */, builder->size());
 
   auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
   packet_bytes->reserve(builder->size());
@@ -380,7 +380,7 @@ TEST(HciPacketsTest, testLeSetAdvertisingDataBuilderLength) {
   builder->Serialize(bit_inserter);
   auto command_view = LeAdvertisingCommandView::Create(CommandView::Create(PacketView<kLittleEndian>(packet_bytes)));
   ASSERT_TRUE(command_view.IsValid());
-  ASSERT_EQ(1 /* data_length */ + 31 /* data */, command_view.GetPayload().size());
+  ASSERT_EQ(1ul /* data_length */ + 31ul /* data */, command_view.GetPayload().size());
   auto view = LeSetAdvertisingDataView::Create(command_view);
   ASSERT_TRUE(view.IsValid());
 }
@@ -390,7 +390,7 @@ TEST(HciPacketsTest, testLeSetScanResponseDataBuilderLength) {
   gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
   gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
   auto builder = LeSetScanResponseDataBuilder::Create({gap_data});
-  ASSERT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /*data_length */ + 31 /* data */, builder->size());
+  ASSERT_EQ(2ul /*opcode*/ + 1ul /* parameter size */ + 1ul /*data_length */ + 31ul /* data */, builder->size());
 
   auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
   packet_bytes->reserve(builder->size());
@@ -398,7 +398,7 @@ TEST(HciPacketsTest, testLeSetScanResponseDataBuilderLength) {
   builder->Serialize(bit_inserter);
   auto command_view = LeAdvertisingCommandView::Create(CommandView::Create(PacketView<kLittleEndian>(packet_bytes)));
   ASSERT_TRUE(command_view.IsValid());
-  ASSERT_EQ(1 /* data_length */ + 31 /* data */, command_view.GetPayload().size());
+  ASSERT_EQ(1ul /* data_length */ + 31ul /* data */, command_view.GetPayload().size());
   auto view = LeSetScanResponseDataView::Create(command_view);
   ASSERT_TRUE(view.IsValid());
 }
@@ -419,7 +419,7 @@ TEST(HciPacketsTest, testLeMultiAdvSetAdvertisingDataBuilderLength) {
   ASSERT_TRUE(command_view.IsValid());
   auto view = LeMultiAdvtSetDataView::Create(command_view);
   ASSERT_TRUE(view.IsValid());
-  ASSERT_TRUE(view.GetAdvertisingData().size() > 0);
+  ASSERT_TRUE(view.GetAdvertisingData().size() > 0ul);
   ASSERT_EQ(view.GetAdvertisingData()[0].data_, gap_data.data_);
   ASSERT_EQ(view.GetAdvertisingInstance(), 3);
 }
diff --git a/system/gd/l2cap/l2cap_packet_test.cc b/system/gd/l2cap/l2cap_packet_test.cc
index 7a413f41c03..0bf9017c7a0 100644
--- a/system/gd/l2cap/l2cap_packet_test.cc
+++ b/system/gd/l2cap/l2cap_packet_test.cc
@@ -80,7 +80,7 @@ TEST(L2capPacketsTest, testConfigRequestOptions) {
     PacketView<kLittleEndian> packet_bytes_view(view_bytes);
     auto view = ConfigurationRequestView::Create(ControlView::Create(packet_bytes_view));
     ASSERT_TRUE(view.IsValid());
-    ASSERT_EQ(1, view.GetConfig().size());
+    ASSERT_EQ(1ul, view.GetConfig().size());
   }
 
   {
@@ -90,7 +90,7 @@ TEST(L2capPacketsTest, testConfigRequestOptions) {
     PacketView<kLittleEndian> packet_bytes_view(view_bytes);
     auto view = ConfigurationRequestView::Create(ControlView::Create(packet_bytes_view));
     ASSERT_TRUE(view.IsValid());
-    ASSERT_EQ(2, view.GetConfig().size());
+    ASSERT_EQ(2ul, view.GetConfig().size());
   }
 
   {
@@ -100,7 +100,7 @@ TEST(L2capPacketsTest, testConfigRequestOptions) {
     PacketView<kLittleEndian> packet_bytes_view(view_bytes);
     auto view = ConfigurationRequestView::Create(ControlView::Create(packet_bytes_view));
     ASSERT_TRUE(view.IsValid());
-    ASSERT_EQ(2, view.GetConfig().size());
+    ASSERT_EQ(2ul, view.GetConfig().size());
   }
 
   {
@@ -110,7 +110,7 @@ TEST(L2capPacketsTest, testConfigRequestOptions) {
     PacketView<kLittleEndian> packet_bytes_view(view_bytes);
     auto view = ConfigurationRequestView::Create(ControlView::Create(packet_bytes_view));
     ASSERT_TRUE(view.IsValid());
-    ASSERT_EQ(1, view.GetConfig().size());
+    ASSERT_EQ(1ul, view.GetConfig().size());
   }
 
   {
@@ -120,7 +120,7 @@ TEST(L2capPacketsTest, testConfigRequestOptions) {
     PacketView<kLittleEndian> packet_bytes_view(view_bytes);
     auto view = ConfigurationRequestView::Create(ControlView::Create(packet_bytes_view));
     ASSERT_TRUE(view.IsValid());
-    ASSERT_EQ(2, view.GetConfig().size());
+    ASSERT_EQ(2ul, view.GetConfig().size());
   }
 }
 
diff --git a/system/gd/os/linux_generic/queue_unittest.cc b/system/gd/os/linux_generic/queue_unittest.cc
index 90f061ccdb1..3739735a0a6 100644
--- a/system/gd/os/linux_generic/queue_unittest.cc
+++ b/system/gd/os/linux_generic/queue_unittest.cc
@@ -157,7 +157,7 @@ class TestDequeueEnd {
     std::unique_ptr<std::string> data = queue_->TryDequeue();
     buffer_.push(std::move(data));
 
-    if (buffer_.size() == capacity_) {
+    if (buffer_.size() == (size_t)capacity_) {
       queue_->UnregisterDequeue();
     }
 
@@ -475,7 +475,7 @@ TEST_F(QueueTest, queue_becomes_full_dequeue_callback_slower) {
   // Wait for enqueue buffer empty and expect queue is full
   enqueue_future.wait();
   EXPECT_EQ(enqueue_future.get(), 0);
-  EXPECT_GE(test_dequeue_end.buffer_.size(), kQueueSize - 1);
+  EXPECT_GE(test_dequeue_end.buffer_.size(), (size_t)(kQueueSize - 1));
 
   test_dequeue_end.UnregisterDequeue();
 }
@@ -535,7 +535,7 @@ TEST_F(QueueTest, queue_becomes_non_full_during_test) {
 
   // Expect kQueueSize data block in enqueue end buffer
   std::this_thread::sleep_for(std::chrono::milliseconds(20));
-  EXPECT_EQ(test_enqueue_end.buffer_.size(), kQueueSize);
+  EXPECT_EQ(test_enqueue_end.buffer_.size(), (size_t)kQueueSize);
 
   // Register dequeue
   std::unordered_map<int, std::promise<int>> dequeue_promise_map;
diff --git a/system/gd/os/linux_generic/wakelock_manager_unittest.cc b/system/gd/os/linux_generic/wakelock_manager_unittest.cc
index 0ae97044841..4359371902a 100644
--- a/system/gd/os/linux_generic/wakelock_manager_unittest.cc
+++ b/system/gd/os/linux_generic/wakelock_manager_unittest.cc
@@ -104,12 +104,12 @@ TEST_F(WakelockManagerTest, test_set_os_callouts_repeated_acquire) {
 
   WakelockManager::Get().Acquire();
   SyncHandler();
-  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), 1);
+  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), (size_t)1);
   ASSERT_THAT(os_callouts.GetNetAcquiredCount(WakelockManager::kBtWakelockId), Optional(Eq(1)));
 
   WakelockManager::Get().Acquire();
   SyncHandler();
-  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), 1);
+  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), (size_t)1);
   ASSERT_THAT(os_callouts.GetNetAcquiredCount(WakelockManager::kBtWakelockId), Optional(Eq(2)));
 
   WakelockManager::Get().Release();
@@ -130,12 +130,12 @@ TEST_F(WakelockManagerTest, test_set_os_callouts_repeated_release) {
 
   WakelockManager::Get().Acquire();
   SyncHandler();
-  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), 1);
+  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), (size_t)1);
   ASSERT_THAT(os_callouts.GetNetAcquiredCount(WakelockManager::kBtWakelockId), Optional(Eq(1)));
 
   WakelockManager::Get().Release();
   SyncHandler();
-  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), 1);
+  ASSERT_EQ(os_callouts.acquired_lock_counts.size(), (size_t)1);
   ASSERT_THAT(os_callouts.GetNetAcquiredCount(WakelockManager::kBtWakelockId), Optional(Eq(0)));
 
   // OS callouts allow pass through for repeated release calls
@@ -158,7 +158,7 @@ TEST_F(WakelockManagerTest, test_with_os_callouts_in_a_loop_and_dump) {
   for (size_t i = 0; i < 1000; i++) {
     WakelockManager::Get().Acquire();
     SyncHandler();
-    ASSERT_EQ(os_callouts.acquired_lock_counts.size(), 1);
+    ASSERT_EQ(os_callouts.acquired_lock_counts.size(), (size_t)1);
     ASSERT_THAT(os_callouts.GetNetAcquiredCount(WakelockManager::kBtWakelockId), Optional(Eq(1)));
     WakelockManager::Get().Release();
     SyncHandler();
diff --git a/system/gd/packet/fragmenting_inserter_unittest.cc b/system/gd/packet/fragmenting_inserter_unittest.cc
index c2f1124da5a..ab833194fdf 100644
--- a/system/gd/packet/fragmenting_inserter_unittest.cc
+++ b/system/gd/packet/fragmenting_inserter_unittest.cc
@@ -41,7 +41,7 @@ TEST(FragmentingInserterTest, addMoreBits) {
 
   it.finalize();
 
-  ASSERT_EQ(1, fragments.size());
+  ASSERT_EQ(1ul, fragments.size());
 
   std::vector<uint8_t> bytes;
   BitInserter bit_inserter(bytes);
@@ -71,7 +71,7 @@ TEST(FragmentingInserterTest, observerTest) {
   it.insert_bits(static_cast<uint8_t>(0b1010), 4);
   it.finalize();
 
-  ASSERT_EQ(1, fragments.size());
+  ASSERT_EQ(1ul, fragments.size());
 
   std::vector<uint8_t> bytes;
   BitInserter bit_inserter(bytes);
@@ -102,22 +102,22 @@ TEST(FragmentingInserterTest, testMtuBoundaries) {
   FragmentingInserter it(kPacketSize, std::back_insert_iterator(fragments_mtu_is_kPacketSize));
   counts.Serialize(it);
   it.finalize();
-  ASSERT_EQ(1, fragments_mtu_is_kPacketSize.size());
+  ASSERT_EQ(1ul, fragments_mtu_is_kPacketSize.size());
   ASSERT_EQ(kPacketSize, fragments_mtu_is_kPacketSize[0]->size());
 
   std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_less;
   FragmentingInserter it_less(kPacketSize - 1, std::back_insert_iterator(fragments_mtu_is_less));
   counts.Serialize(it_less);
   it_less.finalize();
-  ASSERT_EQ(2, fragments_mtu_is_less.size());
-  ASSERT_EQ(kPacketSize - 1, fragments_mtu_is_less[0]->size());
-  ASSERT_EQ(1, fragments_mtu_is_less[1]->size());
+  ASSERT_EQ(2ul, fragments_mtu_is_less.size());
+  ASSERT_EQ(kPacketSize - 1ul, fragments_mtu_is_less[0]->size());
+  ASSERT_EQ(1ul, fragments_mtu_is_less[1]->size());
 
   std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_more;
   FragmentingInserter it_more(kPacketSize + 1, std::back_insert_iterator(fragments_mtu_is_more));
   counts.Serialize(it_more);
   it_more.finalize();
-  ASSERT_EQ(1, fragments_mtu_is_more.size());
+  ASSERT_EQ(1ul, fragments_mtu_is_more.size());
   ASSERT_EQ(kPacketSize, fragments_mtu_is_more[0]->size());
 }
 
diff --git a/system/gd/packet/packet_view_unittest.cc b/system/gd/packet/packet_view_unittest.cc
index 208784e7961..c0d7a0e1bb4 100644
--- a/system/gd/packet/packet_view_unittest.cc
+++ b/system/gd/packet/packet_view_unittest.cc
@@ -347,15 +347,15 @@ TYPED_TEST(IteratorTest, subrangeTest) {
   ASSERT_EQ(*(all + 1), 1);
 
   auto subrange = all.Subrange(0, 1);
-  ASSERT_EQ(1, subrange.NumBytesRemaining());
+  ASSERT_EQ(1ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange), 0);
 
   subrange = this->packet->begin().Subrange(0, 4);
-  ASSERT_EQ(4, subrange.NumBytesRemaining());
+  ASSERT_EQ(4ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange + 1), 1);
 
   subrange = all.Subrange(0, 3);
-  ASSERT_EQ(3, subrange.NumBytesRemaining());
+  ASSERT_EQ(3ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange + 1), 1);
 
   subrange = all.Subrange(0, all.NumBytesRemaining() - 1);
@@ -383,15 +383,15 @@ TYPED_TEST(IteratorTest, subrangeTest) {
   ASSERT_EQ(*subrange, 2);
 
   subrange = all.Subrange(1, 1);
-  ASSERT_EQ(1, subrange.NumBytesRemaining());
+  ASSERT_EQ(1ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange), 1);
 
   subrange = all.Subrange(1, 2);
-  ASSERT_EQ(2, subrange.NumBytesRemaining());
+  ASSERT_EQ(2ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange), 1);
 
   subrange = all.Subrange(2, 1);
-  ASSERT_EQ(1, subrange.NumBytesRemaining());
+  ASSERT_EQ(1ul, subrange.NumBytesRemaining());
   ASSERT_EQ(*(subrange), 2);
 
   subrange = this->packet->begin().Subrange(this->packet->size() - 1, 2);
diff --git a/system/gd/packet/parser/test/generated_packet_test.cc b/system/gd/packet/parser/test/generated_packet_test.cc
index 5a1d582090a..68709131491 100644
--- a/system/gd/packet/parser/test/generated_packet_test.cc
+++ b/system/gd/packet/parser/test/generated_packet_test.cc
@@ -568,7 +568,7 @@ TEST(GeneratedPacketTest, testFixedSizeByteArray) {
   for (uint32_t i = 0; i < word_array_size; i++) word_array[i] = i;
 
   auto packet = PacketWithFixedArraysOfBytesBuilder::Create(byte_array, word_array);
-  ASSERT_EQ(2 * (256 / 8), packet->size());
+  ASSERT_EQ((size_t)(2 * (256 / 8)), packet->size());
 
   std::shared_ptr<std::vector<uint8_t>> packet_bytes = std::make_shared<std::vector<uint8_t>>();
   BitInserter it(*packet_bytes);
@@ -1118,7 +1118,7 @@ TEST(GeneratedPacketTest, testOneArrayOfStructAndAnotherStruct) {
   auto view = OneArrayOfStructAndAnotherStructView::Create(packet_bytes_view);
   ASSERT_TRUE(view.IsValid());
   auto one = view.GetOne();
-  ASSERT_EQ(one.array_.size(), 3);
+  ASSERT_EQ(one.array_.size(), 3ul);
   ASSERT_EQ(one.another_.id_, 4);
   ASSERT_EQ(one.another_.count_, 0x0804);
 }
@@ -1901,7 +1901,7 @@ TEST(GeneratedPacketTest, testOneGenericStructArrayNoZeroEmpty) {
   too_few_bytes = std::make_shared<std::vector<uint8_t>>(a_two_byte_struct);
   view = OneGenericStructArrayNoZeroView::Create(PacketView<kLittleEndian>(too_few_bytes));
   ASSERT_TRUE(view.IsValid());
-  ASSERT_EQ(1, view.GetAnArray().size());
+  ASSERT_EQ(1ul, view.GetAnArray().size());
 }
 
 TEST(GeneratedPacketTest, testToStringOutput) {
diff --git a/system/gd/rust/shim/Android.bp b/system/gd/rust/shim/Android.bp
index 6df6a31c059..91e91e1c966 100644
--- a/system/gd/rust/shim/Android.bp
+++ b/system/gd/rust/shim/Android.bp
@@ -46,7 +46,7 @@ rust_defaults {
     proc_macros: [
         "libpaste",
     ],
-    whole_static_libs: [
+    static_libs: [
         "libbt_callbacks_cxx",
     ],
 }
@@ -68,7 +68,10 @@ rust_ffi_static {
 
 cc_library_static {
     name: "libbt_shim_bridge",
-    defaults: ["gd_ffi_defaults"],
+    defaults: [
+        "gd_ffi_defaults",
+        "libchrome_support_defaults"
+    ],
     generated_headers: [
         "libbt_init_flags_bridge_header",
         "libbt_shim_bridge_header",
@@ -99,16 +102,16 @@ cc_library_static {
         "//apex_available:platform",
         "com.android.bluetooth",
     ],
-    shared_libs: [
-        "libchrome",
-    ],
     min_sdk_version: "30",
 }
 
 cc_library_static {
     name: "libbluetooth_rust_interop",
-    defaults: ["gd_ffi_defaults"],
-    whole_static_libs: [
+    defaults: [
+        "gd_ffi_defaults",
+        "libchrome_support_defaults"
+    ],
+    static_libs: [
         "libbt_shim_bridge",
         "libbt_shim_ffi",
     ],
@@ -122,13 +125,13 @@ cc_library_static {
 
 cc_library_static {
     name: "libbt_callbacks_cxx",
-    defaults: ["gd_ffi_defaults"],
+    defaults: [
+        "gd_ffi_defaults",
+        "libchrome_support_defaults"
+    ],
     header_libs: ["libbt_callbacks_cxx_headers"],
     srcs: ["callbacks/callbacks.cc"],
     generated_headers: ["libbt_shim_bridge_header", "cxx-bridge-header"],
-    shared_libs: [
-        "libchrome",
-    ],
     host_supported: true,
     apex_available: [
         "//apex_available:platform",
diff --git a/system/gd/rust/topshim/Android.bp b/system/gd/rust/topshim/Android.bp
index 8098b1027ad..b24cbb67d65 100644
--- a/system/gd/rust/topshim/Android.bp
+++ b/system/gd/rust/topshim/Android.bp
@@ -43,7 +43,10 @@ rust_library_host_rlib {
 
 cc_library_static {
     name: "libbt_topshim_cxx",
-    defaults: ["gd_ffi_defaults"],
+    defaults: [
+        "gd_ffi_defaults",
+        "libchrome_support_defaults",
+    ],
     header_libs: ["libbt_callbacks_cxx_headers"],
     srcs: [
         "btav/btav_shim.cc",
@@ -62,9 +65,6 @@ cc_library_static {
         "cxx-bridge-header"
     ],
     generated_sources: ["libbt_topshim_bridge_code"],
-    shared_libs: [
-        "libchrome",
-    ],
     include_dirs: [
         "packages/modules/Bluetooth/system",
         "packages/modules/Bluetooth/system/gd",
diff --git a/system/gd/rust/topshim/btav/btav_shim.cc b/system/gd/rust/topshim/btav/btav_shim.cc
index fd1173e8649..3846eb375ce 100644
--- a/system/gd/rust/topshim/btav/btav_shim.cc
+++ b/system/gd/rust/topshim/btav/btav_shim.cc
@@ -215,7 +215,7 @@ int A2dpIntf::set_active_device(RustRawAddress bt_addr) const {
 int A2dpIntf::config_codec(RustRawAddress bt_addr, ::rust::Vec<A2dpCodecConfig> codec_preferences) const {
   RawAddress addr = rusty::CopyFromRustAddress(bt_addr);
   std::vector<btav_a2dp_codec_config_t> prefs;
-  for (int i = 0; i < codec_preferences.size(); ++i) {
+  for (size_t i = 0; i < codec_preferences.size(); ++i) {
     prefs.push_back(internal::from_rust_codec_config(codec_preferences[i]));
   }
   return intf_->config_codec(addr, prefs);
diff --git a/system/gd/rust/topshim/btif/btif_shim.cc b/system/gd/rust/topshim/btif/btif_shim.cc
index e9f53fa85d7..8529605bac0 100644
--- a/system/gd/rust/topshim/btif/btif_shim.cc
+++ b/system/gd/rust/topshim/btif/btif_shim.cc
@@ -45,7 +45,7 @@ void InitFlags::Convert(::rust::Vec<::rust::String>& initFlags) {
   flags_ = static_cast<const char**>(std::calloc(initFlags.size() + 1, sizeof(char*)));
   if (!flags_) return;
 
-  for (int i = 0; i < initFlags.size(); ++i) {
+  for (size_t i = 0; i < initFlags.size(); ++i) {
     flags_[i] = strndup(initFlags[i].data(), initFlags[i].size());
     if (!flags_[i]) {
       return;
diff --git a/system/gd/rust/topshim/facade/Android.bp b/system/gd/rust/topshim/facade/Android.bp
index 95648c71ea1..27f26937fae 100644
--- a/system/gd/rust/topshim/facade/Android.bp
+++ b/system/gd/rust/topshim/facade/Android.bp
@@ -9,7 +9,10 @@ package {
 
 rust_binary_host {
     name: "bt_topshim_facade",
-    defaults: ["gd_rust_defaults"],
+    defaults: [
+        "gd_rust_defaults",
+        "libchrome_support_defaults"
+    ],
     crate_name: "bt_topshim_facade",
     srcs: ["src/main.rs"],
     ld_flags: ["-fsanitize=undefined", "-fsanitize-minimal-runtime"],
@@ -29,15 +32,21 @@ rust_binary_host {
         "libbt_shim",
     ],
     static_libs: [
+        "avrcp-target-service",
+        "lib-bt-packets",
+        "lib-bt-packets-avrcp",
+        "lib-bt-packets-base",
+        "libchrome",
+        "libevent",
         "libbt_topshim_cxx",
         "libbt-bta",
         "libbt-common",
         "libbtdevice",
-        "libbtif-static",
+        "libbtif",
         "libbt-hci",
         "libbt-stack",
         "libbt-utils",
-        "libbtcore-static",
+        "libbtcore",
         "libosi",
         "libbt-protos-lite",
         "libbte",
@@ -52,10 +61,12 @@ rust_binary_host {
         "libbluetooth-types",
         "libflatbuffers-cpp",
         "libbt_shim_bridge",
+        "libbt_topshim_cxx",
+        "libbt-audio-hal-interface",
+        "libaudio-a2dp-hw-utils",
     ],
     shared_libs: [
         "libcrypto",
-        "libchrome",
         "liblog",
         "libcutils",
         "libgrpc++",
diff --git a/system/gd/storage/config_cache_helper_test.cc b/system/gd/storage/config_cache_helper_test.cc
index 7269a4ae859..73e3b8dee76 100644
--- a/system/gd/storage/config_cache_helper_test.cc
+++ b/system/gd/storage/config_cache_helper_test.cc
@@ -57,7 +57,7 @@ TEST(ConfigCacheHelperTest, set_get_uint64_test) {
   // zero
   ConfigCacheHelper(config).SetUint64("A", "B", 0);
   ASSERT_THAT(config.GetProperty("A", "B"), Optional(StrEq("0")));
-  ASSERT_THAT(ConfigCacheHelper(config).GetUint64("A", "B"), Optional(Eq(0)));
+  ASSERT_THAT(ConfigCacheHelper(config).GetUint64("A", "B"), Optional(Eq(0ul)));
 }
 
 TEST(ConfigCacheHelperTest, set_get_uint32_test) {
@@ -76,7 +76,7 @@ TEST(ConfigCacheHelperTest, set_get_uint32_test) {
   // zero
   ConfigCacheHelper(config).SetUint32("A", "B", 0);
   ASSERT_THAT(config.GetProperty("A", "B"), Optional(StrEq("0")));
-  ASSERT_THAT(ConfigCacheHelper(config).GetUint32("A", "B"), Optional(Eq(0)));
+  ASSERT_THAT(ConfigCacheHelper(config).GetUint32("A", "B"), Optional(Eq(0u)));
 }
 
 TEST(ConfigCacheHelperTest, set_get_int64_test) {
diff --git a/system/hci/Android.bp b/system/hci/Android.bp
index e3050873f52..af495661b15 100644
--- a/system/hci/Android.bp
+++ b/system/hci/Android.bp
@@ -7,20 +7,10 @@ package {
     default_applicable_licenses: ["system_bt_license"],
 }
 
-cc_defaults {
-    name: "libbt-hci_defaults",
-    defaults: ["fluoride_defaults"],
-    shared_libs: [
-        "android.hardware.bluetooth@1.0",
-        "android.hardware.bluetooth@1.1",
-        "libhidlbase",
-    ],
-}
-
 // HCI static library for target
 cc_library_static {
     name: "libbt-hci",
-    defaults: ["libbt-hci_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     srcs: [
         "src/btsnoop.cc",
         "src/btsnoop_mem.cc",
@@ -68,7 +58,8 @@ cc_library_static {
 cc_test {
     name: "net_test_hci",
     test_suites: ["device-tests"],
-    defaults: ["libbt-hci_defaults"],
+    defaults: ["fluoride_basic_defaults", "fluoride_test_defaults"],
+    host_supported: false,
     local_include_dirs: [
         "include",
     ],
@@ -85,19 +76,14 @@ cc_test {
         "test/packet_fragmenter_test.cc",
     ],
     shared_libs: [
-        "liblog",
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
         "libdl",
-        "libprotobuf-cpp-lite",
     ],
     static_libs: [
-        "libbt-hci",
-        "libosi",
-        "libosi-AlarmTestHarness",
-        "libosi-AllocationTestHarness",
-        "libcutils",
-        "libbtcore",
-        "libbt-protos-lite",
         "libbluetooth-for-tests",
+        "libbtcore",
+        "libbt-hci",
     ],
 }
 
@@ -105,11 +91,7 @@ cc_test {
 cc_test {
     name: "net_test_hci_native",
     test_suites: ["device-tests"],
-    defaults: ["fluoride_defaults"],
-    host_supported: true,
-    test_options: {
-        unit_test: true,
-    },
+    defaults: ["fluoride_unit_test_defaults"],
     local_include_dirs: [
         "include",
     ],
@@ -122,32 +104,12 @@ cc_test {
         "test/hci_layer_test.cc",
         "test/other_stack_stub.cc",
     ],
-    shared_libs: [
-        "libcrypto",
-        "liblog",
-        "libprotobuf-cpp-lite",
-    ],
-    static_libs: [
-        "libbt-common",
-        "libbt-protos-lite",
-        "libosi",
-        "libosi-AllocationTestHarness",
-    ],
-    sanitize: {
-        address: true,
-        cfi: true,
-        misc_undefined: ["bounds"],
-    },
 }
 
 cc_test {
     name: "net_test_hci_fragmenter_native",
     test_suites: ["device-tests"],
-    defaults: ["fluoride_defaults"],
-    host_supported: true,
-    test_options: {
-        unit_test: true,
-    },
+    defaults: ["fluoride_unit_test_defaults"],
     local_include_dirs: [
         "include",
     ],
@@ -161,21 +123,5 @@ cc_test {
         "src/buffer_allocator.cc",
         "test/packet_fragmenter_host_test.cc",
     ],
-    shared_libs: [
-        "libcrypto",
-        "liblog",
-        "libprotobuf-cpp-lite",
-    ],
-    static_libs: [
-        "libbt-common",
-        "libbt-protos-lite",
-        "libosi",
-        "libosi-AllocationTestHarness",
-    ],
-    sanitize: {
-        address: true,
-        cfi: true,
-        misc_undefined: ["bounds"],
-    },
 }
 
diff --git a/system/include/Android.bp b/system/include/Android.bp
index 8bb2b7c3b6b..cfe5897f334 100644
--- a/system/include/Android.bp
+++ b/system/include/Android.bp
@@ -16,7 +16,7 @@ cc_library_headers {
 
     // We need this in case some file outside of the Bluetooth project includes
     // bluetooth.h but doesn't include libchrome which avrcp.h depends on.
-    export_shared_lib_headers: ["libchrome"],
+    export_static_lib_headers: ["libchrome"],
 
     vendor_available: true,
     host_supported: true,
diff --git a/system/main/Android.bp b/system/main/Android.bp
index 37acf2429df..ef154dfdd22 100644
--- a/system/main/Android.bp
+++ b/system/main/Android.bp
@@ -21,7 +21,7 @@ filegroup {
 
 cc_library_static {
     name: "libbte",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     srcs: [
         ":LibBluetoothSources",
         ":LibBluetoothShimSources",
@@ -49,9 +49,6 @@ cc_library_static {
         "system/security/keystore/include",
         "hardware/interfaces/keymaster/4.0/support/include",
     ],
-    shared_libs: [
-            "libflatbuffers-cpp",
-    ],
     generated_headers: [
         "BluetoothGeneratedBundlerSchema_h_bfbs",
         "BluetoothGeneratedDumpsysDataSchema_h",
@@ -62,14 +59,14 @@ cc_library_static {
     min_sdk_version: "Tiramisu"
 }
 
-cc_library_shared {
+cc_library {
     name: "libbluetooth",
     visibility: [
         "//cts/hostsidetests:__subpackages__",
         "//packages/modules/Bluetooth:__subpackages__",
         "//vendor:__subpackages__",
     ],
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_full_defaults"],
     header_libs: ["libbluetooth_headers"],
     export_header_lib_headers: ["libbluetooth_headers"],
     include_dirs: [
@@ -94,87 +91,18 @@ cc_library_shared {
         "hardware/interfaces/keymaster/4.0/support/include",
     ],
     logtags: ["../../EventLogTags.logtags"],
-    shared_libs: [
-        "libcrypto",
-        "libflatbuffers-cpp",
-        "liblog",
-    ],
-    static_libs: [
-        "libbte",
-        "libbt-sbc-decoder",
-        "libbt-sbc-encoder",
-        "libFraunhoferAAC",
-        "libg722codec",
-        "liblc3",
-        "libudrv-uipc",
-        "libprotobuf-cpp-lite",
-        "libbluetooth_gd", // Gabeldorsche
-        "libbluetooth-dumpsys",
-        "libbluetooth_rust_interop",
-    ],
-    whole_static_libs: [
-        "libbt-bta",
-        "libbt-common",
-        "libbtdevice",
-        "libbtif",
-        "libbt-hci",
-        "libbt-stack",
-        "libbt-utils",
-        "libbtcore",
-        "libosi",
-        "libbt-protos-lite",
-    ],
-    target: {
-        android: {
-            shared_libs: [
-                "android.hardware.bluetooth.a2dp@1.0",
-                "android.hardware.bluetooth.audio@2.0",
-                "android.hardware.bluetooth.audio@2.1",
-                "android.hardware.bluetooth.audio-V1-ndk",
-                "android.hardware.bluetooth@1.0",
-                "android.hardware.bluetooth@1.1",
-                "android.system.suspend.control-V1-ndk",
-                "android.system.suspend-V1-ndk",
-                "libaaudio",
-                "libbinder_ndk",
-                "libcutils",
-                "libhidlbase",
-                "libfmq",
-                "libprocessgroup",
-                "libtinyxml2",
-                "libutils",
-                "libz",
-            ],
-            required: [
-                "libldacBT_enc",
-                "libldacBT_abr",
-            ],
-        },
-    },
     // Shared library link options.
     // References to global symbols and functions should bind to the library
     // itself. This is to avoid issues with some of the unit/system tests
     // that might link statically with some of the code in the library, and
     // also dlopen(3) the shared library.
     ldflags: ["-Wl,-Bsymbolic,-Bsymbolic-functions"],
-    required: [
-        "bt_did.conf",
-        "bt_stack.conf",
-        "audio_set_scenarios_bfbs",
-        "audio_set_scenarios_json",
-        "audio_set_configurations_bfbs",
-        "audio_set_configurations_json",
-    ],
     cflags: [
         "-DBUILDCFG",
     ],
     sanitize: {
         never: true,
     },
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.bluetooth",
-    ],
     host_supported: true,
     min_sdk_version: "30",
 }
@@ -260,6 +188,7 @@ cc_test {
         "libbluetooth-dumpsys",
         "libbt-common",
         "libbt-protos-lite",
+        "libflatbuffers-cpp",
         "libgmock",
         "liblog",
         "libosi",
@@ -267,7 +196,6 @@ cc_test {
     ],
     shared_libs: [
         "libcrypto",
-        "libflatbuffers-cpp",
         "libprotobuf-cpp-lite",
     ],
     sanitize: {
diff --git a/system/osi/Android.bp b/system/osi/Android.bp
index 8dcd8858829..7da7aba1664 100644
--- a/system/osi/Android.bp
+++ b/system/osi/Android.bp
@@ -59,7 +59,7 @@ cc_library_static {
         "//packages/apps/Test/connectivity/sl4n",
         "//packages/modules/Bluetooth:__subpackages__",
     ],
-    defaults: ["fluoride_osi_defaults"],
+    defaults: ["fluoride_osi_defaults", "fluoride_basic_defaults"],
     // TODO(mcchou): Remove socket_utils sources after platform specific
     // dependencies are abstracted.
     srcs: [
@@ -87,10 +87,6 @@ cc_library_static {
         "src/thread_scheduler.cc",
         "src/wakelock.cc",
     ],
-    shared_libs: [
-        "liblog",
-    ],
-    static_libs: ["libbt-protos-lite"],
     host_supported: true,
     // TODO(armansito): Setting _GNU_SOURCE isn't very platform-independent but
     // should be compatible for a Linux host OS. We should figure out what to do for
@@ -103,10 +99,6 @@ cc_library_static {
             ],
         },
     },
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.bluetooth",
-    ],
     min_sdk_version: "Tiramisu"
 }
 
@@ -137,6 +129,8 @@ cc_test {
         "test/wakelock_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "liblog",
         "libprotobuf-cpp-lite",
         "libcutils",
diff --git a/system/packet/Android.bp b/system/packet/Android.bp
index 45057d84994..d37c9aba327 100644
--- a/system/packet/Android.bp
+++ b/system/packet/Android.bp
@@ -15,7 +15,7 @@ cc_library_static {
         "./include",
         "./",
     ],
-    whole_static_libs: [
+    static_libs: [
         "lib-bt-packets-base",
         "lib-bt-packets-avrcp",
     ],
@@ -63,19 +63,23 @@ cc_test {
         "tests/base/packet_test.cc",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "libbinder_ndk",
         "libcrypto",
     ],
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
     ],
     target: {
         android: {
-            shared_libs: [
+            static_libs: [
                 "android.system.suspend.control-V1-ndk",
             ],
         },
diff --git a/system/packet/tests/fuzzers/Android.bp b/system/packet/tests/fuzzers/Android.bp
index eb5090eb7e1..3a782073249 100644
--- a/system/packet/tests/fuzzers/Android.bp
+++ b/system/packet/tests/fuzzers/Android.bp
@@ -30,6 +30,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -60,6 +62,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -90,6 +94,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -120,6 +126,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -150,6 +158,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -180,6 +190,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -210,6 +222,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -240,6 +254,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -270,6 +286,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -300,6 +318,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -330,6 +350,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -360,6 +382,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -390,6 +414,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -420,6 +446,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -450,6 +478,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -480,6 +510,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -510,6 +542,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -540,6 +574,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -570,6 +606,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -600,6 +638,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -630,6 +670,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -660,6 +702,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -690,6 +734,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -720,6 +766,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
@@ -750,6 +798,8 @@ cc_fuzz {
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
     ],
     cflags: [
         "-DBUILDCFG",
diff --git a/system/profile/avrcp/Android.bp b/system/profile/avrcp/Android.bp
index 903b89d44aa..db0e336cf5e 100644
--- a/system/profile/avrcp/Android.bp
+++ b/system/profile/avrcp/Android.bp
@@ -12,6 +12,7 @@ cc_library_static {
     defaults: [
         "fluoride_defaults",
         "clang_file_coverage",
+        "libchrome_support_defaults",
     ],
     host_supported: true,
     include_dirs: [
@@ -32,7 +33,6 @@ cc_library_static {
         "libosi",
     ],
     shared_libs: [
-        "libchrome",
         "liblog",
     ],
     apex_available: [
@@ -48,6 +48,7 @@ cc_test {
     defaults: [
         "fluoride_defaults",
         "clang_coverage_bin",
+        "libchrome_support_defaults",
     ],
     host_supported: true,
     test_options: {
@@ -62,9 +63,15 @@ cc_test {
         "tests/avrcp_connection_handler_test.cc",
         "tests/avrcp_device_test.cc",
     ],
+    shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
+    ],
     static_libs: [
         "libgmock",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
         "libosi",
         "liblog",
         "libcutils",
@@ -72,9 +79,6 @@ cc_test {
         "libbtdevice",
         "avrcp-target-service",
     ],
-    shared_libs: [
-        "libchrome",
-    ],
     sanitize: {
         cfi: false,
     },
@@ -87,6 +91,7 @@ cc_fuzz {
     host_supported: true,
     defaults: [
         "fluoride_defaults_fuzzable",
+        "libchrome_support_defaults",
     ],
     srcs: [
         "tests/avrcp_device_fuzz/avrcp_device_fuzz.cc",
@@ -100,8 +105,9 @@ cc_fuzz {
     static_libs: [
         "avrcp-target-service",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
         "libbase",
-        "libchrome",
         "libcutils",
         "libevent",
         "liblog",
diff --git a/system/profile/sdp/Android.bp b/system/profile/sdp/Android.bp
index 8bb883ba0c6..7db1a4d4b41 100644
--- a/system/profile/sdp/Android.bp
+++ b/system/profile/sdp/Android.bp
@@ -44,6 +44,8 @@ cc_test {
         "libgmock",
         "sdp_service",
         "lib-bt-packets",
+        "lib-bt-packets-base",
+        "lib-bt-packets-avrcp",
         "libbluetooth-types",
     ],
 }
diff --git a/system/service/Android.bp b/system/service/Android.bp
index becc865f157..950cdc0a7c0 100644
--- a/system/service/Android.bp
+++ b/system/service/Android.bp
@@ -92,20 +92,63 @@ cc_binary {
         btserviceDaemonSrc +
         ["main.cc"],
     static_libs: [
+        "avrcp-target-service",
+        "libaudio-a2dp-hw-utils",
         "libbluetooth-binder-common",
-        "libbtcore",
+        "libbluetooth-dumpsys",
         "libbluetooth-types",
+        "libbt-audio-hal-interface",
+        "libbt-bta",
+        "libbt-common",
+        "libbtcore",
+        "libbtdevice",
+        "libbte",
+        "libbt-hci",
+        "libbtif",
+        "lib-bt-packets",
+        "lib-bt-packets-avrcp",
+        "lib-bt-packets-base",
+        "libbt-protos-lite",
+        "libbt-sbc-decoder",
+        "libbt-sbc-encoder",
+        "libbt-stack",
+        "libbt-utils",
+        "libchrome",
+        "libflatbuffers-cpp",
+        "libFraunhoferAAC",
+        "libg722codec",
+        "liblc3",
         "libosi",
+        "libudrv-uipc",
     ],
 
     shared_libs: [
-        "libchrome",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
+        "android.hardware.bluetooth.a2dp@1.0",
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
+        "android.system.suspend.control-V1-ndk",
+        "android.system.suspend-V1-ndk",
+        "libaaudio",
         "libbinder",
+        "libbinder_ndk",
+        "libcrypto",
         "libcutils",
+        "libfmq",
         "liblog",
+        "libprocessgroup",
+        "libprotobuf-cpp-lite",
         "libutils",
     ],
     init_rc: ["bluetoothtbd.rc"],
+    target: {
+        android: {
+            shared_libs: [
+                "android.hardware.bluetooth.audio-V1-ndk",
+            ],
+        },
+    },
 }
 
 // Native system service unit tests for target and host
@@ -125,14 +168,49 @@ cc_test {
         ],
     },
     static_libs: [
+        "android.hardware.bluetooth.a2dp@1.0",
+        "avrcp-target-service",
+        "libaudio-a2dp-hw-utils",
         "libbluetooth-common",
+        "libbluetooth-dumpsys",
+        "libbluetooth-types",
+        "libbt-audio-hal-interface",
+        "libbt-bta",
+        "libbt-common",
+        "libbtcore",
+        "libbtdevice",
+        "libbte",
+        "libbt-hci",
+        "libbtif",
+        "lib-bt-packets",
+        "lib-bt-packets-avrcp",
+        "lib-bt-packets-base",
+        "libbt-protos-lite",
+        "libbt-sbc-decoder",
+        "libbt-sbc-encoder",
+        "libbt-stack",
+        "libbt-utils",
+        "libchrome",
         "libgmock",
         "liblog",
-        "libbluetooth-types",
         "libutils",
+        "libflatbuffers-cpp",
+        "libFraunhoferAAC",
+        "libg722codec",
+        "liblc3",
+        "libosi",
+        "libudrv-uipc",
     ],
     shared_libs: [
-        "libchrome",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
+        "libbinder_ndk",
+        "libcrypto",
+        "libfmq",
+        "libprocessgroup",
+        "libprotobuf-cpp-lite",
     ],
 
     host_supported: true,
@@ -148,10 +226,14 @@ cc_test {
                 "test/ParcelableTest.aidl",
             ],
             static_libs: [
+                "android.system.suspend.control-V1-ndk",
                 "libbluetooth-binder-common",
             ],
             shared_libs: [
+                "android.hardware.bluetooth.audio-V1-ndk",
+                "android.system.suspend-V1-ndk",
                 "libbinder",
+                "libvndksupport",
             ],
         },
         host: {
diff --git a/system/service/hal/bluetooth_interface.cc b/system/service/hal/bluetooth_interface.cc
index db3cc25418f..fbf0ef8cd2b 100644
--- a/system/service/hal/bluetooth_interface.cc
+++ b/system/service/hal/bluetooth_interface.cc
@@ -38,6 +38,10 @@ using shared_mutex_impl = std::shared_mutex;
 using shared_mutex_impl = std::shared_timed_mutex;
 #endif
 
+#ifndef DYNAMIC_LOAD_BLUETOOTH
+extern bt_interface_t bluetoothInterface;
+#endif
+
 namespace bluetooth {
 namespace hal {
 
@@ -265,6 +269,12 @@ constexpr char kLibbluetooth[] = "libbluetooth.so";
 constexpr char kBluetoothInterfaceSym[] = "bluetoothInterface";
 
 int hal_util_load_bt_library_from_dlib(const bt_interface_t** interface) {
+#ifndef DYNAMIC_LOAD_BLUETOOTH
+  (void)kLibbluetooth;
+  (void)kBluetoothInterfaceSym;
+  *interface = &bluetoothInterface;
+  return 0;
+#else
   bt_interface_t* itf{nullptr};
 
   // Always try to load the default Bluetooth stack on GN builds.
@@ -296,6 +306,7 @@ error:
   if (handle) dlclose(handle);
 
   return -EINVAL;
+#endif
 }
 
 }  // namespace
diff --git a/system/stack/Android.bp b/system/stack/Android.bp
index 82ca5d3e1a1..744a342ce1b 100644
--- a/system/stack/Android.bp
+++ b/system/stack/Android.bp
@@ -27,7 +27,7 @@ cc_test_library {
 // Bluetooth stack static library for target
 cc_library_static {
     name: "libbt-stack",
-    defaults: ["fluoride_defaults"],
+    defaults: ["fluoride_basic_defaults"],
     local_include_dirs: [
         "include",
         "avct",
@@ -202,17 +202,6 @@ cc_library_static {
     ],
     static_libs: [
         "libbt-hci",
-        "libFraunhoferAAC",
-        "libbt-platform-protos-lite",
-    ],
-    shared_libs: [
-        "libcutils",
-        "liblog",
-        "libcrypto",
-    ],
-    required: [
-        "libldacBT_enc",
-        "libldacBT_abr",
     ],
     host_supported: true,
     min_sdk_version: "Tiramisu"
@@ -238,11 +227,9 @@ cc_test {
     shared_libs: [
         "android.hardware.bluetooth@1.0",
         "android.hardware.bluetooth@1.1",
-        "android.hardware.bluetooth.a2dp@1.0",
         "android.hardware.bluetooth.audio@2.0",
         "android.hardware.bluetooth.audio@2.1",
         "android.hardware.bluetooth.audio-V1-ndk",
-        "android.system.suspend.control-V1-ndk",
         "libaaudio",
         "libbinder_ndk",
         "libcutils",
@@ -258,6 +245,8 @@ cc_test {
         "libcrypto",
     ],
     static_libs: [
+        "android.hardware.bluetooth.a2dp@1.0",
+        "android.system.suspend.control-V1-ndk",
         "libbt-audio-hal-interface",
         "libbluetooth-dumpsys",
         "libbtcore",
@@ -386,12 +375,14 @@ cc_test {
         "BluetoothGeneratedPackets_h",
     ],
     shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "libcrypto",
         "libcutils",
-        "libflatbuffers-cpp",
     ],
     static_libs: [
         "liblog",
+        "libflatbuffers-cpp",
         "libgmock",
         "libosi",
     ],
@@ -419,12 +410,14 @@ cc_test {
         "test/ble_advertiser_test.cc",
     ],
     shared_libs: [
-        "android.system.suspend.control-V1-ndk",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "libbinder_ndk",
         "libcrypto",
         "libcutils",
     ],
     static_libs: [
+        "android.system.suspend.control-V1-ndk",
         "libbluetooth-types",
         "liblog",
         "libgmock",
@@ -446,11 +439,13 @@ cc_test {
         "test/ad_parser_unittest.cc",
     ],
     shared_libs: [
-        "android.system.suspend.control-V1-ndk",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "libbinder_ndk",
         "libcrypto",
     ],
     static_libs: [
+        "android.system.suspend.control-V1-ndk",
         "libbluetooth-types",
         "liblog",
         "libgmock",
@@ -830,6 +825,7 @@ cc_test {
         "libbt-protos-lite",
         "libbtdevice",
         "libbt-utils",
+        "libflatbuffers-cpp",
         "libgmock",
         "liblog",
         "libosi",
@@ -837,7 +833,6 @@ cc_test {
     ],
     shared_libs: [
         "libcrypto",
-        "libflatbuffers-cpp",
         "libprotobuf-cpp-lite",
     ],
     sanitize: {
@@ -981,6 +976,7 @@ cc_test {
         "libbt-common",
         "libbt-protos-lite",
         "libbtdevice",
+        "libflatbuffers-cpp",
         "libgmock",
         "liblog",
         "libosi",
@@ -988,7 +984,6 @@ cc_test {
     shared_libs: [
         "libbinder_ndk",
         "libcrypto",
-        "libflatbuffers-cpp",
         "libprotobuf-cpp-lite",
     ],
     sanitize: {
@@ -1052,6 +1047,7 @@ cc_test {
         "libbt-common",
         "libbt-protos-lite",
         "libbtdevice",
+        "libflatbuffers-cpp",
         "libgmock",
         "liblog",
         "libosi",
@@ -1059,7 +1055,6 @@ cc_test {
     shared_libs: [
         "libbinder_ndk",
         "libcrypto",
-        "libflatbuffers-cpp",
         "libprotobuf-cpp-lite",
     ],
     sanitize: {
diff --git a/system/test/headless/Android.bp b/system/test/headless/Android.bp
index b0f6c343e29..36e33f7150b 100644
--- a/system/test/headless/Android.bp
+++ b/system/test/headless/Android.bp
@@ -33,37 +33,46 @@ cc_test {
         "libbtcore",
     ],
     static_libs: [
-        "libFraunhoferAAC",
+        "android.hardware.bluetooth.a2dp@1.0",
+        "android.system.suspend.control-V1-ndk",
+        "avrcp-target-service",
+        "libaudio-a2dp-hw-utils",
+        "libbluetooth-dumpsys",
         "libbluetooth_gd",
+        "libbluetooth_rust_interop",
+        "libbt-audio-hal-interface",
         "libbt-bta",
+        "libbt_callbacks_cxx",
         "libbt-common",
-        "libbluetooth-dumpsys",
+        "libbtdevice",
+        "libbte",
         "libbt-hci",
+        "libbtif",
+        "lib-bt-packets",
+        "lib-bt-packets-avrcp",
+        "lib-bt-packets-base",
         "libbt-protos-lite",
         "libbt-sbc-decoder",
         "libbt-sbc-encoder",
+        "libbt_shim_bridge",
+        "libbt_shim_ffi",
         "libbt-stack",
         "libbt-utils",
-        "libbtdevice",
-        "libbte",
-        "libbtif",
         "libflatbuffers-cpp",
+        "libFraunhoferAAC",
         "libg722codec",
         "liblc3",
         "libosi",
         "libprotobuf-cpp-lite",
         "libudrv-uipc",
         "libz",
-        "libbluetooth_rust_interop",
     ],
     shared_libs: [
-        "android.hardware.bluetooth.a2dp@1.0",
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
         "android.hardware.bluetooth.audio@2.0",
         "android.hardware.bluetooth.audio@2.1",
         "android.hardware.bluetooth.audio-V1-ndk",
-        "android.hardware.bluetooth@1.0",
-        "android.hardware.bluetooth@1.1",
-        "android.system.suspend.control-V1-ndk",
         "android.system.suspend-V1-ndk",
         "libaaudio",
         "libbase",
diff --git a/system/test/rootcanal/Android.bp b/system/test/rootcanal/Android.bp
index a6c41d606eb..f0bd2ab8e8a 100644
--- a/system/test/rootcanal/Android.bp
+++ b/system/test/rootcanal/Android.bp
@@ -24,7 +24,10 @@ package {
 
 cc_binary {
     name: "android.hardware.bluetooth@1.1-service.sim",
-    defaults: ["gd_defaults"],
+    defaults: [
+      "gd_defaults",
+      "libchrome_support_defaults"
+    ],
     proprietary: true,
     relative_install_path: "hw",
     srcs: [
@@ -39,7 +42,6 @@ cc_binary {
         "android.hardware.bluetooth@1.0",
         "android.hardware.bluetooth@1.1",
         "libbase",
-        "libchrome",
         "libcutils",
         "libhidlbase",
         "libjsoncpp",
@@ -77,7 +79,10 @@ cc_binary {
 
 cc_library_shared {
     name: "android.hardware.bluetooth@1.1-impl-sim",
-    defaults: ["gd_defaults"],
+    defaults: [
+      "gd_defaults",
+      "libchrome_support_defaults"
+    ],
     proprietary: true,
     relative_install_path: "hw",
     srcs: [
@@ -91,7 +96,6 @@ cc_library_shared {
         "android.hardware.bluetooth@1.0",
         "android.hardware.bluetooth@1.1",
         "libbase",
-        "libchrome",
         "libcutils",
         "libhidlbase",
         "libjsoncpp",
diff --git a/system/test/suite/Android.bp b/system/test/suite/Android.bp
index 5dc6bcc4cfc..4d45f814b36 100644
--- a/system/test/suite/Android.bp
+++ b/system/test/suite/Android.bp
@@ -8,71 +8,121 @@ package {
     default_applicable_licenses: ["system_bt_license"],
 }
 
-cc_test {
-    name: "net_test_bluetooth",
-    test_suites: ["device-tests"],
+cc_defaults {
+    name: "net_test_defaults",
     defaults: ["fluoride_defaults"],
     include_dirs: [
+        "frameworks/av/media/libaaudio/include",
         "packages/modules/Bluetooth/system",
+        "packages/modules/Bluetooth/system/bta/dm",
+        "packages/modules/Bluetooth/system/bta/include",
+        "packages/modules/Bluetooth/system/bta/sys",
+        "packages/modules/Bluetooth/system/btif/avrcp",
+        "packages/modules/Bluetooth/system/btif/co",
+        "packages/modules/Bluetooth/system/btif/include",
+        "packages/modules/Bluetooth/system/device/include",
+        "packages/modules/Bluetooth/system/embdrv/sbc/decoder/include",
+        "packages/modules/Bluetooth/system/embdrv/sbc/encoder/include",
         "packages/modules/Bluetooth/system/gd",
         "packages/modules/Bluetooth/system/include",
+        "packages/modules/Bluetooth/system/internal_include",
+        "packages/modules/Bluetooth/system/stack/a2dp",
+        "packages/modules/Bluetooth/system/stack/avdt",
+        "packages/modules/Bluetooth/system/stack/btm",
         "packages/modules/Bluetooth/system/stack/include",
+        "packages/modules/Bluetooth/system/stack/l2cap",
+        "packages/modules/Bluetooth/system/udrv/include",
+        "packages/modules/Bluetooth/system/utils/include",
+        "packages/modules/Bluetooth/system/vnd/include",
+        "system/libfmq/include",
+        "system/libhwbinder/include",
     ],
     srcs: [
-        ":TestCommonMockFunctions",
-        ":TestMockBluetoothInterface",
-        ":TestMockDevice",
-        "adapter/adapter_unittest.cc",
         "adapter/bluetooth_test.cc",
-        "gatt/gatt_test.cc",
-        "gatt/gatt_unittest.cc",
+        ":BtaDmSources",
+        ":TestCommonMockFunctions",
+        ":TestMockAndroidHardware",
+        ":TestMockCommon",
+        ":TestMockFrameworks",
+        ":TestMockHci",
+        ":TestMockSystemLibfmq",
+        ":TestMockUdrv",
     ],
-    header_libs: ["libhardware_headers"],
     shared_libs: [
-        "liblog",
-        "libcutils",
+        "android.hardware.bluetooth.audio@2.0",
+        "android.hardware.bluetooth.audio@2.1",
+        "android.system.suspend-V1-ndk",
         "libbinder",
+        "libbinder_ndk",
+        "libcrypto",
+        "libcutils",
+        "libhidlbase",
+        "liblog",
+        "libstatssocket",
+        "libtinyxml2",
         "libutils",
     ],
     static_libs: [
+        "android.hardware.bluetooth.a2dp@1.0",
+        "android.system.suspend.control-V1-ndk",
+        "avrcp-target-service",
+        "libaudio-a2dp-hw-utils",
+        "libbluetooth-dumpsys",
+        "libbluetooth-types",
+        "libbluetoothtbd_hal",
+        "libbt-audio-hal-interface",
+        "libbt-bta",
+        "libbt-common",
         "libbtcore",
+        "libbtdevice",
+        "libbte",
+        "libbt-hci",
+        "libbtif",
+        "lib-bt-packets",
+        "lib-bt-packets-avrcp",
+        "lib-bt-packets-base",
+        "libbt-sbc-decoder",
+        "libbt-sbc-encoder",
+        "libbt-stack",
+        "libbt-utils",
+        "libflatbuffers-cpp",
+        "libFraunhoferAAC",
+        "libg722codec",
+        "libgmock",
+        "liblc3",
         "libosi",
+        "libstatslog_bt",
     ],
-    whole_static_libs: [
-        "libbluetoothtbd_hal",
+    header_libs: [
+        "libhardware_headers",
+        "libbluetooth_headers",
+    ],
+    target: {
+        android: {
+            shared_libs: [
+                "android.hardware.bluetooth.audio-V1-ndk",
+            ],
+        },
+    },
+}
+
+cc_test {
+    name: "net_test_bluetooth",
+    test_suites: ["device-tests"],
+    defaults: ["net_test_defaults"],
+    srcs: [
+        "adapter/adapter_unittest.cc",
+        "gatt/gatt_test.cc",
+        "gatt/gatt_unittest.cc",
     ],
 }
 
 // Bluetooth test suite for target
 cc_test {
     name: "net_test_rfcomm_suite",
-    defaults: ["fluoride_defaults"],
-    include_dirs: [
-        "packages/modules/Bluetooth/system",
-        "packages/modules/Bluetooth/system/gd",
-        "packages/modules/Bluetooth/system/include",
-        "packages/modules/Bluetooth/system/stack/include",
-    ],
+    defaults: ["net_test_defaults"],
     srcs: [
-        ":TestMockBluetoothInterface",
-        ":TestMockDevice",
-        ":TestCommonMockFunctions",
-        "adapter/bluetooth_test.cc",
         "rfcomm/rfcomm_test.cc",
         "rfcomm/rfcomm_unittest.cc",
     ],
-    header_libs: ["libhardware_headers"],
-    shared_libs: [
-        "liblog",
-        "libcutils",
-        "libbinder",
-        "libutils",
-    ],
-    static_libs: [
-        "libbtcore",
-        "libosi",
-    ],
-    whole_static_libs: [
-        "libbluetoothtbd_hal",
-    ],
 }
diff --git a/system/test/suite/adapter/bluetooth_test.cc b/system/test/suite/adapter/bluetooth_test.cc
index be5660e088f..6b24b7509c8 100644
--- a/system/test/suite/adapter/bluetooth_test.cc
+++ b/system/test/suite/adapter/bluetooth_test.cc
@@ -48,16 +48,16 @@ void BluetoothTest::SetUp() {
   acl_state_ = BT_ACL_STATE_DISCONNECTED;
   bond_state_ = BT_BOND_STATE_NONE;
 
-  adapter_properties_callback_sem_ = semaphore_new(0);
-  remote_device_properties_callback_sem_ = semaphore_new(0);
-  adapter_state_changed_callback_sem_ = semaphore_new(0);
-  discovery_state_changed_callback_sem_ = semaphore_new(0);
-
   remove("/data/misc/bluedroid/bt_config.conf.encrypted-checksum");
   remove("/data/misc/bluedroid/bt_config.bak.encrypted-checksum");
 
   bluetooth::hal::BluetoothInterface::Initialize();
   ASSERT_TRUE(bluetooth::hal::BluetoothInterface::IsInitialized());
+  adapter_properties_callback_sem_ = semaphore_new(0);
+  remote_device_properties_callback_sem_ = semaphore_new(0);
+  adapter_state_changed_callback_sem_ = semaphore_new(0);
+  discovery_state_changed_callback_sem_ = semaphore_new(0);
+
   auto bt_hal_interface = bluetooth::hal::BluetoothInterface::Get();
   bt_hal_interface->AddObserver(this);
   bt_interface_ = bt_hal_interface->GetHALInterface();
diff --git a/system/types/Android.bp b/system/types/Android.bp
index 827b596cdc2..4caa05f23bb 100644
--- a/system/types/Android.bp
+++ b/system/types/Android.bp
@@ -56,4 +56,8 @@ cc_test {
         "test/raw_address_unittest.cc",
         "test/bluetooth/uuid_unittest.cc",
     ],
+    shared_libs: [
+        "android.hardware.bluetooth@1.0",
+        "android.hardware.bluetooth@1.1",
+    ],
 }
-- 
GitLab