Release 18.05.02
diff --git a/test/Android.mk b/test/Android.mk
index d74afec..97e9a90 100644
--- a/test/Android.mk
+++ b/test/Android.mk
@@ -61,6 +61,13 @@
 	android.hidl.memory@1.0 \
 	libOpenCL
 
+ifeq ($(PLATFORM_VERSION),9)
+# Required to build the 1.0 version of the NN Driver on Android P and later versions,
+# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
+LOCAL_SHARED_LIBRARIES+= \
+        android.hardware.neuralnetworks@1.1
+endif
+
 LOCAL_MODULE := armnn-driver-tests
 
 LOCAL_MODULE_TAGS := eng optional
diff --git a/test/Concurrent.cpp b/test/Concurrent.cpp
index 16734dc..c2d58bd 100644
--- a/test/Concurrent.cpp
+++ b/test/Concurrent.cpp
@@ -22,7 +22,7 @@
     ALOGI("ConcurrentExecute: entry");
 
     auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::CpuRef));
-    Model model = {};
+    V1_0::Model model = {};
 
     // add operands
     int32_t actValue      = 0;
@@ -37,7 +37,7 @@
 
     // make the fully connected operation
     model.operations.resize(1);
-    model.operations[0].type = OperationType::FULLY_CONNECTED;
+    model.operations[0].type = V1_0::OperationType::FULLY_CONNECTED;
     model.operations[0].inputs  = hidl_vec<uint32_t>{0, 1, 2, 3};
     model.operations[0].outputs = hidl_vec<uint32_t>{4};
 
diff --git a/test/Convolution2D.cpp b/test/Convolution2D.cpp
index 90edb41..cc301bc 100644
--- a/test/Convolution2D.cpp
+++ b/test/Convolution2D.cpp
@@ -20,7 +20,7 @@
 void PaddingTestImpl(android::nn::PaddingScheme paddingScheme)
 {
     auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::CpuRef));
-    Model model  = {};
+    V1_0::Model model  = {};
 
     uint32_t outSize = paddingScheme == android::nn::kPaddingSame ? 2 : 1;
 
@@ -39,7 +39,7 @@
 
     // make the convolution operation
     model.operations.resize(1);
-    model.operations[0].type = OperationType::CONV_2D;
+    model.operations[0].type = V1_0::OperationType::CONV_2D;
     model.operations[0].inputs  = hidl_vec<uint32_t>{0, 1, 2, 3, 4, 5, 6};
     model.operations[0].outputs = hidl_vec<uint32_t>{7};
 
diff --git a/test/DriverTestHelpers.cpp b/test/DriverTestHelpers.cpp
index 5b37192..d2d380a 100644
--- a/test/DriverTestHelpers.cpp
+++ b/test/DriverTestHelpers.cpp
@@ -107,13 +107,13 @@
     memcpy(dst, data, size * sizeof(float));
 }
 
-void AddOperand(Model& model, const Operand& op)
+void AddOperand(V1_0::Model& model, const Operand& op)
 {
     model.operands.resize(model.operands.size() + 1);
     model.operands[model.operands.size() - 1] = op;
 }
 
-void AddIntOperand(Model& model, int32_t value)
+void AddIntOperand(V1_0::Model& model, int32_t value)
 {
     DataLocation location = {};
     location.offset = model.operandValues.size();
@@ -131,7 +131,7 @@
     AddOperand(model, op);
 }
 
-void AddInputOperand(Model& model, hidl_vec<uint32_t> dimensions)
+void AddInputOperand(V1_0::Model& model, hidl_vec<uint32_t> dimensions)
 {
     Operand op    = {};
     op.type       = OperandType::TENSOR_FLOAT32;
@@ -144,7 +144,7 @@
     model.inputIndexes[model.inputIndexes.size() - 1] = model.operands.size() - 1;
 }
 
-void AddOutputOperand(Model& model, hidl_vec<uint32_t> dimensions)
+void AddOutputOperand(V1_0::Model& model, hidl_vec<uint32_t> dimensions)
 {
     Operand op = {};
     op.type       = OperandType::TENSOR_FLOAT32;
@@ -158,7 +158,7 @@
 }
 
 
