diff --git a/libbpf/Android.bp b/libbpf/Android.bp
new file mode 100644
index 0000000..4bf151a
--- /dev/null
+++ b/libbpf/Android.bp
@@ -0,0 +1,83 @@
+//
+// Copyright (C) 2018 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_headers {
+    name: "libbpf_headers",
+    vendor_available: false,
+    host_supported: false,
+    export_include_dirs: ["include"],
+    target: {
+        linux_bionic: {
+            enabled: true,
+        },
+    },
+}
+
+cc_library {
+    name: "libbpf",
+    vendor_available: false,
+    host_supported: false,
+    target: {
+        android: {
+            srcs: [
+                "BpfUtils.cpp",
+            ],
+            sanitize: {
+                misc_undefined: ["integer"],
+            },
+        },
+    },
+
+    shared_libs: [
+        "libbase",
+        "libutils",
+        "liblog",
+        "libnetdutils",
+    ],
+    header_libs: [
+        "libbpf_headers"
+    ],
+    export_header_lib_headers: ["libbpf_headers"],
+    local_include_dirs: ["include"],
+
+    defaults: ["bpf_defaults"],
+    cflags: [
+        "-Werror",
+        "-Wall",
+        "-Wextra",
+    ],
+}
+
+cc_test {
+    name: "libbpf_test",
+    srcs: [
+        "BpfMapTest.cpp",
+    ],
+    defaults: ["bpf_defaults"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-Wno-error=unused-variable",
+    ],
+    static_libs: ["libgmock"],
+    shared_libs: [
+        "libbpf",
+        "libbase",
+        "liblog",
+        "libnetdutils",
+        "libutils",
+    ],
+}
diff --git a/libbpf/BpfMapTest.cpp b/libbpf/BpfMapTest.cpp
index e367bdb..d0bd79e 100644
--- a/libbpf/BpfMapTest.cpp
+++ b/libbpf/BpfMapTest.cpp
@@ -33,16 +33,9 @@
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 
-#include <netdutils/MockSyscalls.h>
 #include "bpf/BpfMap.h"
-#include "bpf/BpfNetworkStats.h"
 #include "bpf/BpfUtils.h"
 
-using ::testing::_;
-using ::testing::ByMove;
-using ::testing::Invoke;
-using ::testing::Return;
-using ::testing::StrictMock;
 using ::testing::Test;
 
 namespace android {
diff --git a/libbpf/BpfUtils.cpp b/libbpf/BpfUtils.cpp
index 955f2ec..cec8911 100644
--- a/libbpf/BpfUtils.cpp
+++ b/libbpf/BpfUtils.cpp
@@ -381,7 +381,7 @@
 
 int parseProgramsFromFile(const char* path, BpfProgInfo* programs, size_t size,
                           const std::vector<BpfMapInfo>& mapPatterns) {
-    unique_fd fd(open(path, O_RDONLY));
+    unique_fd fd(open(path, O_RDONLY | O_CLOEXEC));
     int ret;
     if (fd < 0) {
         ret = -errno;
diff --git a/libbpf/include/bpf/BpfMap.h b/libbpf/include/bpf/BpfMap.h
index 20db43e..deeed14 100644
--- a/libbpf/include/bpf/BpfMap.h
+++ b/libbpf/include/bpf/BpfMap.h
@@ -47,7 +47,7 @@
 class BpfMap {
   public:
     BpfMap<Key, Value>() : mMapFd(-1){};
-    BpfMap<Key, Value>(int fd) : mMapFd(fd){};
+    explicit BpfMap<Key, Value>(int fd) : mMapFd(fd){};
     BpfMap<Key, Value>(bpf_map_type map_type, uint32_t max_entries, uint32_t map_flags) {
         int map_fd = createMap(map_type, sizeof(Key), sizeof(Value), max_entries, map_flags);
         if (map_fd < 0) {
@@ -57,7 +57,7 @@
         }
     }
 
-    netdutils::Status pinToPath(const std::string path) {
+    netdutils::Status pinToPath(const std::string& path) {
         int ret = bpfFdPin(mMapFd, path.c_str());
         if (ret) {
             return netdutils::statusFromErrno(errno,
