diff --git a/templates/single-app/.gitignore b/templates/single-app/.gitignore
new file mode 100644
index 0000000..1ffc05a
--- /dev/null
+++ b/templates/single-app/.gitignore
@@ -0,0 +1,14 @@
+# Ignore Gradle project-specific cache directory
+.gradle
+
+# Ignore Gradle build output directory
+build
+
+# Ignore Gradle local properties
+local.properties
+
+# Ignore Idea workspace files
+.idea
+
+# ignore cmake builds
+*.cxx
diff --git a/templates/single-app/.run/assembleSubmissionSources.run.xml b/templates/single-app/.run/assembleSubmissionSources.run.xml
new file mode 100644
index 0000000..b6f979e
--- /dev/null
+++ b/templates/single-app/.run/assembleSubmissionSources.run.xml
@@ -0,0 +1,24 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="assembleSubmissionSources" type="GradleRunConfiguration" factoryName="Gradle">
+    <ExternalSystemSettings>
+      <option name="executionName" />
+      <option name="externalProjectPath" value="$PROJECT_DIR$/submission" />
+      <option name="externalSystemIdString" value="GRADLE" />
+      <option name="scriptParameters" value="" />
+      <option name="taskDescriptions">
+        <list />
+      </option>
+      <option name="taskNames">
+        <list>
+          <option value="assembleSubmissionSources" />
+        </list>
+      </option>
+      <option name="vmOptions" />
+    </ExternalSystemSettings>
+    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
+    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
+    <DebugAllEnabled>false</DebugAllEnabled>
+    <RunAsTest>false</RunAsTest>
+    <method v="2" />
+  </configuration>
+</component>
diff --git a/templates/single-app/.run/assembleSubmissionZip.run.xml b/templates/single-app/.run/assembleSubmissionZip.run.xml
new file mode 100644
index 0000000..f3edeeb
--- /dev/null
+++ b/templates/single-app/.run/assembleSubmissionZip.run.xml
@@ -0,0 +1,24 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="assembleSubmissionZip" type="GradleRunConfiguration" factoryName="Gradle">
+    <ExternalSystemSettings>
+      <option name="executionName" />
+      <option name="externalProjectPath" value="$PROJECT_DIR$/submission" />
+      <option name="externalSystemIdString" value="GRADLE" />
+      <option name="scriptParameters" value="" />
+      <option name="taskDescriptions">
+        <list />
+      </option>
+      <option name="taskNames">
+        <list>
+          <option value="assembleSubmissionZip" />
+        </list>
+      </option>
+      <option name="vmOptions" />
+    </ExternalSystemSettings>
+    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
+    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
+    <DebugAllEnabled>false</DebugAllEnabled>
+    <RunAsTest>false</RunAsTest>
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/.run/autorepro_nonroot_arm64.run.xml b/templates/single-app/.run/autorepro_nonroot_arm64.run.xml
new file mode 100644
index 0000000..b605143
--- /dev/null
+++ b/templates/single-app/.run/autorepro_nonroot_arm64.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="autorepro_nonroot_arm64" type="JarApplication">
+    <option name="JAR_PATH" value="$PROJECT_DIR$/submission/build/test_suites_arm64/android-sts/tools/sts-tradefed.jar" />
+    <option name="PROGRAM_PARAMETERS" value="run commandAndExit autorepro-nonroot --log-level debug --log-level-display debug" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <method v="2">
+      <option name="Gradle.BeforeRunTask" enabled="false" tasks="assembleAutoReproTradefed-test_suites_arm64" externalProjectPath="$PROJECT_DIR$/submission" vmOptions="" scriptParameters="" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/.run/autorepro_nonroot_x86_64.run.xml b/templates/single-app/.run/autorepro_nonroot_x86_64.run.xml
new file mode 100644
index 0000000..bd5ecf1
--- /dev/null
+++ b/templates/single-app/.run/autorepro_nonroot_x86_64.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="autorepro_nonroot_x86_64" type="JarApplication">
+    <option name="JAR_PATH" value="$PROJECT_DIR$/submission/build/test_suites_x86_64/android-sts/tools/sts-tradefed.jar" />
+    <option name="PROGRAM_PARAMETERS" value="run commandAndExit autorepro-nonroot --log-level debug --log-level-display debug" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <method v="2">
+      <option name="Gradle.BeforeRunTask" enabled="false" tasks="assembleAutoReproTradefed-test_suites_x86_64" externalProjectPath="$PROJECT_DIR$/submission" vmOptions="" scriptParameters="" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/.run/autorepro_root_arm64.run.xml b/templates/single-app/.run/autorepro_root_arm64.run.xml
new file mode 100644
index 0000000..6a43191
--- /dev/null
+++ b/templates/single-app/.run/autorepro_root_arm64.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="autorepro_root_arm64" type="JarApplication">
+    <option name="JAR_PATH" value="$PROJECT_DIR$/submission/build/test_suites_arm64/android-sts/tools/sts-tradefed.jar" />
+    <option name="PROGRAM_PARAMETERS" value="run commandAndExit autorepro-root --log-level debug --log-level-display debug" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <method v="2">
+      <option name="Gradle.BeforeRunTask" enabled="false" tasks="assembleAutoReproTradefed-test_suites_arm64" externalProjectPath="$PROJECT_DIR$/submission" vmOptions="" scriptParameters="" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/.run/autorepro_root_x86_64.run.xml b/templates/single-app/.run/autorepro_root_x86_64.run.xml
new file mode 100644
index 0000000..03d6be5
--- /dev/null
+++ b/templates/single-app/.run/autorepro_root_x86_64.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="autorepro_root_x86_64" type="JarApplication">
+    <option name="JAR_PATH" value="$PROJECT_DIR$/submission/build/test_suites_x86_64/android-sts/tools/sts-tradefed.jar" />
+    <option name="PROGRAM_PARAMETERS" value="run commandAndExit autorepro-root --log-level debug --log-level-display debug" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <method v="2">
+      <option name="Gradle.BeforeRunTask" enabled="false" tasks="assembleAutoReproTradefed-test_suites_x86_64" externalProjectPath="$PROJECT_DIR$/submission" vmOptions="" scriptParameters="" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/.run/copyInvocationResultsToSubmission.run.xml b/templates/single-app/.run/copyInvocationResultsToSubmission.run.xml
new file mode 100644
index 0000000..45ee95c
--- /dev/null
+++ b/templates/single-app/.run/copyInvocationResultsToSubmission.run.xml
@@ -0,0 +1,24 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="copyInvocationResultsToSubmission" type="GradleRunConfiguration" factoryName="Gradle">
+    <ExternalSystemSettings>
+      <option name="executionName" />
+      <option name="externalProjectPath" value="$PROJECT_DIR$/submission" />
+      <option name="externalSystemIdString" value="GRADLE" />
+      <option name="scriptParameters" value="" />
+      <option name="taskDescriptions">
+        <list />
+      </option>
+      <option name="taskNames">
+        <list>
+          <option value="copyInvocationResultsToSubmission" />
+        </list>
+      </option>
+      <option name="vmOptions" />
+    </ExternalSystemSettings>
+    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
+    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
+    <DebugAllEnabled>false</DebugAllEnabled>
+    <RunAsTest>false</RunAsTest>
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/templates/single-app/gradle.properties b/templates/single-app/gradle.properties
new file mode 100644
index 0000000..cc18a0c
--- /dev/null
+++ b/templates/single-app/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/templates/single-app/gradle/wrapper/gradle-wrapper.jar b/templates/single-app/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..033e24c
--- /dev/null
+++ b/templates/single-app/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/templates/single-app/gradle/wrapper/gradle-wrapper.properties b/templates/single-app/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..56a6388
--- /dev/null
+++ b/templates/single-app/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,8 @@
+#Fri Jul 11 10:56:54 UTC 2025
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/templates/single-app/gradlew b/templates/single-app/gradlew
new file mode 100755
index 0000000..fcb6fca
--- /dev/null
+++ b/templates/single-app/gradlew
@@ -0,0 +1,248 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# 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
+#
+#      https://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.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/templates/single-app/gradlew.bat b/templates/single-app/gradlew.bat
new file mode 100644
index 0000000..6689b85
--- /dev/null
+++ b/templates/single-app/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/templates/single-app/settings.gradle.kts b/templates/single-app/settings.gradle.kts
new file mode 100644
index 0000000..13a00ec
--- /dev/null
+++ b/templates/single-app/settings.gradle.kts
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2024-2025 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.
+ */
+
+// repositories of plugins
+pluginManagement {
+    repositories {
+        mavenLocal()
+        gradlePluginPortal()
+        google()
+        mavenCentral()
+    }
+}
+
+// repositories of project dependencies
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+    repositories {
+        google()
+        mavenCentral()
+    }
+}
+
+plugins {
+    // Apply the foojay-resolver plugin to allow automatic download of JDKs
+    id("org.gradle.toolchains.foojay-resolver-convention") version "0.4.0"
+    id("com.android.security.autorepro.submission") version "1.0.1-alpha1" apply false
+}
+
+rootProject.name = "autorepro-submission"
+
+// glob and include gradle projects
+fileTree(rootDir) {
+        // only include subprojects of ":submission"
+        include("submission/**/build.gradle*")
+        // don't include subprojects from build directories
+        exclude("**/build")
+    }
+    .forEach {
+        val path = rootDir.toPath().relativize(it.toPath().getParent())
+        val gradlePath = ":${path.joinToString(":")}"
+        include(gradlePath)
+    }
diff --git a/templates/single-app/submission/appTest/build.gradle.kts b/templates/single-app/submission/appTest/build.gradle.kts
new file mode 100644
index 0000000..ee315d0
--- /dev/null
+++ b/templates/single-app/submission/appTest/build.gradle.kts
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2024 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.
+ */
+plugins { id("com.android.security.autorepro.apptest") }
+
+// Note: the Gradle package name is appended to the namespace "com.android.security"
+appTest {}
diff --git a/templates/single-app/submission/appTest/src/main/AndroidManifest.xml b/templates/single-app/submission/appTest/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3f2ec78
--- /dev/null
+++ b/templates/single-app/submission/appTest/src/main/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2025 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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    android:versionCode="1"
+    android:versionName="1.0">
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="${applicationId}" />
+    <application
+        android:supportsRtl="true">
+        <activity
+            android:name=".PocActivity"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/templates/single-app/submission/appTest/src/main/java/com/android/security/DeviceTest.java b/templates/single-app/submission/appTest/src/main/java/com/android/security/DeviceTest.java
new file mode 100644
index 0000000..059b0ea
--- /dev/null
+++ b/templates/single-app/submission/appTest/src/main/java/com/android/security/DeviceTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2025 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 com.android.security;
+
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.util.Log;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * An example device test that starts an activity and uses broadcasts to wait for the artifact
+ * proving vulnerability
+ */
+@RunWith(AndroidJUnit4.class)
+public class DeviceTest {
+    private static final String TAG = DeviceTest.class.getSimpleName();
+    Context mContext;
+
+    /** Test broadcast action */
+    public static final String ACTION_BROADCAST = "action_security_test_broadcast";
+
+    /** Broadcast intent extra name for artifacts */
+    public static final String INTENT_ARTIFACT = "artifact";
+
+    /** Device test */
+    @Test
+    public void testDeviceSideMethod() throws Exception {
+        mContext = getApplicationContext();
+
+        AtomicReference<String> actual = new AtomicReference<>();
+        final Semaphore broadcastReceived = new Semaphore(0);
+        BroadcastReceiver broadcastReceiver =
+                new BroadcastReceiver() {
+                    @Override
+                    public void onReceive(Context context, Intent intent) {
+                        try {
+                            if (!intent.getAction().equals(ACTION_BROADCAST)) {
+                                Log.i(
+                                        TAG,
+                                        String.format(
+                                                "got a broadcast that we didn't expect: %s",
+                                                intent.getAction()));
+                            }
+                            actual.set(intent.getStringExtra(INTENT_ARTIFACT));
+                            broadcastReceived.release();
+                        } catch (Exception e) {
+                            Log.e(TAG, "got an exception when handling broadcast", e);
+                        }
+                    }
+                };
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(ACTION_BROADCAST);
+        mContext.registerReceiver(broadcastReceiver, filter, Context.RECEIVER_EXPORTED);
+
+        // start the target app
+        try {
+            Log.d(TAG, "starting local activity");
+            Intent newActivityIntent = new Intent(mContext, PocActivity.class);
+            newActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            // this could be startActivityForResult, but is generic for illustrative purposes
+            mContext.startActivity(newActivityIntent);
+        } finally {
+            getInstrumentation().getUiAutomation().dropShellPermissionIdentity();
+        }
+        assertTrue(
+                "Timed out when getting result from other activity",
+                broadcastReceived.tryAcquire(/* TIMEOUT_MS */ 5000, TimeUnit.MILLISECONDS));
+        assertEquals("The target artifact should have been 'secure'", "secure", actual.get());
+    }
+}
diff --git a/templates/single-app/submission/appTest/src/main/java/com/android/security/PocActivity.java b/templates/single-app/submission/appTest/src/main/java/com/android/security/PocActivity.java
new file mode 100644
index 0000000..113bd2b
--- /dev/null
+++ b/templates/single-app/submission/appTest/src/main/java/com/android/security/PocActivity.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2025 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 com.android.security;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+public class PocActivity extends Activity {
+    private static final String TAG = PocActivity.class.getSimpleName();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        Log.d(TAG, "poc activity started");
+
+        // Collect the artifact representing vulnerability here.
+        // Change this to whatever type best fits the vulnerable artifact; consider using a bundle
+        // if there are multiple artifacts necessary to prove the security vulnerability.
+        String artifact = "vulnerable";
+
+        Intent vulnerabilityDescriptionIntent = new Intent(DeviceTest.ACTION_BROADCAST);
+        vulnerabilityDescriptionIntent.putExtra(DeviceTest.INTENT_ARTIFACT, artifact);
+        this.sendBroadcast(vulnerabilityDescriptionIntent);
+    }
+}
diff --git a/templates/single-app/submission/appTest/src/main/res/layout/activity_main.xml b/templates/single-app/submission/appTest/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..0edbaae
--- /dev/null
+++ b/templates/single-app/submission/appTest/src/main/res/layout/activity_main.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2024 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.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</LinearLayout>
+
diff --git a/templates/single-app/submission/build.gradle.kts b/templates/single-app/submission/build.gradle.kts
new file mode 100644
index 0000000..9f62006
--- /dev/null
+++ b/templates/single-app/submission/build.gradle.kts
@@ -0,0 +1,26 @@
+plugins { id("com.android.security.autorepro.submission") }
+
+fun getSubprojects(): List<Project> {
+    // glob for gradle direct subprojects
+    return fileTree(projectDir) { include("*/build.gradle*") }
+        .map {
+            val path = projectDir.toPath().relativize(it.toPath().getParent())
+            val gradlePath = path.toString().replace('/', ':')
+            gradlePath
+        }
+        .filter({
+            // filter out self build.gradle*
+            !it.isEmpty()
+        })
+        .map { project(it) }
+}
+
+// NOTE! all AutoRepro dependencies must be subprojects
+dependencies {
+    // Automatically add each subproject as an AutoRepro Test Resource
+    getSubprojects().forEach { testResource(it) }
+}
+
+submission {
+    // Please configure your submission attributes here
+}
diff --git a/templates/single-app/submission/hostTest/build.gradle.kts b/templates/single-app/submission/hostTest/build.gradle.kts
new file mode 100644
index 0000000..7222155
--- /dev/null
+++ b/templates/single-app/submission/hostTest/build.gradle.kts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2024 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.
+ */
+plugins { id("com.android.security.autorepro.javahosttest") }
diff --git a/templates/single-app/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java b/templates/single-app/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java
new file mode 100644
index 0000000..2cc1406
--- /dev/null
+++ b/templates/single-app/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2025 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 com.android.security.autorepro_placeholder;
+
+import static org.junit.Assert.assertTrue;
+
+import com.android.sts.common.tradefed.testtype.NonRootSecurityTestCase;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class HostsideTest extends NonRootSecurityTestCase {
+
+    // Set from the Gradle project for the AppTest plugins.
+    static final String TEST_APP = "appTest_AutoReproPlaceholder.apk";
+    // The Gradle project name is appended to the namespace "com.android.security".
+    static final String TEST_PKG = "com.android.security.appTest_AutoReproPlaceholder";
+    // The class name will be different from the application ID but will match the source code.
+    static final String TEST_CLASS = "com.android.security.DeviceTest";
+
+    /** An app test, which uses this host Java test to launch an Android instrumented test */
+    @Test
+    public void testWithApp() throws Exception {
+        ITestDevice device = getDevice();
+        assertTrue("could not disable root", device.disableAdbRoot());
+        uninstallPackage(device, TEST_PKG);
+
+        installPackage(TEST_APP);
+        runDeviceTests(TEST_PKG, TEST_CLASS, "testDeviceSideMethod");
+    }
+}
diff --git a/templates/single-app/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md b/templates/single-app/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md
new file mode 100644
index 0000000..8179c0d
--- /dev/null
+++ b/templates/single-app/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md
@@ -0,0 +1 @@
+## All Hostside java resource files should be placed in this directory
