diff --git a/common/libs/Android.bp b/common/libs/Android.bp
index e70e6ab..40b7f0c 100644
--- a/common/libs/Android.bp
+++ b/common/libs/Android.bp
@@ -14,7 +14,6 @@
 // limitations under the License.
 
 subdirs = [
-    "auto_resources",
     "device_config",
     "fs",
     "net",
diff --git a/common/libs/auto_resources/Android.bp b/common/libs/auto_resources/Android.bp
deleted file mode 100644
index f943211..0000000
--- a/common/libs/auto_resources/Android.bp
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Copyright (C) 2017 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-cc_library {
-    name: "cuttlefish_auto_resources",
-    srcs: [
-        "auto_resources.cpp",
-    ],
-    defaults: ["cuttlefish_host_and_guest"],
-}
-
-cc_library_static {
-    name: "cuttlefish_auto_resources_product",
-    srcs: [
-        "auto_resources.cpp",
-    ],
-    defaults: ["cuttlefish_guest_product_only"],
-}
-
-cc_test_host {
-    name: "auto_free_buffer_test",
-    srcs: [
-        "auto_free_buffer_test.cpp",
-    ],
-    shared_libs: [
-        "cuttlefish_auto_resources",
-    ],
-    static_libs: [
-        "libgmock",
-    ],
-    defaults: ["cuttlefish_host_only"],
-    test_suites: ["general-tests"],
-}
diff --git a/common/libs/auto_resources/TEST_MAPPING b/common/libs/auto_resources/TEST_MAPPING
deleted file mode 100644
index 1e34e75..0000000
--- a/common/libs/auto_resources/TEST_MAPPING
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "presubmit": [
-    {
-      "name": "auto_free_buffer_test",
-      "host": true
-    }
-  ]
-}
diff --git a/common/libs/auto_resources/auto_free_buffer_test.cpp b/common/libs/auto_resources/auto_free_buffer_test.cpp
deleted file mode 100644
index b1bbf34..0000000
--- a/common/libs/auto_resources/auto_free_buffer_test.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "common/libs/auto_resources/auto_resources.h"
-
-#include <stdio.h>
-
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-using ::testing::StrEq;
-
-namespace test {
-static constexpr size_t kImmutableReserveSize =
-    AutoFreeBuffer::kAutoBufferShrinkReserveThreshold;
-
-class AutoFreeBufferTest : public ::testing::Test {
- public:
-  AutoFreeBufferTest() = default;
-  ~AutoFreeBufferTest() override = default;
-
-  void SetUp() override {}
-  void TearDown() override {}
-
- protected:
-  AutoFreeBuffer buffer_;
-};
-
-TEST_F(AutoFreeBufferTest, ShrinkingSmallReservationsDoesNotRealloc) {
-
-  buffer_.Reserve(kImmutableReserveSize);
-  const void* const data = buffer_.data();
-
-  EXPECT_EQ(0u, buffer_.size());
-  EXPECT_EQ(kImmutableReserveSize, buffer_.reserve_size());
-  EXPECT_NE(nullptr, data);
-
-  buffer_.Resize(kImmutableReserveSize);
-  EXPECT_EQ(kImmutableReserveSize, buffer_.size());
-  EXPECT_EQ(data, buffer_.data());
-
-  // Reduce size of buffer.
-  buffer_.Reserve(kImmutableReserveSize / 2);
-  EXPECT_EQ(kImmutableReserveSize, buffer_.reserve_size());
-  EXPECT_EQ(kImmutableReserveSize / 2, buffer_.size());
-  EXPECT_EQ(data, buffer_.data());
-
-  buffer_.Clear();
-
-  EXPECT_EQ(0u, buffer_.size());
-  EXPECT_EQ(kImmutableReserveSize, buffer_.reserve_size());
-  EXPECT_EQ(data, buffer_.data());
-}
-
-TEST_F(AutoFreeBufferTest, ShrinkingLargeReservationDoesRealloc) {
-  buffer_.Reserve(kImmutableReserveSize + 1);
-
-  EXPECT_EQ(0u, buffer_.size());
-  EXPECT_EQ(kImmutableReserveSize + 1, buffer_.reserve_size());
-
-  buffer_.Reserve(kImmutableReserveSize);
-
-  EXPECT_EQ(0u, buffer_.size());
-  EXPECT_EQ(kImmutableReserveSize, buffer_.reserve_size());
-  // Note: realloc may re-use current memory pointer, so testing data pointer
-  // makes no sense.
-}
-
-TEST_F(AutoFreeBufferTest, ResizeClearsMemory) {
-  constexpr char kTruncWords[] = "This string";
-  constexpr char kLastWords[] = "will be truncated to first two words.";
-  constexpr char kFullText[] =
-      "This string will be truncated to first two words.";
-  // Ignore padding \0.
-  constexpr size_t kTruncLength = sizeof(kTruncWords) - 1;
-
-  buffer_.SetToString(kFullText);
-
-  // Note: this call treats buffer as raw data, so no padding happens yet.
-  buffer_.Resize(kTruncLength);
-  EXPECT_THAT(buffer_.data(), StrEq(kFullText));
-
-  buffer_.Resize(kTruncLength + 1);
-  EXPECT_THAT(buffer_.data(), StrEq(kTruncWords));
-
-  // Note: we're accessing buffer out of size() bounds, but still within
-  // reserve_size() bounds.
-  // This confirms that only 1 byte of data has been appended.
-  EXPECT_THAT(&buffer_.data()[sizeof(kTruncWords)], StrEq(kLastWords));
-}
-
-TEST_F(AutoFreeBufferTest, PrintFTest) {
-  constexpr char kFormatString[] = "Printf %s %d %03d %02x Test.";
-  constexpr char kParam1[] = "string";
-  constexpr int kParam2 = 1234;
-  constexpr int kParam3 = 7;
-  constexpr int kParam4 = 0x42;
-
-  char temp_buffer[1024];
-  size_t vsize = snprintf(&temp_buffer[0], sizeof(temp_buffer),
-                          kFormatString, kParam1, kParam2, kParam3, kParam4);
-
-  // Test 1: no reservation => allocate buffer.
-  EXPECT_EQ(vsize,
-            buffer_.PrintF(kFormatString, kParam1, kParam2, kParam3, kParam4));
-  // Check for size + null termination.
-  EXPECT_EQ(vsize + 1, buffer_.size());
-  EXPECT_THAT(buffer_.data(), StrEq(temp_buffer));
-
-  size_t reservation = buffer_.reserve_size();
-
-  buffer_.Clear();
-
-  // Test 2: buffer reserved: just print and return.
-  EXPECT_EQ(vsize,
-            buffer_.PrintF(kFormatString, kParam1, kParam2, kParam3, kParam4));
-  // Check for size + null termination.
-  EXPECT_EQ(vsize + 1, buffer_.size());
-  EXPECT_THAT(buffer_.data(), StrEq(temp_buffer));
-  EXPECT_EQ(reservation, buffer_.reserve_size());
-}
-
-}  // namespace test
diff --git a/common/libs/auto_resources/auto_resources.cpp b/common/libs/auto_resources/auto_resources.cpp
deleted file mode 100644
index a57c968..0000000
--- a/common/libs/auto_resources/auto_resources.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "common/libs/auto_resources/auto_resources.h"
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-AutoFreeBuffer::~AutoFreeBuffer() {
-  if (data_) free(data_);
-}
-
-void AutoFreeBuffer::Clear() {
-  size_ = 0;
-}
-
-bool AutoFreeBuffer::Reserve(size_t newsize) {
-  if (newsize > reserve_size_ ||
-      reserve_size_ > kAutoBufferShrinkReserveThreshold) {
-    char* newdata = static_cast<char*>(realloc(data_, newsize));
-    // If realloc fails, everything remains unchanged.
-    if (!newdata && newsize) return false;
-
-    reserve_size_ = newsize;
-    data_ = newdata;
-  }
-  if (size_ > newsize) size_ = newsize;
-  return true;
-}
-
-bool AutoFreeBuffer::Resize(size_t newsize) {
-  // If reservation is small, and we get a shrink request, simply reduce size_.
-  if (reserve_size_ < kAutoBufferShrinkReserveThreshold && newsize < size_) {
-    size_ = newsize;
-    return true;
-  }
-
-  if (!Reserve(newsize)) return false;
-
-  // Should we keep this? Sounds like it should be called Grow().
-  if (newsize > size_) memset(&data_[size_], 0, newsize - size_);
-  size_ = newsize;
-  return true;
-}
-
-bool AutoFreeBuffer::SetToString(const char* in) {
-  size_t newsz = strlen(in) + 1;
-  if (!Resize(newsz)) return false;
-  memcpy(data_, in, newsz);
-  return true;
-}
-
-bool AutoFreeBuffer::Append(const void* new_data, size_t new_data_size) {
-  size_t offset = size_;
-  if (!Resize(offset + new_data_size)) return false;
-  memcpy(&data_[offset], new_data, new_data_size);
-  return true;
-}
-
-size_t AutoFreeBuffer::PrintF(const char* format, ... ) {
-  va_list args;
-
-  // Optimize: Use whatever reservation left we have for initial printf.
-  // If reservation is not long enough, resize and try again.
-
-  va_start(args, format);
-  size_t printf_size = vsnprintf(data_, reserve_size_, format, args);
-  va_end(args);
-
-  // vsnprintf write no more than |reserve_size_| bytes including trailing \0.
-  // Result value equal or greater than |reserve_size_| signals truncated
-  // output.
-  if (printf_size < reserve_size_) {
-    size_ = printf_size + 1;
-    return printf_size;
-  }
-
-  // Grow buffer and re-try printf.
-  if (!Resize(printf_size + 1)) return 0;
-  va_start(args, format);
-  vsprintf(data_, format, args);
-  va_end(args);
-  return printf_size;
-}
-
diff --git a/common/libs/auto_resources/auto_resources.h b/common/libs/auto_resources/auto_resources.h
deleted file mode 100644
index 6dca6a8..0000000
--- a/common/libs/auto_resources/auto_resources.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef CUTTLEFISH_COMMON_COMMON_LIBS_AUTO_RESOURCES_AUTO_RESOURCES_H_
-#define CUTTLEFISH_COMMON_COMMON_LIBS_AUTO_RESOURCES_AUTO_RESOURCES_H_
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-template <typename T, size_t N>
-char (&ArraySizeHelper(T (&array)[N]))[N];
-
-template <typename T, size_t N>
-char (&ArraySizeHelper(const T (&array)[N]))[N];
-
-#define arraysize(array) (sizeof(ArraySizeHelper(array)))
-
-// In C++11 this is just std::vector<char>, but Android isn't
-// there yet.
-class AutoFreeBuffer {
- public:
-  enum {
-    // Minimum reserve size of AutoFreeBuffer to consider shrinking reservation.
-    // Any buffer shorter than this will not be shrunk.
-    kAutoBufferShrinkReserveThreshold = 8192
-  };
-
-  AutoFreeBuffer()
-      : data_(NULL), size_(0), reserve_size_(0) {}
-
-  AutoFreeBuffer(size_t reserve_size)
-      : data_(NULL), size_(0), reserve_size_(0) {
-    Reserve(reserve_size);
-  }
-
-  ~AutoFreeBuffer();
-  void Clear();
-  bool Resize(size_t newsize);
-  bool Reserve(size_t newsize);
-  bool SetToString(const char* in);
-  bool Append(const void* new_data, size_t new_data_size);
-  size_t PrintF(const char* format, ... );
-
-  char* data() {
-    return data_;
-  }
-
-  const char* data() const {
-    return data_;
-  }
-
-  char* begin() {
-    return data_;
-  }
-
-  const char* begin() const {
-    return data_;
-  }
-
-  char* end() {
-    return data_ + size_;
-  }
-
-  const char* end() const {
-    return data_ + size_;
-  }
-
-  size_t size() const {
-    return size_;
-  }
-
-  size_t reserve_size() const {
-    return reserve_size_;
-  }
-
-  void Swap(AutoFreeBuffer& other) {
-    char* temp_ptr = data_;
-    data_ = other.data_;
-    other.data_ = temp_ptr;
-
-    size_t temp_size = size_;
-    size_ = other.size_;
-    other.size_ = temp_size;
-
-    temp_size = reserve_size_;
-    reserve_size_ = other.reserve_size_;
-    other.reserve_size_ = temp_size;
-  }
-
-  bool operator==(const AutoFreeBuffer& other) const {
-    return (size_ == other.size_) && !memcmp(data_, other.data_, size_);
-  }
-
-  bool operator!=(const AutoFreeBuffer& other) const {
-    return !(*this == other);
-  }
-
- protected:
-  char *data_;
-  size_t size_;
-  size_t reserve_size_;
-
- private:
-  AutoFreeBuffer& operator=(const AutoFreeBuffer&);
-  explicit AutoFreeBuffer(const AutoFreeBuffer&);
-};
-#endif  // CUTTLEFISH_COMMON_COMMON_LIBS_AUTO_RESOURCES_AUTO_RESOURCES_H_
diff --git a/common/libs/fs/shared_fd.cpp b/common/libs/fs/shared_fd.cpp
index 061432a..82baad3 100644
--- a/common/libs/fs/shared_fd.cpp
+++ b/common/libs/fs/shared_fd.cpp
@@ -25,7 +25,6 @@
 #include <algorithm>
 #include <vector>
 
