Merge "Clean up getService()."
diff --git a/Android.bp b/Android.bp
index e97c28c..f9b1e96 100644
--- a/Android.bp
+++ b/Android.bp
@@ -35,6 +35,7 @@
     srcs: ["test_main.cpp"],
 
     shared_libs: [
+        "android.hardware.tests.inheritance@1.0",
         "libbase",
         "libhidlbase",
         "libhidltransport",
@@ -45,6 +46,10 @@
     ],
     static_libs: ["libgtest", "libgmock"],
 
+    required: [
+        "android.hardware.tests.inheritance@1.0-impl",
+    ],
+
     cflags: [
         "-O0",
         "-g",
diff --git a/base/Android.bp b/base/Android.bp
index 4505b5e..22f5ee1 100644
--- a/base/Android.bp
+++ b/base/Android.bp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-cc_library_shared {
+cc_library {
     name: "libhidlbase",
     vendor_available: true,
     vndk: {
diff --git a/base/include/hidl/HidlSupport.h b/base/include/hidl/HidlSupport.h
index 2be97c2..e60f2f3 100644
--- a/base/include/hidl/HidlSupport.h
+++ b/base/include/hidl/HidlSupport.h
@@ -303,11 +303,11 @@
     //     destructor
     static sp<HidlMemory> getInstance(const hidl_string& name, int fd, uint64_t size);
 
+    virtual ~HidlMemory();
 protected:
     HidlMemory() : hidl_memory() {}
     HidlMemory(const hidl_string& name, hidl_handle&& handle, size_t size)
         : hidl_memory(name, std::move(handle), size) {}
-    ~HidlMemory();
     HidlMemory& operator=(hidl_memory&& src) {
         hidl_memory::operator=(src);
         return *this;
diff --git a/test_main.cpp b/test_main.cpp
index 2811612..0de46ec 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -17,12 +17,15 @@
 #define LOG_TAG "LibHidlTest"
 
 #include <android-base/logging.h>
-#include <condition_variable>
+#include <android/hardware/tests/inheritance/1.0/IParent.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 #include <hidl/HidlSupport.h>
+#include <hidl/ServiceManagement.h>
 #include <hidl/Status.h>
 #include <hidl/TaskRunner.h>
+#include <condition_variable>
+#include <fstream>
 #include <vector>
 
 #define EXPECT_ARRAYEQ(__a1__, __a2__, __size__) EXPECT_TRUE(isArrayEqual(__a1__, __a2__, __size__))
@@ -46,6 +49,17 @@
     return true;
 }
 
+bool isLibraryOpen(const std::string& lib) {
+    std::ifstream ifs("/proc/self/maps");
+    for (std::string line; std::getline(ifs, line);) {
+        if (line.size() >= lib.size() && line.substr(line.size() - lib.size()) == lib) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 class LibHidlTest : public ::testing::Test {
 public:
     virtual void SetUp() override {
@@ -441,7 +455,17 @@
 
     EXPECT_THAT(toString(Status::fromExceptionCode(Status::EX_NULL_POINTER)),
             HasSubstr("EX_NULL_POINTER"));
+}
 
+TEST_F(LibHidlTest, PreloadTest) {
+    using ::android::hardware::preloadPassthroughService;
+    using ::android::hardware::tests::inheritance::V1_0::IParent;
+
+    static const std::string kLib = "android.hardware.tests.inheritance@1.0-impl.so";
+
+    EXPECT_FALSE(isLibraryOpen(kLib));
+    preloadPassthroughService<IParent>();
+    EXPECT_TRUE(isLibraryOpen(kLib));
 }
 
 int main(int argc, char **argv) {
diff --git a/transport/Android.bp b/transport/Android.bp
index e09cb4d..f4ca01c 100644
--- a/transport/Android.bp
+++ b/transport/Android.bp
@@ -25,7 +25,12 @@
     "token/1.0/utils",
 ]
 
-cc_library_shared {
+hidl_package_root {
+    name: "android.hidl",
+    path: "system/libhidl/transport",
+}
+
+cc_library {
     name: "libhidltransport",
     vendor_available: true,
     vndk: {
diff --git a/transport/HidlPassthroughSupport.cpp b/transport/HidlPassthroughSupport.cpp
index e101e27..b79d21c 100644
--- a/transport/HidlPassthroughSupport.cpp
+++ b/transport/HidlPassthroughSupport.cpp
@@ -35,9 +35,12 @@
         // interfaceDescriptor fails
         return nullptr;
     }
-    auto func = gBsConstructorMap.get(myDescriptor, nullptr);
+    auto func = getBsConstructorMap().get(myDescriptor, nullptr);
     if (!func) {
-        return nullptr;
+        func = gBsConstructorMap.get(myDescriptor, nullptr);
+        if (!func) {
+            return nullptr;
+        }
     }
 
     sp<IBase> base = func(static_cast<void*>(iface.get()));
@@ -51,4 +54,4 @@
 
 }  // namespace details
 }  // namespace hardware
-}  // namespace android
\ No newline at end of file
+}  // namespace android
diff --git a/transport/Static.cpp b/transport/Static.cpp
index 784b835..cbe6add 100644
--- a/transport/Static.cpp
+++ b/transport/Static.cpp
@@ -29,16 +29,28 @@
 Mutex gDefaultServiceManagerLock;
 sp<android::hidl::manager::V1_0::IServiceManager> gDefaultServiceManager;
 
-ConcurrentMap<std::string, std::function<sp<IBinder>(void *)>>
-        gBnConstructorMap{};
+// Deprecated; kept for ABI compatibility. Use getBnConstructorMap.
+BnConstructorMap gBnConstructorMap{};
 
 ConcurrentMap<const ::android::hidl::base::V1_0::IBase*, wp<::android::hardware::BHwBinder>>
     gBnMap{};
 
 ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, SchedPrio> gServicePrioMap{};
 
-ConcurrentMap<std::string, std::function<sp<::android::hidl::base::V1_0::IBase>(void *)>>
-        gBsConstructorMap;
+// Deprecated; kept for ABI compatibility. Use getBsConstructorMap.
+BsConstructorMap gBsConstructorMap{};
+
+// For static executables, it is not guaranteed that gBnConstructorMap are initialized before
+// used in HAL definition libraries.
+BnConstructorMap& getBnConstructorMap() {
+    static BnConstructorMap map{};
+    return map;
+}
+
+BsConstructorMap& getBsConstructorMap() {
+    static BsConstructorMap map{};
+    return map;
+}
 
 }  // namespace details
 }  // namespace hardware
diff --git a/transport/allocator/1.0/Android.bp b/transport/allocator/1.0/Android.bp
index f02d1d1..a3d885a 100644
--- a/transport/allocator/1.0/Android.bp
+++ b/transport/allocator/1.0/Android.bp
@@ -1,141 +1,17 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.allocator@1.0_hal",
-    srcs: [
-        "IAllocator.hal",
-    ],
-}
-
-genrule {
-    name: "android.hidl.allocator@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
-    srcs: [
-        ":android.hidl.allocator@1.0_hal",
-    ],
-    out: [
-        "android/hidl/allocator/1.0/AllocatorAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.allocator@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
-    srcs: [
-        ":android.hidl.allocator@1.0_hal",
-    ],
-    out: [
-        "android/hidl/allocator/1.0/IAllocator.h",
-        "android/hidl/allocator/1.0/IHwAllocator.h",
-        "android/hidl/allocator/1.0/BnHwAllocator.h",
-        "android/hidl/allocator/1.0/BpHwAllocator.h",
-        "android/hidl/allocator/1.0/BsAllocator.h",
-    ],
-}
-
-cc_library {
+hidl_interface {
     name: "android.hidl.allocator@1.0",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.allocator@1.0_genc++"],
-    generated_headers: ["android.hidl.allocator@1.0_genc++_headers"],
-    export_generated_headers: ["android.hidl.allocator@1.0_genc++_headers"],
-    vendor_available: true,
+    root: "android.hidl",
     vndk: {
         enabled: true,
     },
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-    ],
-}
-
-// This package is not java compatible. Not creating java target.
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.allocator@1.0-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
     srcs: [
-        ":android.hidl.allocator@1.0_hal",
+        "IAllocator.hal",
     ],
-    out: [
-        "android/hidl/allocator/1.0/AAllocator.cpp",
+    interfaces: [
+        "android.hidl.base@1.0",
     ],
+    gen_java: false,
 }
 
-genrule {
-    name: "android.hidl.allocator@1.0-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
-    srcs: [
-        ":android.hidl.allocator@1.0_hal",
-    ],
-    out: [
-        "android/hidl/allocator/1.0/AAllocator.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.allocator@1.0-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.allocator@1.0-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.allocator@1.0-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.allocator@1.0-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-        "android.hidl.allocator@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-        "android.hidl.allocator@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-}
-
-genrule {
-    name: "android.hidl.allocator@1.0-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.allocator@1.0-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.allocator@1.0",
-        "android.hidl.allocator@1.0-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.allocator@1.0-adapter_genc++"],
-}
diff --git a/transport/base/1.0/Android.bp b/transport/base/1.0/Android.bp
index 73ee5cf..bd2ae49 100644
--- a/transport/base/1.0/Android.bp
+++ b/transport/base/1.0/Android.bp
@@ -1,137 +1,19 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.base@1.0_hal",
+hidl_interface {
+    name: "android.hidl.base@1.0",
+    root: "android.hidl",
+    core_interface: true,
+    vndk: {
+        enabled: true,
+    },
     srcs: [
         "types.hal",
         "IBase.hal",
     ],
+    types: [
+        "DebugInfo",
+    ],
+    gen_java: true,
 }
 
-genrule {
-    name: "android.hidl.base@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    srcs: [
-        ":android.hidl.base@1.0_hal",
-    ],
-    out: [
-        "android/hidl/base/1.0/types.cpp",
-        "android/hidl/base/1.0/BaseAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.base@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    srcs: [
-        ":android.hidl.base@1.0_hal",
-    ],
-    out: [
-        "android/hidl/base/1.0/types.h",
-        "android/hidl/base/1.0/hwtypes.h",
-        "android/hidl/base/1.0/IBase.h",
-        "android/hidl/base/1.0/IHwBase.h",
-        "android/hidl/base/1.0/BnHwBase.h",
-        "android/hidl/base/1.0/BpHwBase.h",
-        "android/hidl/base/1.0/BsBase.h",
-    ],
-}
-
-// android.hidl.base@1.0 is exported from libhidltransport
-
-genrule {
-    name: "android.hidl.base-V1.0-java_gen_java",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Ljava -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    srcs: [
-        ":android.hidl.base@1.0_hal",
-    ],
-    out: [
-        "android/hidl/base/V1_0/DebugInfo.java",
-        "android/hidl/base/V1_0/IBase.java",
-    ],
-}
-
-java_library {
-    name: "android.hidl.base-V1.0-java",
-    no_framework_libs: true,
-    defaults: ["hidl-java-module-defaults"],
-    srcs: [":android.hidl.base-V1.0-java_gen_java"],
-    libs: [
-        "hwbinder",
-    ]
-}
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.base@1.0-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    srcs: [
-        ":android.hidl.base@1.0_hal",
-    ],
-    out: [
-        "android/hidl/base/1.0/ABase.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.base@1.0-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    srcs: [
-        ":android.hidl.base@1.0_hal",
-    ],
-    out: [
-        "android/hidl/base/1.0/ABase.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.base@1.0-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.base@1.0-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.base@1.0-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.base@1.0-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-    ],
-}
-
-genrule {
-    name: "android.hidl.base@1.0-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.base@1.0-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.base@1.0-adapter_genc++"],
-}
diff --git a/transport/include/hidl/HidlBinderSupport.h b/transport/include/hidl/HidlBinderSupport.h
index fc834b9..09111f4 100644
--- a/transport/include/hidl/HidlBinderSupport.h
+++ b/transport/include/hidl/HidlBinderSupport.h
@@ -330,9 +330,12 @@
         sp<IBinder> sBnObj = wBnObj.promote();
 
         if (sBnObj == nullptr) {
-            auto func = details::gBnConstructorMap.get(myDescriptor, nullptr);
+            auto func = details::getBnConstructorMap().get(myDescriptor, nullptr);
             if (!func) {
-                return nullptr;
+                func = details::gBnConstructorMap.get(myDescriptor, nullptr);
+                if (!func) {
+                    return nullptr;
+                }
             }
 
             sBnObj = sp<IBinder>(func(static_cast<void*>(ifacePtr)));
diff --git a/transport/include/hidl/Static.h b/transport/include/hidl/Static.h
index 63b06fe..0522e44 100644
--- a/transport/include/hidl/Static.h
+++ b/transport/include/hidl/Static.h
@@ -40,18 +40,22 @@
 extern ConcurrentMap<const ::android::hidl::base::V1_0::IBase*, wp<::android::hardware::BHwBinder>>
     gBnMap;
 
+using BnConstructorMap = ConcurrentMap<std::string, std::function<sp<IBinder>(void*)>>;
 // For HidlBinderSupport and autogenerated code
 // value function receives reinterpret_cast<void *>(static_cast<IFoo *>(foo)),
 // returns sp<IBinder>
-extern ConcurrentMap<std::string,
-        std::function<sp<IBinder>(void *)>> gBnConstructorMap;
+// deprecated; use getBnConstructorMap instead.
+extern BnConstructorMap gBnConstructorMap;
+BnConstructorMap& getBnConstructorMap();
 
+using BsConstructorMap = ConcurrentMap<std::string,
+        std::function<sp<::android::hidl::base::V1_0::IBase>(void*)>>;
 // For HidlPassthroughSupport and autogenerated code
 // value function receives reinterpret_cast<void *>(static_cast<IFoo *>(foo)),
 // returns sp<IBase>
-extern ConcurrentMap<std::string,
-        std::function<sp<::android::hidl::base::V1_0::IBase>(void *)>> gBsConstructorMap;
-
+// deprecated; use getBsConstructorMap instead.
+extern BsConstructorMap gBsConstructorMap;
+BsConstructorMap& getBsConstructorMap();
 }  // namespace details
 }  // namespace hardware
 }  // namespace android