-android::sp<IPreparedModel> PrepareModelWithStatus(const Model& model,
+android::sp<IPreparedModel> PrepareModelWithStatus(const V1_0::Model& model,
                                                    armnn_driver::ArmnnDriver& driver,
                                                    ErrorStatus & prepareStatus,
                                                    ErrorStatus expectedStatus)
@@ -176,7 +176,7 @@
     return cb->GetPreparedModel();
 }
 
-android::sp<IPreparedModel> PrepareModel(const Model& model,
+android::sp<IPreparedModel> PrepareModel(const V1_0::Model& model,
                                          armnn_driver::ArmnnDriver& driver)
 {
     ErrorStatus prepareStatus = ErrorStatus::NONE;
diff --git a/test/DriverTestHelpers.hpp b/test/DriverTestHelpers.hpp
index e90f7ec..57541a3 100644
--- a/test/DriverTestHelpers.hpp
+++ b/test/DriverTestHelpers.hpp
@@ -72,9 +72,9 @@
 
 void AddPoolAndSetData(uint32_t size, Request& request, const float* data);
 
-void AddOperand(Model& model, const Operand& op);
+void AddOperand(V1_0::Model& model, const Operand& op);
 
-void AddIntOperand(Model& model, int32_t value);
+void AddIntOperand(V1_0::Model& model, int32_t value);
 
 template<typename T>
 OperandType TypeToOperandType();
@@ -86,7 +86,7 @@
 OperandType TypeToOperandType<int32_t>();
 
 template<typename T>
-void AddTensorOperand(Model& model, hidl_vec<uint32_t> dimensions, T* values)
+void AddTensorOperand(V1_0::Model& model, hidl_vec<uint32_t> dimensions, T* values)
 {
     uint32_t totalElements = 1;
     for (uint32_t dim : dimensions)
@@ -113,14 +113,14 @@
     AddOperand(model, op);
 }
 
-void AddInputOperand(Model& model, hidl_vec<uint32_t> dimensions);
+void AddInputOperand(V1_0::Model& model, hidl_vec<uint32_t> dimensions);
 
-void AddOutputOperand(Model& model, hidl_vec<uint32_t> dimensions);
+void AddOutputOperand(V1_0::Model& model, hidl_vec<uint32_t> dimensions);
 
-android::sp<IPreparedModel> PrepareModel(const Model& model,
+android::sp<IPreparedModel> PrepareModel(const V1_0::Model& model,
                                          armnn_driver::ArmnnDriver& driver);
 
-android::sp<IPreparedModel> PrepareModelWithStatus(const Model& model,
+android::sp<IPreparedModel> PrepareModelWithStatus(const V1_0::Model& model,
                                                    armnn_driver::ArmnnDriver& driver,
                                                    ErrorStatus & prepareStatus,
                                                    ErrorStatus expectedStatus=ErrorStatus::NONE);
diff --git a/test/FullyConnected.cpp b/test/FullyConnected.cpp
index ea6c871..4feda30 100644
--- a/test/FullyConnected.cpp
+++ b/test/FullyConnected.cpp
@@ -19,7 +19,7 @@
     // but that uses slightly weird dimensions which I don't think we need to support for now
 
     auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::CpuRef));
-    Model model = {};
+    V1_0::Model model = {};
 
     // add operands
     int32_t actValue      = 0;
@@ -34,7 +34,7 @@
 
     // make the fully connected operation
     model.operations.resize(1);
-    model.operations[0].type = OperationType::FULLY_CONNECTED;
+    model.operations[0].type = V1_0::OperationType::FULLY_CONNECTED;
     model.operations[0].inputs  = hidl_vec<uint32_t>{0, 1, 2, 3};
     model.operations[0].outputs = hidl_vec<uint32_t>{4};
 
@@ -90,7 +90,7 @@
             sup = supported;
         };
 
-    Model model = {};
+    V1_0::Model model = {};
 
     // operands
     int32_t actValue      = 0;
@@ -113,7 +113,7 @@
 
     model.operations.resize(1);
 
-    model.operations[0].type = OperationType::FULLY_CONNECTED;
+    model.operations[0].type = V1_0::OperationType::FULLY_CONNECTED;
     model.operations[0].inputs  = hidl_vec<uint32_t>{0,1,2,3};
     model.operations[0].outputs = hidl_vec<uint32_t>{4};
 
@@ -177,7 +177,7 @@
             sup = supported;
         };
 
