diff --git a/coin/provisioning/common/linux/android/gradle_project/README.md b/coin/provisioning/common/linux/android/gradle_project/README.md
index 439cd362..d6c68f04 100644
--- a/coin/provisioning/common/linux/android/gradle_project/README.md
+++ b/coin/provisioning/common/linux/android/gradle_project/README.md
@@ -15,6 +15,9 @@ that might need updates in the future:
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.
+- feature/: an on-demand dynamic feature module, it caches the
+ com.android.dynamic-feature plugin and the Play feature delivery library
+ used by the Feature Delivery tests.
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/build.gradle b/coin/provisioning/common/linux/android/gradle_project/app/build.gradle
index 8d8a2b12..764ac799 100644
--- a/coin/provisioning/common/linux/android/gradle_project/app/build.gradle
+++ b/coin/provisioning/common/linux/android/gradle_project/app/build.gradle
@@ -18,10 +18,13 @@ android {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
+
+ dynamicFeatures = [':feature']
}
dependencies {
implementation libs.core
implementation libs.appcompat
implementation libs.material
+ implementation libs.play.feature.delivery
}
diff --git a/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/values/strings.xml b/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..521b5538
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Feature
+
diff --git a/coin/provisioning/common/linux/android/gradle_project/build.gradle b/coin/provisioning/common/linux/android/gradle_project/build.gradle
index 602be027..dcc9087b 100644
--- a/coin/provisioning/common/linux/android/gradle_project/build.gradle
+++ b/coin/provisioning/common/linux/android/gradle_project/build.gradle
@@ -1,4 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.androidApplication) apply false
+alias(libs.plugins.androidDynamicFeature) apply false
}
diff --git a/coin/provisioning/common/linux/android/gradle_project/feature/build.gradle b/coin/provisioning/common/linux/android/gradle_project/feature/build.gradle
new file mode 100644
index 00000000..5e628ebf
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/feature/build.gradle
@@ -0,0 +1,17 @@
+plugins {
+ alias(libs.plugins.androidDynamicFeature)
+}
+
+android {
+ namespace 'com.example.gradle_project.feature'
+ compileSdk 36
+
+ defaultConfig {
+ minSdk 28
+ }
+}
+
+dependencies {
+ implementation project(':app')
+ implementation libs.play.feature.delivery
+}
diff --git a/coin/provisioning/common/linux/android/gradle_project/feature/src/main/AndroidManifest.xml b/coin/provisioning/common/linux/android/gradle_project/feature/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..bea6d055
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/feature/src/main/AndroidManifest.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/coin/provisioning/common/linux/android/gradle_project/feature/src/main/java/com/example/gradle_project/feature/Feature.java b/coin/provisioning/common/linux/android/gradle_project/feature/src/main/java/com/example/gradle_project/feature/Feature.java
new file mode 100644
index 00000000..732addfb
--- /dev/null
+++ b/coin/provisioning/common/linux/android/gradle_project/feature/src/main/java/com/example/gradle_project/feature/Feature.java
@@ -0,0 +1,7 @@
+package com.example.gradle_project.feature;
+
+public class Feature {
+ public static String hello() {
+ return "hello";
+ }
+}
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
index b38aa98a..366a9b7e 100644
--- a/coin/provisioning/common/linux/android/gradle_project/gradle/libs.versions.toml
+++ b/coin/provisioning/common/linux/android/gradle_project/gradle/libs.versions.toml
@@ -4,14 +4,17 @@ core = "1.17.0"
appcompat = "1.7.1"
material = "1.13.0"
constraintlayout = "2.2.1"
+play-feature-delivery = "2.1.0"
[libraries]
core = { group = 'androidx.core', name = "core", version.ref = "core" }
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" }
+play-feature-delivery = { module = "com.google.android.play:feature-delivery", version.ref = "play-feature-delivery" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
+androidDynamicFeature = { id = "com.android.dynamic-feature", 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
index ca34c7e7..a9249d23 100644
--- a/coin/provisioning/common/linux/android/gradle_project/settings.gradle
+++ b/coin/provisioning/common/linux/android/gradle_project/settings.gradle
@@ -14,4 +14,4 @@ dependencyResolutionManagement {
}
rootProject.name = "gradle_project"
-include ':app'
+include ':app', ':feature'