diff --git a/transport/manager/1.0/Android.bp b/transport/manager/1.0/Android.bp
index a0898d7..e4a120b 100644
--- a/transport/manager/1.0/Android.bp
+++ b/transport/manager/1.0/Android.bp
@@ -1,145 +1,19 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.manager@1.0_hal",
+hidl_interface {
+    name: "android.hidl.manager@1.0",
+    root: "android.hidl",
+    core_interface: true,
+    vndk: {
+        enabled: true,
+    },
     srcs: [
         "IServiceManager.hal",
         "IServiceNotification.hal",
     ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
 }
 
-genrule {
-    name: "android.hidl.manager@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    srcs: [
-        ":android.hidl.manager@1.0_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.0/ServiceManagerAll.cpp",
-        "android/hidl/manager/1.0/ServiceNotificationAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    srcs: [
-        ":android.hidl.manager@1.0_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.0/IServiceManager.h",
-        "android/hidl/manager/1.0/IHwServiceManager.h",
-        "android/hidl/manager/1.0/BnHwServiceManager.h",
-        "android/hidl/manager/1.0/BpHwServiceManager.h",
-        "android/hidl/manager/1.0/BsServiceManager.h",
-        "android/hidl/manager/1.0/IServiceNotification.h",
-        "android/hidl/manager/1.0/IHwServiceNotification.h",
-        "android/hidl/manager/1.0/BnHwServiceNotification.h",
-        "android/hidl/manager/1.0/BpHwServiceNotification.h",
-        "android/hidl/manager/1.0/BsServiceNotification.h",
-    ],
-}
-
-// android.hidl.manager@1.0 is exported from libhidltransport
-
-genrule {
-    name: "android.hidl.manager-V1.0-java_gen_java",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Ljava -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    srcs: [
-        ":android.hidl.manager@1.0_hal",
-    ],
-    out: [
-        "android/hidl/manager/V1_0/IServiceManager.java",
-        "android/hidl/manager/V1_0/IServiceNotification.java",
-    ],
-}
-
-java_library {
-    name: "android.hidl.manager-V1.0-java",
-    no_framework_libs: true,
-    defaults: ["hidl-java-module-defaults"],
-    srcs: [":android.hidl.manager-V1.0-java_gen_java"],
-    libs: [
-        "hwbinder",
-        "android.hidl.base-V1.0-java",
-    ]
-}
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.manager@1.0-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    srcs: [
-        ":android.hidl.manager@1.0_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.0/AServiceManager.cpp",
-        "android/hidl/manager/1.0/AServiceNotification.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.0-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    srcs: [
-        ":android.hidl.manager@1.0_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.0/AServiceManager.h",
-        "android/hidl/manager/1.0/AServiceNotification.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.manager@1.0-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.manager@1.0-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.manager@1.0-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.manager@1.0-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.0-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.manager@1.0-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.manager@1.0-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.manager@1.0-adapter_genc++"],
-}
diff --git a/transport/manager/1.1/Android.bp b/transport/manager/1.1/Android.bp
index 7a4094e..cde68a7 100644
--- a/transport/manager/1.1/Android.bp
+++ b/transport/manager/1.1/Android.bp
@@ -1,138 +1,19 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.manager@1.1_hal",
+hidl_interface {
+    name: "android.hidl.manager@1.1",
+    root: "android.hidl",
+    core_interface: true,
+    vndk: {
+        enabled: true,
+    },
     srcs: [
         "IServiceManager.hal",
     ],
+    interfaces: [
+        "android.hidl.base@1.0",
+        "android.hidl.manager@1.0",
+    ],
+    gen_java: true,
 }
 