-#include "common/libs/auto_resources/auto_resources.h"
 #include "common/libs/glog/logging.h"
 #include "common/libs/fs/shared_select.h"
 
diff --git a/common/libs/fs/shared_fd.h b/common/libs/fs/shared_fd.h
index b64ad09..99deef1 100644
--- a/common/libs/fs/shared_fd.h
+++ b/common/libs/fs/shared_fd.h
@@ -40,7 +40,6 @@
 #include <string.h>
 #include <unistd.h>
 
-#include "common/libs/auto_resources/auto_resources.h"
 #include "vm_sockets.h"
 
 /**
diff --git a/guest/hals/camera/EmulatedFakeCamera2.cpp b/guest/hals/camera/EmulatedFakeCamera2.cpp
index e292361..393adf1 100644
--- a/guest/hals/camera/EmulatedFakeCamera2.cpp
+++ b/guest/hals/camera/EmulatedFakeCamera2.cpp
@@ -32,12 +32,19 @@
 #include "EmulatedCameraFactory.h"
 #include "EmulatedFakeCamera2.h"
 #include "GrallocModule.h"
-#include "common/libs/auto_resources/auto_resources.h"
 
 #define ERROR_CAMERA_NOT_PRESENT -EPIPE
 
 #define CAMERA2_EXT_TRIGGER_TESTING_DISCONNECT 0xFFFFFFFF
 
+template <typename T, size_t N>
+char (&ArraySizeHelper(T (&array)[N]))[N];
+
+template <typename T, size_t N>
+char (&ArraySizeHelper(const T (&array)[N]))[N];
+
+#define arraysize(array) (sizeof(ArraySizeHelper(array)))
+
 namespace android {
 
 const int64_t USEC = 1000LL;
diff --git a/guest/hals/gralloc/legacy/gralloc.cpp b/guest/hals/gralloc/legacy/gralloc.cpp
index dbe2838..28e71eb 100644
--- a/guest/hals/gralloc/legacy/gralloc.cpp
+++ b/guest/hals/gralloc/legacy/gralloc.cpp
@@ -35,7 +35,6 @@
 #include <hardware/hardware.h>
 #include <hardware/gralloc.h>
 
-#include "common/libs/auto_resources/auto_resources.h"
 #include "gralloc_vsoc_priv.h"
 #include "region_registry.h"
 
