Move dvr_buffer_queue-test to use Android.mk

It seems that Android.bp is having trouble building against NDK. Other
minor changes include:

1/ Removes the test's dependency on libbase.
2/ Uses libandroid for ANativeWindow symbols instead of using
libnativewindow.
3/ Set RTLD_NODELETE during dlopen, so that the test binary won't crash
on pre-Android P devices.

Bug: 64723700
Test: dvr_buffer_queue-test binary built on master runs on devices with
      Android 8.0.0, 8.1.0, and master branch.
Change-Id: Id7a7e242ba3d35c352fa049ab1c5c50a77ede682
diff --git a/libs/vr/libdvr/tests/Android.bp b/libs/vr/libdvr/tests/Android.bp
index ac20760..1ae75fb 100644
--- a/libs/vr/libdvr/tests/Android.bp
+++ b/libs/vr/libdvr/tests/Android.bp
@@ -52,24 +52,3 @@
     ],
     name: "dvr_api-test",
 }
-
-cc_test {
-    srcs: [
-        "dvr_buffer_queue-test.cpp",
-    ],
-
-    header_libs: [
-        "libdvr_headers",
-        "libbase_headers",
-    ],
-    shared_libs: [
-        "liblog",
-        "libnativewindow",
-    ],
-    cflags: [
-        "-DTRACE=0",
-        "-O0",
-        "-g",
-    ],
-    name: "dvr_buffer_queue-test",
-}
diff --git a/libs/vr/libdvr/tests/Android.mk b/libs/vr/libdvr/tests/Android.mk
new file mode 100644
index 0000000..b3fae47
--- /dev/null
+++ b/libs/vr/libdvr/tests/Android.mk
@@ -0,0 +1,46 @@
+# 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE:= dvr_buffer_queue-test
+
+# Includes the dvr_api.h header. Tests should only include "dvr_api.h",
+# and shall only get access to |dvrGetApi|, as other symbols are hidden from the
+# library.
+LOCAL_C_INCLUDES := \
+    frameworks/native/libs/vr/libdvr/include \
+
+LOCAL_SANITIZE := thread
+
+LOCAL_SRC_FILES := \
+    dvr_buffer_queue-test.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+    libandroid \
+    liblog \
+
+LOCAL_CFLAGS := \
+    -DTRACE=0 \
+    -O2 \
+    -g \
+
+# DTS Should only link to NDK libraries.
+LOCAL_SDK_VERSION := 26
+LOCAL_NDK_STL_VARIANT := c++_static
+
+# TODO(b/73133405): Currently, builing cc_test against NDK using Android.bp
+# doesn't work well. Migrate to use Android.bp once b/73133405 gets fixed.
+include $(BUILD_NATIVE_TEST)
diff --git a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
index adf6977..ea37935 100644
--- a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
@@ -1,4 +1,3 @@
-#include <android-base/unique_fd.h>
 #include <android/log.h>
 #include <android/native_window.h>
 #include <dlfcn.h>
@@ -46,7 +45,14 @@
 
  protected:
   void SetUp() override {
-    platform_handle_ = dlopen("libdvr.so", RTLD_NOW | RTLD_LOCAL);
+    int flags = RTLD_NOW | RTLD_LOCAL;
+
+    // Here we need to ensure that libdvr is loaded with RTLD_NODELETE flag set
+    // (so that calls to `dlclose` don't actually unload the library). This is a
+    // workaround for an Android NDK bug. See more detail:
+    // https://github.com/android-ndk/ndk/issues/360
+    flags |= RTLD_NODELETE;
+    platform_handle_ = dlopen("libdvr.so", flags);
     ASSERT_NOT_NULL(platform_handle_) << "Dvr shared library missing.";
 
     auto dvr_get_api = reinterpret_cast<decltype(&dvrGetApi)>(
@@ -192,7 +198,7 @@
   ASSERT_TRUE(api_.WriteBufferIsValid(wb));
   ALOGD_IF(TRACE, "TestDequeuePostDequeueRelease, gain buffer %p, fence_fd=%d",
            wb, fence_fd);
-  android::base::unique_fd release_fence(fence_fd);
+  close(fence_fd);
 
   // Post buffer to the read_queue.
   meta1.timestamp = 42;
@@ -217,7 +223,7 @@
   ALOGD_IF(TRACE,
            "TestDequeuePostDequeueRelease, acquire buffer %p, fence_fd=%d", rb,
            fence_fd);
-  android::base::unique_fd acquire_fence(fence_fd);
+  close(fence_fd);
 
   // Release buffer to the write_queue.
   ret = api_.ReadBufferQueueReleaseBuffer(read_queue, rb, &meta2,
@@ -304,7 +310,7 @@
   ASSERT_EQ(0, ret);
   ASSERT_TRUE(api_.WriteBufferIsValid(wb1));
   ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p", wb1);
-  android::base::unique_fd release_fence1(fence_fd);
+  close(fence_fd);
 
   // Check the buffer dimension.
   ret = api_.WriteBufferGetAHardwareBuffer(wb1, &ahb1);
@@ -332,7 +338,7 @@
   ASSERT_TRUE(api_.WriteBufferIsValid(wb2));
   ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p, fence_fd=%d", wb2,
            fence_fd);
-  android::base::unique_fd release_fence2(fence_fd);
+  close(fence_fd);
 
   // Check the buffer dimension, should be new width
   ret = api_.WriteBufferGetAHardwareBuffer(wb2, &ahb2);
@@ -359,7 +365,7 @@
   ASSERT_TRUE(api_.WriteBufferIsValid(wb3));
   ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p, fence_fd=%d", wb3,
            fence_fd);
-  android::base::unique_fd release_fence3(fence_fd);
+  close(fence_fd);
 
   // Check the buffer dimension, should be new width
   ret = api_.WriteBufferGetAHardwareBuffer(wb3, &ahb3);