-    Model model = {};
+    V1_0::Model model = {};
 
     // operands
     int32_t actValue      = 0;
@@ -200,7 +200,7 @@
 
     model.operations.resize(1);
 
-    model.operations[0].type = OperationType::FULLY_CONNECTED;
+    model.operations[0].type = V1_0::OperationType::FULLY_CONNECTED;
     model.operations[0].inputs  = hidl_vec<uint32_t>{0,1,2,3};
     model.operations[0].outputs = hidl_vec<uint32_t>{4};
 
diff --git a/test/GenericLayerTests.cpp b/test/GenericLayerTests.cpp
index 5c6c041..7116f0b 100644
--- a/test/GenericLayerTests.cpp
+++ b/test/GenericLayerTests.cpp
@@ -25,7 +25,7 @@
         sup = supported;
     };
 
-    Model model1 = {};
+    V1_0::Model model1 = {};
 
     // add operands
     int32_t actValue      = 0;
@@ -40,14 +40,14 @@
 
     // make a correct fully connected operation
     model1.operations.resize(2);
-    model1.operations[0].type = OperationType::FULLY_CONNECTED;
+    model1.operations[0].type = V1_0::OperationType::FULLY_CONNECTED;
     model1.operations[0].inputs  = hidl_vec<uint32_t>{0, 1, 2, 3};
     model1.operations[0].outputs = hidl_vec<uint32_t>{4};
 
     // make an incorrect fully connected operation
     AddIntOperand(model1, actValue);
     AddOutputOperand(model1, hidl_vec<uint32_t>{1, 1});
-    model1.operations[1].type = OperationType::FULLY_CONNECTED;
+    model1.operations[1].type = V1_0::OperationType::FULLY_CONNECTED;
     model1.operations[1].inputs = hidl_vec<uint32_t>{4};
     model1.operations[1].outputs = hidl_vec<uint32_t>{5};
 
@@ -57,7 +57,7 @@
     BOOST_TEST(sup[1] == false);
 
     // Broadcast add/mul are not supported
-    Model model2 = {};
+    V1_0::Model model2 = {};
 
     AddInputOperand(model2, hidl_vec<uint32_t>{1, 1, 3, 4});
     AddInputOperand(model2, hidl_vec<uint32_t>{4});
@@ -66,11 +66,11 @@
 
     model2.operations.resize(2);
 
-    model2.operations[0].type = OperationType::ADD;
+    model2.operations[0].type = V1_0::OperationType::ADD;
     model2.operations[0].inputs = hidl_vec<uint32_t>{0,1};
     model2.operations[0].outputs = hidl_vec<uint32_t>{2};
 
-    model2.operations[1].type = OperationType::MUL;
+    model2.operations[1].type = V1_0::OperationType::MUL;
     model2.operations[1].inputs = hidl_vec<uint32_t>{0,1};
     model2.operations[1].outputs = hidl_vec<uint32_t>{3};
 
@@ -79,14 +79,14 @@
     BOOST_TEST(sup[0] == false);
     BOOST_TEST(sup[1] == false);
 
-    Model model3 = {};
+    V1_0::Model model3 = {};
 
     // Add unsupported operation, should return no error but we don't support it
     AddInputOperand(model3, hidl_vec<uint32_t>{1, 1, 1, 8});
     AddIntOperand(model3, 2);
     AddOutputOperand(model3, hidl_vec<uint32_t>{1, 2, 2, 2});
     model3.operations.resize(1);
-    model3.operations[0].type = OperationType::DEPTH_TO_SPACE;
+    model3.operations[0].type = V1_0::OperationType::DEPTH_TO_SPACE;
     model1.operations[0].inputs = hidl_vec<uint32_t>{0, 1};
     model3.operations[0].outputs = hidl_vec<uint32_t>{2};
 
