diff --git a/guest/hals/audio/vsoc_audio_message.h b/common/vsoc/lib/vsoc_audio_message.h
similarity index 79%
rename from guest/hals/audio/vsoc_audio_message.h
rename to common/vsoc/lib/vsoc_audio_message.h
index 5b36215..230c4de 100644
--- a/guest/hals/audio/vsoc_audio_message.h
+++ b/common/vsoc/lib/vsoc_audio_message.h
@@ -19,21 +19,24 @@
 #include <stdint.h>
 #include <time.h>
 
-#include "guest/libs/platform_support/api_level_fixes.h"
-
-#pragma GCC diagnostic push
-#pragma  GCC diagnostic ignored "-Wparentheses"
-#if VSOC_PLATFORM_SDK_AFTER(K)
-#pragma  GCC diagnostic ignored "-Wgnu-designator"
-#endif
 #include <system/audio.h>
-#pragma GCC diagnostic pop
 
-//TODO(b/71777986) Use a shared memory window instead
-#define AUDIO_HAL_SOCKET_NAME "/var/run/media/audio_hal_socket"
+typedef uint32_t size32_t;
+
+struct timespec32 {
+  uint32_t tv_sec;
+  uint32_t tv_nsec;
+
+  timespec32() = default;
+
+  timespec32(const timespec &from)
+      : tv_sec(from.tv_sec),
+        tv_nsec(from.tv_nsec) {
+  }
+};
 
 struct gce_audio_message {
-  static const size_t kMaxAudioFrameLen = 65536;
+  static const size32_t kMaxAudioFrameLen = 65536;
   enum message_t {
     UNKNOWN = 0,
     DATA_SAMPLES = 1,
@@ -44,16 +47,16 @@
     CONTROL_PAUSE = 100
   };
   // Size of the header + data. Used to frame when we're on TCP.
-  size_t total_size;
+  size32_t total_size;
   // Size of the audio header
-  size_t header_size;
+  size32_t header_size;
   message_t message_type;
   // Identifier for the stream.
   uint32_t stream_number;
   // HAL assigned frame number, starts from 0.
   int64_t frame_num;
   // MONOTONIC_TIME when these frames were presented to the HAL.
-  timespec time_presented;
+  timespec32 time_presented;
   // Sample rate from the audio configuration.
   uint32_t frame_rate;
   // Channel mask from the audio configuration.
@@ -61,19 +64,19 @@
   // Format from the audio configuration.
   audio_format_t format;
   // Size of each frame in bytes.
-  size_t frame_size;
+  size32_t frame_size;
   // Number of frames that were presented to the HAL.
-  size_t num_frames_presented;
+  size32_t num_frames_presented;
   // Number of frames that the HAL accepted.
   //   For blocking audio this will be the same as num_frames.
   //   For non-blocking audio this may be less.
-  size_t num_frames_accepted;
+  size32_t num_frames_accepted;
   // Count of the number of packets that were dropped because they would
   // have blocked the HAL or exceeded the maximum message size.
-  size_t num_packets_dropped;
+  size32_t num_packets_dropped;
   // Count of the number of packets that were shortened to fit within
   // kMaxAudioFrameLen.
-  size_t num_packets_shortened;
+  size32_t num_packets_shortened;
   // num_frames_presented (not num_frames_accepted) will follow here.
 
   gce_audio_message() :
diff --git a/guest/hals/audio/Android.mk b/guest/hals/audio/Android.mk
index 81029cd..3af6e0f 100644
--- a/guest/hals/audio/Android.mk
+++ b/guest/hals/audio/Android.mk
@@ -63,32 +63,3 @@
 LOCAL_VENDOR_MODULE := true
 
 include $(BUILD_SHARED_LIBRARY)
-
-################################################################################
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := record_audio
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := \
-    record_audio.cpp
-
-LOCAL_CFLAGS := \
-    -Wall -Werror \
-    $(VSOC_VERSION_CFLAGS)
-
-LOCAL_C_INCLUDES := \
-    device/google/cuttlefish_common \
-    device/google/cuttlefish_kernel \
-    frameworks/av/cmds/stagefright  \
-
-LOCAL_HEADER_LIBRARIES := \
-    libhardware_headers
-
-LOCAL_SHARED_LIBRARIES := \
-    libbase               \
-    vsoc_lib
-
-LOCAL_VENDOR_MODULE := true
-include $(BUILD_EXECUTABLE)
diff --git a/guest/hals/audio/vsoc_audio.h b/guest/hals/audio/vsoc_audio.h
index 80a73cf..6ec9eee 100644
--- a/guest/hals/audio/vsoc_audio.h
+++ b/guest/hals/audio/vsoc_audio.h
@@ -22,9 +22,9 @@
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/threads/cuttlefish_thread.h"
 #include "common/vsoc/lib/audio_data_region_view.h"
+#include "common/vsoc/lib/vsoc_audio_message.h"
 #include "guest/hals/audio/audio_hal.h"
 #include "guest/hals/audio/vsoc_audio_input_stream.h"
-#include "guest/hals/audio/vsoc_audio_message.h"
 #include "guest/libs/platform_support/api_level_fixes.h"
 
 namespace cvd {
diff --git a/guest/hals/audio/vsoc_audio_input_stream.h b/guest/hals/audio/vsoc_audio_input_stream.h
index f7d275c..40d6b19 100644
--- a/guest/hals/audio/vsoc_audio_input_stream.h
+++ b/guest/hals/audio/vsoc_audio_input_stream.h
@@ -17,9 +17,9 @@
 
 #include <memory>
 
+#include "common/vsoc/lib/vsoc_audio_message.h"
 #include "guest/hals/audio/audio_hal.h"
 #include "guest/hals/audio/simulated_buffer.h"
-#include "guest/hals/audio/vsoc_audio_message.h"
 
 namespace cvd {
 
diff --git a/guest/hals/audio/vsoc_audio_output_stream.cpp b/guest/hals/audio/vsoc_audio_output_stream.cpp
index 8490a08..b78351e 100644
--- a/guest/hals/audio/vsoc_audio_output_stream.cpp
+++ b/guest/hals/audio/vsoc_audio_output_stream.cpp
@@ -13,8 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "guest/hals/audio/vsoc_audio_message.h"
-
 #include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/guest/hals/audio/vsoc_audio_output_stream.h b/guest/hals/audio/vsoc_audio_output_stream.h
index 69b976a..14ea2f4 100644
--- a/guest/hals/audio/vsoc_audio_output_stream.h
+++ b/guest/hals/audio/vsoc_audio_output_stream.h
@@ -17,9 +17,9 @@
 
 #include <memory>
 
+#include "common/vsoc/lib/vsoc_audio_message.h"
 #include "guest/hals/audio/audio_hal.h"
 #include "guest/hals/audio/simulated_buffer.h"
-#include "guest/hals/audio/vsoc_audio_message.h"
 
 namespace cvd {
 
diff --git a/host/commands/Android.bp b/host/commands/Android.bp
index 618dd00..2611603 100644
--- a/host/commands/Android.bp
+++ b/host/commands/Android.bp
@@ -15,4 +15,5 @@
 
 subdirs = [
     "launch",
+    "record_audio",
 ]
diff --git a/host/commands/record_audio/Android.bp b/host/commands/record_audio/Android.bp
new file mode 100644
index 0000000..b4f3cbd
--- /dev/null
+++ b/host/commands/record_audio/Android.bp
@@ -0,0 +1,18 @@
+cc_binary_host {
+    name: "record_audio",
+    srcs: [
+        "main.cc",
+    ],
+    include_dirs: [
+        "frameworks/av/cmds/stagefright",
+    ],
+    shared_libs: [
+        "libbase",
+        "vsoc_lib",
+    ],
+    static_libs: [
+        "libcuttlefish_host_config",
+        "libgflags",
+    ],
+    defaults: ["cuttlefish_host_only"],
+}
diff --git a/guest/hals/audio/record_audio.cpp b/host/commands/record_audio/main.cc
similarity index 72%
rename from guest/hals/audio/record_audio.cpp
rename to host/commands/record_audio/main.cc
index 43330f4..2655838 100644
--- a/guest/hals/audio/record_audio.cpp
+++ b/host/commands/record_audio/main.cc
@@ -14,25 +14,23 @@
  * limitations under the License.
  */
 
-#include "vsoc_audio_message.h"
-
 #include "common/vsoc/lib/audio_data_region_view.h"
 #include "common/vsoc/lib/circqueue_impl.h"
+#include "common/vsoc/lib/vsoc_audio_message.h"
+#include "host/libs/config/host_config.h"
 
 #include "WaveWriter.h"
 
-#include <cstdlib>
-#include <cstring>
+#include <android-base/logging.h>
+#include <gflags/gflags.h>
 #include <iostream>
-#include <unistd.h>
+#include <signal.h>
 
 using AudioDataRegionView = vsoc::audio_data::AudioDataRegionView;
 using WaveWriter = android::WaveWriter;
 
-static void usage(const char *me) {
-  std::cerr << "usage: " << me << " -o filename [-v(erbose)]" << std::endl;
-  std::exit(1);
-}
+DEFINE_string(output_file, "", "Location of the output audio file.");
+DEFINE_bool(verbose, false, "Enable verbose logging.");
 
 volatile bool gDone = false;
 static void SigIntHandler(int /* sig */) {
@@ -40,47 +38,15 @@
 }
 
 int main(int argc, char **argv) {
-  const char *me = argv[0];
+  ::android::base::InitLogging(argv, android::base::StderrLogger);
+  google::ParseCommandLineFlags(&argc, &argv, true);
 
-  std::string outputPath;
-  bool verbose = false;
+  LOG_IF(FATAL, FLAGS_output_file.empty())
+      << "--output_file must be specified.";
 
-  int res;
-  while ((res = getopt(argc, argv, "ho:v")) >= 0) {
-    switch (res) {
-      case 'o':
-      {
-        outputPath = optarg;
-        break;
-      }
+  AudioDataRegionView *audio_data_rv =
+      AudioDataRegionView::GetInstance(vsoc::GetDomain().c_str());
 
-      case 'v' :
-      {
-        verbose = true;
-        break;
-      }
-
-      case '?':
-      case 'h':
-      default:
-      {
-        usage(me);
-        break;
-      }
-    }
-  }
-
-  argc -= optind;
-  argv += optind;
-
-  if (outputPath.empty()) {
-    usage(me);
-  }
-
-  auto audio_data_rv = AudioDataRegionView::GetInstance();
-  CHECK(audio_data_rv != nullptr);
-
-  /* std::unique_ptr<vsoc::RegionWorker> audio_worker = */
   auto worker = audio_data_rv->StartWorker();
 
   std::unique_ptr<WaveWriter> writer;
@@ -108,7 +74,7 @@
             sizeof(buffer));
 
     if (res < 0) {
-        std::cerr << "CircularPacketQueue::Read returned " << res << std::endl;
+      std::cerr << "CircularPacketQueue::Read returned " << res << std::endl;
         continue;
     }
 
@@ -123,8 +89,8 @@
 
     const size_t payloadSize = res - sizeof(gce_audio_message);
 
-    if (verbose) {
-      std::cout
+    if (FLAGS_verbose) {
+      std::cerr
           << "stream "
           << hdr.stream_number
           << ", frame "
@@ -144,7 +110,7 @@
       const size_t numChannels = hdr.frame_size / sizeof(int16_t);
 
       writer.reset(
-          new WaveWriter(outputPath.c_str(), numChannels, hdr.frame_rate));
+          new WaveWriter(FLAGS_output_file.c_str(), numChannels, hdr.frame_rate));
 
       frameCount = hdr.frame_num;
       writer_hdr = hdr;
@@ -165,7 +131,8 @@
     writer->Append(&buffer[sizeof(gce_audio_message)], payloadSize);
   }
 
-  std::cout << "Done." << std::endl;
+  std::cout << "DONE" << std::endl;
 
   return 0;
 }
+