-genrule {
-    name: "android.hidl.manager@1.1_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    srcs: [
-        ":android.hidl.manager@1.1_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.1/ServiceManagerAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.1_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    srcs: [
-        ":android.hidl.manager@1.1_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.1/IServiceManager.h",
-        "android/hidl/manager/1.1/IHwServiceManager.h",
-        "android/hidl/manager/1.1/BnHwServiceManager.h",
-        "android/hidl/manager/1.1/BpHwServiceManager.h",
-        "android/hidl/manager/1.1/BsServiceManager.h",
-    ],
-}
-
-// android.hidl.manager@1.1 is exported from libhidltransport
-
-genrule {
-    name: "android.hidl.manager-V1.1-java_gen_java",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Ljava -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    srcs: [
-        ":android.hidl.manager@1.1_hal",
-    ],
-    out: [
-        "android/hidl/manager/V1_1/IServiceManager.java",
-    ],
-}
-
-java_library {
-    name: "android.hidl.manager-V1.1-java",
-    no_framework_libs: true,
-    defaults: ["hidl-java-module-defaults"],
-    srcs: [":android.hidl.manager-V1.1-java_gen_java"],
-    libs: [
-        "hwbinder",
-        "android.hidl.base-V1.0-java",
-        "android.hidl.manager-V1.0-java",
-    ]
-}
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.manager@1.1-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    srcs: [
-        ":android.hidl.manager@1.1_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.1/AServiceManager.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.1-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    srcs: [
-        ":android.hidl.manager@1.1_hal",
-    ],
-    out: [
-        "android/hidl/manager/1.1/AServiceManager.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.manager@1.1-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.manager@1.1-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.manager@1.1-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.manager@1.1-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-        "android.hidl.base@1.0-adapter-helper",
-        "android.hidl.manager@1.0-adapter-helper",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-        "android.hidl.base@1.0-adapter-helper",
-        "android.hidl.manager@1.0-adapter-helper",
-    ],
-}
-
-genrule {
-    name: "android.hidl.manager@1.1-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.manager@1.1-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.manager@1.1-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.manager@1.1-adapter_genc++"],
-}
diff --git a/transport/memory/1.0/Android.bp b/transport/memory/1.0/Android.bp
index cf24616..eaa3037 100644
--- a/transport/memory/1.0/Android.bp
+++ b/transport/memory/1.0/Android.bp
@@ -1,151 +1,19 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.memory@1.0_hal",
-    srcs: [
-        "IMapper.hal",
-        "IMemory.hal",
-    ],
-}
-
-genrule {
-    name: "android.hidl.memory@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
-    srcs: [
-        ":android.hidl.memory@1.0_hal",
-    ],
-    out: [
-        "android/hidl/memory/1.0/MapperAll.cpp",
-        "android/hidl/memory/1.0/MemoryAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.memory@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
-    srcs: [
-        ":android.hidl.memory@1.0_hal",
-    ],
-    out: [
-        "android/hidl/memory/1.0/IMapper.h",
-        "android/hidl/memory/1.0/IHwMapper.h",
-        "android/hidl/memory/1.0/BnHwMapper.h",
-        "android/hidl/memory/1.0/BpHwMapper.h",
-        "android/hidl/memory/1.0/BsMapper.h",
-        "android/hidl/memory/1.0/IMemory.h",
-        "android/hidl/memory/1.0/IHwMemory.h",
-        "android/hidl/memory/1.0/BnHwMemory.h",
-        "android/hidl/memory/1.0/BpHwMemory.h",
-        "android/hidl/memory/1.0/BsMemory.h",
-    ],
-}
-
-cc_library {
+hidl_interface {
     name: "android.hidl.memory@1.0",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.memory@1.0_genc++"],
-    generated_headers: ["android.hidl.memory@1.0_genc++_headers"],
-    export_generated_headers: ["android.hidl.memory@1.0_genc++_headers"],
-    vendor_available: true,
+    root: "android.hidl",
     vndk: {
         enabled: true,
         support_system_process: true,
     },
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-    ],
-}
-
-// This package is not java compatible. Not creating java target.
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.memory@1.0-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
     srcs: [
-        ":android.hidl.memory@1.0_hal",
+        "IMapper.hal",
+        "IMemory.hal",
     ],
-    out: [
-        "android/hidl/memory/1.0/AMapper.cpp",
-        "android/hidl/memory/1.0/AMemory.cpp",
+    interfaces: [
+        "android.hidl.base@1.0",
     ],
+    gen_java: false,
 }
 
-genrule {
-    name: "android.hidl.memory@1.0-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
-    srcs: [
-        ":android.hidl.memory@1.0_hal",
-    ],
-    out: [
-        "android/hidl/memory/1.0/AMapper.h",
-        "android/hidl/memory/1.0/AMemory.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.memory@1.0-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.memory@1.0-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.memory@1.0-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.memory@1.0-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-        "android.hidl.memory@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-        "android.hidl.memory@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-}
-
-genrule {
-    name: "android.hidl.memory@1.0-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.memory@1.0-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.memory@1.0",
-        "android.hidl.memory@1.0-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.memory@1.0-adapter_genc++"],
-}
diff --git a/transport/token/1.0/Android.bp b/transport/token/1.0/Android.bp
index 1bc6d97..c0988cb 100644
--- a/transport/token/1.0/Android.bp
+++ b/transport/token/1.0/Android.bp
@@ -1,162 +1,17 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
+// This file is autogenerated by hidl-gen -Landroidbp.
 
-filegroup {
-    name: "android.hidl.token@1.0_hal",
-    srcs: [
-        "ITokenManager.hal",
-    ],
-}
-
-genrule {
-    name: "android.hidl.token@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
-    srcs: [
-        ":android.hidl.token@1.0_hal",
-    ],
-    out: [
-        "android/hidl/token/1.0/TokenManagerAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.token@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
-    srcs: [
-        ":android.hidl.token@1.0_hal",
-    ],
-    out: [
-        "android/hidl/token/1.0/ITokenManager.h",
-        "android/hidl/token/1.0/IHwTokenManager.h",
-        "android/hidl/token/1.0/BnHwTokenManager.h",
-        "android/hidl/token/1.0/BpHwTokenManager.h",
-        "android/hidl/token/1.0/BsTokenManager.h",
-    ],
-}
-
-cc_library {
+hidl_interface {
     name: "android.hidl.token@1.0",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.token@1.0_genc++"],
-    generated_headers: ["android.hidl.token@1.0_genc++_headers"],
-    export_generated_headers: ["android.hidl.token@1.0_genc++_headers"],
-    vendor_available: true,
+    root: "android.hidl",
     vndk: {
         enabled: true,
     },
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-    ],
-}
-
-genrule {
-    name: "android.hidl.token-V1.0-java_gen_java",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Ljava -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
     srcs: [
-        ":android.hidl.token@1.0_hal",
+        "ITokenManager.hal",
     ],
-    out: [
-        "android/hidl/token/V1_0/ITokenManager.java",
+    interfaces: [
+        "android.hidl.base@1.0",
     ],
+    gen_java: true,
 }
 
-java_library {
-    name: "android.hidl.token-V1.0-java",
-    no_framework_libs: true,
-    defaults: ["hidl-java-module-defaults"],
-    srcs: [":android.hidl.token-V1.0-java_gen_java"],
-    libs: [
-        "hwbinder",
-        "android.hidl.base-V1.0-java",
-    ]
-}
-
-// This package does not export any types. Not creating java constants export.
-
-
-genrule {
-    name: "android.hidl.token@1.0-adapter-helper_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
-    srcs: [
-        ":android.hidl.token@1.0_hal",
-    ],
-    out: [
-        "android/hidl/token/1.0/ATokenManager.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hidl.token@1.0-adapter-helper_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
-    srcs: [
-        ":android.hidl.token@1.0_hal",
-    ],
-    out: [
-        "android/hidl/token/1.0/ATokenManager.h",
-    ],
-}
-
-cc_library {
-    name: "android.hidl.token@1.0-adapter-helper",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hidl.token@1.0-adapter-helper_genc++"],
-    generated_headers: ["android.hidl.token@1.0-adapter-helper_genc++_headers"],
-    export_generated_headers: ["android.hidl.token@1.0-adapter-helper_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libhidladapter",
-        "android.hidl.token@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libhidladapter",
-        "android.hidl.token@1.0",
-        "android.hidl.base@1.0-adapter-helper",
-    ],
-}
-
-genrule {
-    name: "android.hidl.token@1.0-adapter_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
-    out: ["main.cpp"]
-}
-
-cc_test {
-    name: "android.hidl.token@1.0-adapter",
-    defaults: ["hidl-module-defaults"],
-    shared_libs: [
-        "libhidladapter",
-        "libhidlbase",
-        "libhidltransport",
-        "libutils",
-        "android.hidl.token@1.0",
-        "android.hidl.token@1.0-adapter-helper",
-    ],
-    generated_sources: ["android.hidl.token@1.0-adapter_genc++"],
-}