diff --git a/Android.bp b/Android.bp
index 0a808e9..c44423f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -615,26 +615,18 @@
                 "daemon/restart_service.cpp",
             ],
             shared_libs: [
-                "libbinder_ndk",
                 "libmdnssd",
                 "libselinux",
             ],
-            static_libs: [
-                "adbroot_aidl_interface-ndk",
-            ],
         },
         recovery: {
             exclude_srcs: [
                 "daemon/abb_service.cpp",
             ],
             exclude_shared_libs: [
-                "libbinder_ndk",
                 "libadb_pairing_auth",
                 "libadb_pairing_connection",
             ],
-            exclude_static_libs: [
-                "adbroot_aidl_interface-ndk",
-            ],
         },
     },
 
@@ -744,25 +736,10 @@
     ],
 
     target: {
-        android: {
-            shared_libs: [
-                "libbinder_ndk",
-            ],
-
-            static_libs: [
-                "adbroot_aidl_interface-ndk",
-            ],
-        },
-
         recovery: {
             exclude_shared_libs: [
                 "libadb_pairing_auth",
                 "libadb_pairing_connection",
-                "libbinder_ndk",
-            ],
-
-            exclude_static_libs: [
-                "adbroot_aidl_interface-ndk",
             ],
         }
     },
@@ -790,27 +767,6 @@
 }
 
 cc_binary {
-    name: "adb_root",
-    srcs: [
-        "root/adbroot_service.cpp",
-        "root/main.cpp",
-    ],
-    init_rc: [
-        "root/adb_root.rc",
-    ],
-    shared_libs: [
-        "libbase",
-        "libbinder_ndk",
-        "liblog",
-        "libutils",
-    ],
-    static_libs: [
-        "adbroot_aidl_interface-ndk",
-    ],
-    system_ext_specific: true,
-}
-
-cc_binary {
     name: "abb",
 
     defaults: ["adbd_defaults"],
@@ -1029,34 +985,3 @@
         "fastdeploy/testdata/sample.cd",
     ],
 }
-
-aidl_interface {
-    name: "adbroot_aidl_interface",
-    unstable: true,
-    local_include_dir: "aidl",
-    srcs: [
-        "aidl/android/adbroot/IADBRootService.aidl",
-    ],
-    backend: {
-        cpp: {
-            enabled: false,
-        },
-        java: {
-            enabled: false,
-        },
-        ndk: {
-            apex_available: [
-                "//apex_available:platform",
-                "com.android.adbd",
-            ],
-            min_sdk_version: "30",
-        },
-    },
-}
-
-filegroup {
-    name: "adbrootservice_aidl",
-    srcs: [
-        "aidl/android/adbroot/IADBRootService.aidl",
-    ],
-}
diff --git a/aidl/android/adbroot/IADBRootService.aidl b/aidl/android/adbroot/IADBRootService.aidl
deleted file mode 100644
index 1a07efb..0000000
--- a/aidl/android/adbroot/IADBRootService.aidl
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2019 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.
- */
-package android.adbroot;
-
-/** {@hide} */
-interface IADBRootService {
-    boolean isSupported();
-    void setEnabled(boolean enabled);
-    boolean getEnabled();
-}
diff --git a/daemon/restart_service.cpp b/daemon/restart_service.cpp
index c942c1f..16d2627 100644
--- a/daemon/restart_service.cpp
+++ b/daemon/restart_service.cpp
@@ -16,11 +16,6 @@
 
 #define TRACE_TAG SERVICES
 
-#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
-#include <aidl/android/adbroot/IADBRootService.h>
-#include <android/binder_manager.h>
-#endif
-
 #include "sysdeps.h"
 
 #include <unistd.h>
@@ -38,33 +33,10 @@
         WriteFdExactly(fd.get(), "adbd is already running as root\n");
         return;
     }
-
-#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService("adbroot_service"));
-    std::shared_ptr<aidl::android::adbroot::IADBRootService> service =
-            aidl::android::adbroot::IADBRootService::fromBinder(binder);
-    if (!service) {
-        LOG(ERROR) << "Failed to get adbroot_service interface";
-        return;
-    }
-#endif
-
-#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
-    bool enabled = false;
-    if (auto status = service->getEnabled(&enabled); !status.isOk()) {
-#endif
     if (!__android_log_is_debuggable()) {
         WriteFdExactly(fd.get(), "adbd cannot run as root in production builds\n");
         return;
     }
-#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
-    }
-    if (!enabled) {
-        WriteFdExactly(fd, "ADB Root access is disabled by system setting - "
-                "enable in Settings -> System -> Developer options\n");
-        return;
-    }
-#endif
 
     LOG(INFO) << "adbd restarting as root";
     android::base::SetProperty("service.adb.root", "1");