@@ -95,10 +95,10 @@
     BOOST_TEST(sup[0] == false);
 
     // Add invalid operation
-    Model model4 = {};
+    V1_0::Model model4 = {};
     AddIntOperand(model4, 0);
     model4.operations.resize(1);
-    model4.operations[0].type = static_cast<OperationType>(100);
+    model4.operations[0].type = static_cast<V1_0::OperationType>(100);
     model4.operations[0].outputs = hidl_vec<uint32_t>{0};
 
     driver->getSupportedOperations(model4, cb);
@@ -121,7 +121,7 @@
         sup = supported;
     };
 
-    Model model = {};
+    V1_0::Model model = {};
 
     // operands
     int32_t actValue      = 0;
@@ -146,17 +146,17 @@
     model.operations.resize(3);
 
     // unsupported
-    model.operations[0].type = OperationType::ADD;
+    model.operations[0].type = V1_0::OperationType::ADD;
     model.operations[0].inputs = hidl_vec<uint32_t>{0,1};
     model.operations[0].outputs = hidl_vec<uint32_t>{2};
 
     // supported
-    model.operations[1].type = OperationType::FULLY_CONNECTED;
+    model.operations[1].type = V1_0::OperationType::FULLY_CONNECTED;
     model.operations[1].inputs  = hidl_vec<uint32_t>{3, 4, 5, 6};
     model.operations[1].outputs = hidl_vec<uint32_t>{7};
 
     // unsupported
-    model.operations[2].type = OperationType::MUL;
+    model.operations[2].type = V1_0::OperationType::MUL;
     model.operations[2].inputs = hidl_vec<uint32_t>{0,1};
     model.operations[2].outputs = hidl_vec<uint32_t>{8};
 
@@ -184,7 +184,7 @@
         sup = supported;
     };
 
-    Model model = {};
+    V1_0::Model model = {};
 
     model.pools = hidl_vec<hidl_memory>{hidl_memory("Unsuported hidl memory type", nullptr, 0)};
 
diff --git a/test/Merger.cpp b/test/Merger.cpp
index 6c069a8..4825360 100644
--- a/test/Merger.cpp
+++ b/test/Merger.cpp
@@ -25,7 +25,7 @@
                 ErrorStatus expectedExecStatus=ErrorStatus::NONE)
 {
     std::unique_ptr<ArmnnDriver> driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::CpuRef));
-    Model model{};
+    V1_0::Model model{};
 
     hidl_vec<uint32_t> modelInputIds;
     modelInputIds.resize(inputs.size()+1);
@@ -40,7 +40,7 @@
 
     // make the concat operation
     model.operations.resize(1);
-    model.operations[0].type = OperationType::CONCATENATION;
+    model.operations[0].type = V1_0::OperationType::CONCATENATION;
     model.operations[0].inputs  = modelInputIds;
     model.operations[0].outputs = hidl_vec<uint32_t>{static_cast<uint32_t>(inputs.size()+1)};
 
diff --git a/test/Tests.cpp b/test/Tests.cpp
index 37aece7..3fa8e12 100644
--- a/test/Tests.cpp
+++ b/test/Tests.cpp
@@ -31,9 +31,9 @@
     auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::CpuRef));
 
     ErrorStatus error;
-    Capabilities cap;
+    V1_0::Capabilities cap;
 
-    ArmnnDriver::getCapabilities_cb cb = [&](ErrorStatus status, const Capabilities& capabilities)
+    ArmnnDriver::getCapabilities_cb cb = [&](ErrorStatus status, const V1_0::Capabilities& capabilities)
     {
         error = status;
         cap = capabilities;
diff --git a/test/UtilsTests.cpp b/test/UtilsTests.cpp
index b429920..e7e6cde 100644
--- a/test/UtilsTests.cpp
+++ b/test/UtilsTests.cpp
@@ -95,7 +95,7 @@
     }
 
     std::string m_RequestInputsAndOutputsDumpDir;
-    Model m_Model;
+    V1_0::Model m_Model;
 
 private:
     std::string m_FileName;