diff --git a/coin/provisioning/common/linux/android/gradle_project/.gitignore b/coin/provisioning/common/linux/android/gradle_project/.gitignore
new file mode 100644
index 00000000..aa724b77
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/coin/provisioning/common/linux/android/gradle_project/README.md b/coin/provisioning/common/linux/android/gradle_project/README.md
new file mode 100644
index 00000000..439cd362
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/README.md
@@ -0,0 +1,20 @@
+# Android Gradle Project for COIN
+
+This project is used to at provisioning time to do an Android Gradle build that
+will download Gradle binaries and AGP dependencies, then they will be cached
+allowing consecutive builds, i.e. at test runs to not redownload the Gradle
+binaries which tend to run into network issues and thus improving the
+reliability of the Android integrations on COIN.
+
+The project is a basic empty views Android project that can be created by
+Android Studio, it's Java based. Below is some extra details on relevant files
+that might need updates in the future:
+
+- settings.gradle: mainly sets the the project name
+- under app/src/main/ res/layout/activity_main.xml and src/*/*.java: sets the
+ layout and logic of the app, this shouldn't need to be touched.
+- AndroidManifest.xml / app/build.gradle: Sets project settings like target version.
+- gradle/libs.versions.toml: This sets the version numbers of various dependencies.
+
+Other files required for the project build are gradle wrapper and scripts which
+are fetched by android_linux.sh from qtbase.
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/.gitignore b/coin/provisioning/common/linux/android/gradle_project/app/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/build.gradle b/coin/provisioning/common/linux/android/gradle_project/app/build.gradle
new file mode 100644
index 00000000..745c08f8
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/build.gradle
@@ -0,0 +1,26 @@
+plugins {
+ alias(libs.plugins.androidApplication)
+}
+
+android {
+ namespace 'com.example.gradle_project'
+ compileSdk 34
+
+ defaultConfig {
+ applicationId "com.example.gradle_project"
+ minSdk 23
+ targetSdk 34
+ versionCode 1
+ versionName "1.0"
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation libs.appcompat
+ implementation libs.material
+}
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/src/main/AndroidManifest.xml b/coin/provisioning/common/linux/android/gradle_project/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..492c2115
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/src/main/AndroidManifest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/src/main/java/com/example/gradle_project/MainActivity.java b/coin/provisioning/common/linux/android/gradle_project/app/src/main/java/com/example/gradle_project/MainActivity.java
new file mode 100644
index 00000000..d3575ef9
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/src/main/java/com/example/gradle_project/MainActivity.java
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+package com.example.gradle_project;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+
+public class MainActivity extends AppCompatActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+}
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/layout/activity_main.xml b/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..c75d0576
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/coin/provisioning/common/linux/android/gradle_project/build.gradle b/coin/provisioning/common/linux/android/gradle_project/build.gradle
new file mode 100644
index 00000000..602be027
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/build.gradle
@@ -0,0 +1,4 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+alias(libs.plugins.androidApplication) apply false
+}
diff --git a/coin/provisioning/common/linux/android/gradle_project/gradle/libs.versions.toml b/coin/provisioning/common/linux/android/gradle_project/gradle/libs.versions.toml
new file mode 100644
index 00000000..65bc49af
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/gradle/libs.versions.toml
@@ -0,0 +1,16 @@
+[versions]
+agp = "7.4.1"
+appcompat = "1.6.1"
+material = "1.11.0"
+constraintlayout = "2.1.4"
+
+[libraries]
+appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+material = { group = "com.google.android.material", name = "material", version.ref = "material" }
+constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
+
+[plugins]
+androidApplication = { id = "com.android.application", version.ref = "agp" }
+
+[bundles]
+
diff --git a/coin/provisioning/common/linux/android/gradle_project/settings.gradle b/coin/provisioning/common/linux/android/gradle_project/settings.gradle
new file mode 100644
index 00000000..ca34c7e7
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/settings.gradle
@@ -0,0 +1,17 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "gradle_project"
+include ':app'
diff --git a/coin/provisioning/common/linux/android_linux.sh b/coin/provisioning/common/linux/android_linux.sh
index 39a7ed0d..24d22141 100755
--- a/coin/provisioning/common/linux/android_linux.sh
+++ b/coin/provisioning/common/linux/android_linux.sh
@@ -184,6 +184,23 @@ echo "no" | ./avdmanager create avd -n automotive_emulator_x86_64_api_29 -c 2048
# To be used by the VMs to start the emulator for tests
emulator_script_filename="android_emulator_launcher.sh"
-cp "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/${emulator_script_filename}" "${HOME}"
+scripts_dir_name="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+cp "${scripts_dir_name}/${emulator_script_filename}" "${HOME}"
ANDROID_EMULATOR_RUNNER="${HOME}/${emulator_script_filename}"
SetEnvVar "ANDROID_EMULATOR_RUNNER" "$ANDROID_EMULATOR_RUNNER"
+
+# Gradle Caching
+cp -r "${scripts_dir_name}/android/gradle_project" /tmp/gradle_project
+cd /tmp/gradle_project
+# Get Gradle files from qtbase
+qtbaseGradleUrl="https://code.qt.io/cgit/qt/qtbase.git/plain/src/3rdparty/gradle"
+commit_sha="29a7560041734279bd1e55a79dd973af07a011fa"
+curl "$qtbaseGradleUrl"/gradle.properties\?h\=$commit_sha > gradle.properties
+curl "$qtbaseGradleUrl"/gradlew\?h\=$commit_sha > gradlew
+curl "$qtbaseGradleUrl"/gradlew.bat\?h\=$commit_sha > gradlew.bat
+mkdir -p gradle/wrapper
+curl "$qtbaseGradleUrl"/gradle/wrapper/gradle-wrapper.jar\?h\=$commit_sha > gradle/wrapper/gradle-wrapper.jar
+curl "$qtbaseGradleUrl"/gradle/wrapper/gradle-wrapper.properties\?h\=$commit_sha > gradle/wrapper/gradle-wrapper.properties
+# Run Gradle
+chmod +x gradlew
+ANDROID_SDK_ROOT="$sdkTargetFolder" sh gradlew build