diff --git a/tensorflow/lite/delegates/nnapi/nnapi_delegate_disabled.cc b/tensorflow/lite/delegates/nnapi/nnapi_delegate_disabled.cc
index 325c6233a8f..c841ce79ea1 100644
--- a/tensorflow/lite/delegates/nnapi/nnapi_delegate_disabled.cc
+++ b/tensorflow/lite/delegates/nnapi/nnapi_delegate_disabled.cc
@@ -23,9 +23,16 @@ TfLiteDelegate* NnApiDelegate() {
   return delegate;
 }
 
+StatefulNnApiDelegate::StatefulNnApiDelegate(const NnApi* /* nnapi */)
+    : StatefulNnApiDelegate() {}
+
 StatefulNnApiDelegate::StatefulNnApiDelegate(Options /* options */)
     : StatefulNnApiDelegate() {}
 
+StatefulNnApiDelegate::StatefulNnApiDelegate(const NnApi* /* nnapi */,
+                                             Options /* options */)
+    : StatefulNnApiDelegate() {}
+
 StatefulNnApiDelegate::StatefulNnApiDelegate()
     : TfLiteDelegate(TfLiteDelegateCreate()),
       delegate_data_(/*nnapi=*/nullptr) {
diff --git a/tensorflow/lite/tools/delegates/BUILD b/tensorflow/lite/tools/delegates/BUILD
index def41cc6c69..a8b1485d14b 100644
--- a/tensorflow/lite/tools/delegates/BUILD
+++ b/tensorflow/lite/tools/delegates/BUILD
@@ -81,7 +81,9 @@ cc_library(
     copts = common_copts,
     deps = [
         ":delegate_provider_hdr",
-        "//tensorflow/lite/tools/evaluation:utils",
+        "//tensorflow/lite/delegates/nnapi:nnapi_delegate",
+        "//tensorflow/lite/nnapi:nnapi_implementation",
+        "//tensorflow/lite/nnapi:nnapi_util",
     ],
     alwayslink = 1,
 )
diff --git a/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc b/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
index 007029343f7..4bca044cb50 100644
--- a/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
+++ b/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
@@ -14,11 +14,10 @@ limitations under the License.
 ==============================================================================*/
 #include <string>
 
-#include "tensorflow/lite/tools/delegates/delegate_provider.h"
-#include "tensorflow/lite/tools/evaluation/utils.h"
-#if defined(__ANDROID__)
+#include "tensorflow/lite/delegates/nnapi/nnapi_delegate.h"
+#include "tensorflow/lite/nnapi/nnapi_implementation.h"
 #include "tensorflow/lite/nnapi/nnapi_util.h"
-#endif
+#include "tensorflow/lite/tools/delegates/delegate_provider.h"
 
 namespace tflite {
 namespace tools {
@@ -26,7 +25,6 @@ namespace tools {
 class NnapiDelegateProvider : public DelegateProvider {
  public:
   NnapiDelegateProvider() {
-#if defined(__ANDROID__)
     default_params_.AddParam("use_nnapi", ToolParam::Create<bool>(false));
     default_params_.AddParam("nnapi_execution_preference",
                              ToolParam::Create<std::string>(""));
@@ -38,7 +36,6 @@ class NnapiDelegateProvider : public DelegateProvider {
                              ToolParam::Create<bool>(false));
     default_params_.AddParam("nnapi_allow_fp16",
                              ToolParam::Create<bool>(false));
-#endif
   }
 
   std::vector<Flag> CreateFlags(ToolParams* params) const final;
@@ -53,32 +50,28 @@ REGISTER_DELEGATE_PROVIDER(NnapiDelegateProvider);
 
 std::vector<Flag> NnapiDelegateProvider::CreateFlags(ToolParams* params) const {
   std::vector<Flag> flags = {
-#if defined(__ANDROID__)
-    CreateFlag<bool>("use_nnapi", params, "use nnapi delegate api"),
-    CreateFlag<std::string>("nnapi_execution_preference", params,
-                            "execution preference for nnapi delegate. Should "
-                            "be one of the following: fast_single_answer, "
-                            "sustained_speed, low_power, undefined"),
-    CreateFlag<std::string>("nnapi_execution_priority", params,
-                            "The model execution priority in nnapi, and it "
-                            "should be one of the following: default, low, "
-                            "medium and high. This requires Android 11+."),
-    CreateFlag<std::string>(
-        "nnapi_accelerator_name", params,
-        "the name of the nnapi accelerator to use (requires Android Q+)"),
-    CreateFlag<bool>("disable_nnapi_cpu", params,
-                     "Disable the NNAPI CPU device"),
-    CreateFlag<bool>("nnapi_allow_fp16", params,
-                     "Allow fp32 computation to be run in fp16")
-#endif
-  };
+      CreateFlag<bool>("use_nnapi", params, "use nnapi delegate api"),
+      CreateFlag<std::string>("nnapi_execution_preference", params,
+                              "execution preference for nnapi delegate. Should "
+                              "be one of the following: fast_single_answer, "
+                              "sustained_speed, low_power, undefined"),
+      CreateFlag<std::string>("nnapi_execution_priority", params,
+                              "The model execution priority in nnapi, and it "
+                              "should be one of the following: default, low, "
+                              "medium and high. This requires Android 11+."),
+      CreateFlag<std::string>(
+          "nnapi_accelerator_name", params,
+          "the name of the nnapi accelerator to use (requires Android Q+)"),
+      CreateFlag<bool>("disable_nnapi_cpu", params,
+                       "Disable the NNAPI CPU device"),
+      CreateFlag<bool>("nnapi_allow_fp16", params,
+                       "Allow fp32 computation to be run in fp16")};
 
   return flags;
 }
 
 void NnapiDelegateProvider::LogParams(const ToolParams& params,
                                       bool verbose) const {
-#if defined(__ANDROID__)
   LOG_TOOL_PARAM(params, bool, "use_nnapi", "Use NNAPI", verbose);
   if (!params.Get<bool>("use_nnapi")) return;
 
@@ -100,13 +93,11 @@ void NnapiDelegateProvider::LogParams(const ToolParams& params,
                  verbose);
   LOG_TOOL_PARAM(params, bool, "nnapi_allow_fp16", "Allow fp16 in NNAPI",
                  verbose);
-#endif
 }
 
 TfLiteDelegatePtr NnapiDelegateProvider::CreateTfLiteDelegate(
     const ToolParams& params) const {
   TfLiteDelegatePtr delegate(nullptr, [](TfLiteDelegate*) {});
-#if defined(__ANDROID__)
   if (params.Get<bool>("use_nnapi")) {
     StatefulNnApiDelegate::Options options;
     std::string accelerator_name =
@@ -174,10 +165,16 @@ TfLiteDelegatePtr NnapiDelegateProvider::CreateTfLiteDelegate(
     if (max_delegated_partitions >= 0) {
       options.max_number_delegated_partitions = max_delegated_partitions;
     }
-    delegate = evaluation::CreateNNAPIDelegate(options);
-    if (!delegate.get()) {
+    const auto* nnapi_impl = NnApiImplementation();
+    if (!nnapi_impl->nnapi_exists) {
       TFLITE_LOG(WARN) << "NNAPI acceleration is unsupported on this platform.";
+      return delegate;
     }
+    return TfLiteDelegatePtr(
+        new StatefulNnApiDelegate(nnapi_impl, options),
+        [](TfLiteDelegate* delegate) {
+          delete reinterpret_cast<StatefulNnApiDelegate*>(delegate);
+        });
   } else if (!params.Get<std::string>("nnapi_accelerator_name").empty()) {
     TFLITE_LOG(WARN)
         << "`--use_nnapi=true` must be set for the provided NNAPI accelerator ("
@@ -188,7 +185,6 @@ TfLiteDelegatePtr NnapiDelegateProvider::CreateTfLiteDelegate(
                      << params.Get<std::string>("nnapi_execution_preference")
                      << ") to be used.";
   }
-#endif
   return delegate;
 }
 
diff --git a/tensorflow/lite/tools/evaluation/evaluation_delegate_provider_test.cc b/tensorflow/lite/tools/evaluation/evaluation_delegate_provider_test.cc
index 0282b258082..5d0a4dfa7d3 100644
--- a/tensorflow/lite/tools/evaluation/evaluation_delegate_provider_test.cc
+++ b/tensorflow/lite/tools/evaluation/evaluation_delegate_provider_test.cc
@@ -43,11 +43,7 @@ TEST(EvaluationDelegateProviderTest, CreateTfLiteDelegate) {
 TEST(EvaluationDelegateProviderTest, DelegateProvidersParams) {
   DelegateProviders providers;
   const auto& params = providers.GetAllParams();
-#if defined(__ANDROID__)
   EXPECT_TRUE(params.HasParam("use_nnapi"));
-#else
-  EXPECT_FALSE(params.HasParam("use_nnapi"));
-#endif
   EXPECT_TRUE(params.HasParam("use_gpu"));
 
   int argc = 3;