diff --git a/root/adb_root.rc b/root/adb_root.rc
deleted file mode 100644
index 8c65c0b..0000000
--- a/root/adb_root.rc
+++ /dev/null
@@ -1,7 +0,0 @@
-service adb_root /system_ext/bin/adb_root
-    class main
-    user root
-    group root
-
-on post-fs-data
-    mkdir /data/adbroot 0700 root root
diff --git a/root/adbroot_service.cpp b/root/adbroot_service.cpp
deleted file mode 100644
index 710a521..0000000
--- a/root/adbroot_service.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2019 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 <android/binder_manager.h>
-#include <android-base/file.h>
-#include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <android-base/strings.h>
-#include <private/android_filesystem_config.h>
-
-#include "adbroot_service.h"
-
-namespace {
-const std::string kStoragePath = "/data/adbroot/";
-const std::string kEnabled = "enabled";
-
-static ndk::ScopedAStatus SecurityException(const std::string& msg) {
-    LOG(ERROR) << msg;
-    return ndk::ScopedAStatus(AStatus_fromExceptionCodeWithMessage(EX_SECURITY, msg.c_str()));
-}
-}  // anonymous namespace
-
-namespace aidl {
-namespace android {
-namespace adbroot {
-
-using ::android::AutoMutex;
-using ::android::base::ReadFileToString;
-using ::android::base::SetProperty;
-using ::android::base::Trim;
-using ::android::base::WriteStringToFile;
-
-ADBRootService::ADBRootService() : enabled_(false) {
-    std::string buf;
-    if (ReadFileToString(kStoragePath + kEnabled, &buf)) {
-        enabled_ = Trim(buf) == "1";
-    }
-}
-
-void ADBRootService::Register() {
-    auto service = ndk::SharedRefBase::make<ADBRootService>();
-    binder_status_t status = AServiceManager_addService(
-            service->asBinder().get(), getServiceName());
-
-    if (status != STATUS_OK) {
-        LOG(FATAL) << "Could not register adbroot service: " << status;
-    }
-}
-
-ndk::ScopedAStatus ADBRootService::isSupported(bool* _aidl_return) {
-    uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM && uid != AID_SHELL) {
-        return SecurityException("Caller must be system or shell");
-    }
-
-    AutoMutex _l(lock_);
-    *_aidl_return = __android_log_is_debuggable();
-    return ndk::ScopedAStatus::ok();
-}
-
-ndk::ScopedAStatus ADBRootService::setEnabled(bool enabled) {
-    uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM) {
-        return SecurityException("Caller must be system");
-    }
-
-    AutoMutex _l(lock_);
-
-    if (enabled_ != enabled) {
-        enabled_ = enabled;
-        WriteStringToFile(std::to_string(enabled), kStoragePath + kEnabled);
-
-        // Turning off adb root, restart adbd.
-        if (!enabled) {
-            SetProperty("service.adb.root", "0");
-            SetProperty("ctl.restart", "adbd");
-        }
-    }
-
-    return ndk::ScopedAStatus::ok();
-}
-
-ndk::ScopedAStatus ADBRootService::getEnabled(bool* _aidl_return) {
-    uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM && uid != AID_SHELL) {
-        return SecurityException("Caller must be system or shell");
-    }
-
-    AutoMutex _l(lock_);
-    *_aidl_return = enabled_;
-    return ndk::ScopedAStatus::ok();
-}
-
-}  // namespace adbroot
-}  // namespace android
-}  // namespace aidl
diff --git a/root/adbroot_service.h b/root/adbroot_service.h
deleted file mode 100644
index 9881542..0000000
--- a/root/adbroot_service.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2019 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.
- */
-
-#pragma once
-
-#include <aidl/android/adbroot/BnADBRootService.h>
-#include <android/binder_status.h>
-#include <log/log_properties.h>
-#include <utils/Mutex.h>
-
-namespace aidl {
-namespace android {
-namespace adbroot {
-
-using ::android::Mutex;
-
-class ADBRootService : public BnADBRootService {
-  public:
-    ADBRootService();
-
-    static void Register();
-
-    ndk::ScopedAStatus isSupported(bool* _aidl_return) override;
-    ndk::ScopedAStatus setEnabled(bool enabled) override;
-    ndk::ScopedAStatus getEnabled(bool* _aidl_return) override;
-
-    static char const* getServiceName() { return "adbroot_service"; }
-  private:
-    bool enabled_;
-    Mutex lock_;
-};
-
-}  // namespace adbroot
-}  // namespace android
-}  // namespace aidl
diff --git a/root/main.cpp b/root/main.cpp
deleted file mode 100644
index 7de0945..0000000
--- a/root/main.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright (C) 2019 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 <android/binder_process.h>
-#include <android-base/logging.h>
-
-#include "adbroot_service.h"
-
-int main(int /* argc */, char** argv) {
-    android::base::InitLogging(argv, android::base::LogdLogger(android::base::SYSTEM));
-
-    aidl::android::adbroot::ADBRootService::Register();
-
-    ABinderProcess_startThreadPool();
-    ABinderProcess_joinThreadPool();
-
-    return 0;
-}
