diff --git a/templates/single-ndk/.gitignore b/templates/single-ndk/.gitignore
new file mode 100644
index 0000000..1ffc05a
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/assembleSubmissionSources.run.xml b/templates/single-ndk/.run/assembleSubmissionSources.run.xml
new file mode 100644
index 0000000..b6f979e
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/assembleSubmissionZip.run.xml b/templates/single-ndk/.run/assembleSubmissionZip.run.xml
new file mode 100644
index 0000000..f3edeeb
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/autorepro_nonroot_arm64.run.xml b/templates/single-ndk/.run/autorepro_nonroot_arm64.run.xml
new file mode 100644
index 0000000..b605143
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/autorepro_nonroot_x86_64.run.xml b/templates/single-ndk/.run/autorepro_nonroot_x86_64.run.xml
new file mode 100644
index 0000000..bd5ecf1
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/autorepro_root_arm64.run.xml b/templates/single-ndk/.run/autorepro_root_arm64.run.xml
new file mode 100644
index 0000000..6a43191
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/autorepro_root_x86_64.run.xml b/templates/single-ndk/.run/autorepro_root_x86_64.run.xml
new file mode 100644
index 0000000..03d6be5
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/.run/copyInvocationResultsToSubmission.run.xml b/templates/single-ndk/.run/copyInvocationResultsToSubmission.run.xml
new file mode 100644
index 0000000..45ee95c
--- /dev/null
+++ b/templates/single-ndk/.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-ndk/gradle.properties b/templates/single-ndk/gradle.properties
new file mode 100644
index 0000000..cc18a0c
--- /dev/null
+++ b/templates/single-ndk/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-ndk/gradle/wrapper/gradle-wrapper.jar b/templates/single-ndk/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..033e24c
--- /dev/null
+++ b/templates/single-ndk/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/templates/single-ndk/gradle/wrapper/gradle-wrapper.properties b/templates/single-ndk/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..56a6388
--- /dev/null
+++ b/templates/single-ndk/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-ndk/gradlew b/templates/single-ndk/gradlew
new file mode 100755
index 0000000..fcb6fca
--- /dev/null
+++ b/templates/single-ndk/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-ndk/gradlew.bat b/templates/single-ndk/gradlew.bat
new file mode 100644
index 0000000..6689b85
--- /dev/null
+++ b/templates/single-ndk/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-ndk/settings.gradle.kts b/templates/single-ndk/settings.gradle.kts
new file mode 100644
index 0000000..13a00ec
--- /dev/null
+++ b/templates/single-ndk/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-ndk/submission/build.gradle.kts b/templates/single-ndk/submission/build.gradle.kts
new file mode 100644
index 0000000..9f62006
--- /dev/null
+++ b/templates/single-ndk/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-ndk/submission/hostTest/build.gradle.kts b/templates/single-ndk/submission/hostTest/build.gradle.kts
new file mode 100644
index 0000000..7222155
--- /dev/null
+++ b/templates/single-ndk/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-ndk/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java b/templates/single-ndk/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java
new file mode 100644
index 0000000..e184156
--- /dev/null
+++ b/templates/single-ndk/submission/hostTest/src/main/java/com/android/security/autorepro_placeholder/HostsideTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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 com.android.sts.common.NativePoc;
+import com.android.sts.common.NativePocStatusAsserter;
+import com.android.sts.common.tradefed.testtype.NonRootSecurityTestCase;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class HostsideTest extends NonRootSecurityTestCase {
+    /**
+     * A native PoC test, which uses this host Java test to push an executable with resources and
+     * execute with environment variables and more. This API uses a "NativePocAsserter" that handles
+     * the most common ways to retrieve data from the native PoC. It can be overloaded to handle the
+     * specific side-effect that your PoC generates.
+     */
+    @Test
+    public void testWithNativePoc() throws Exception {
+        final String resourcePath = "AutoReproPlaceholder/res.txt";
+
+        NativePoc.builder()
+                // the name of the PoC
+                .pocName("ndkTest_AutoReproPlaceholder")
+                // extra files pushed to the device
+                .resources(resourcePath)
+                // command-line arguments for the PoC
+                .args(resourcePath, "vulnerable")
+                // other options allow different linker paths for library shims
+                .useDefaultLdLibraryPath(true)
+                // test ends with ASSUMPTION_FAILURE if not EXIT_OK
+                .assumePocExitSuccess(true)
+                // run code after the PoC is executed for cleanup or other
+                .after(r -> getDevice().executeShellV2Command("ls -l /"))
+                // fail if the poc returns exit status 113
+                .asserter(NativePocStatusAsserter.assertNotVulnerableExitCode())
+                .build()
+                .run(this);
+    }
+}
diff --git a/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md b/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md
new file mode 100644
index 0000000..8179c0d
--- /dev/null
+++ b/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/README.md
@@ -0,0 +1 @@
+## All Hostside java resource files should be placed in this directory
diff --git a/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/res.txt b/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/res.txt
new file mode 100644
index 0000000..330ce8c
--- /dev/null
+++ b/templates/single-ndk/submission/hostTest/src/main/resources/AutoReproPlaceholder/res.txt
@@ -0,0 +1 @@
+Android Security
diff --git a/templates/single-ndk/submission/ndkTest/CMakeLists.txt b/templates/single-ndk/submission/ndkTest/CMakeLists.txt
new file mode 100644
index 0000000..0f84092
--- /dev/null
+++ b/templates/single-ndk/submission/ndkTest/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.22.1)
+
+project("ndkTest")
+
+add_executable(
+        ndkTest
+        src/native-sample.cpp
+)
+
+find_library( # Sets the name of the path variable.
+        log-lib
+        log)
diff --git a/templates/single-ndk/submission/ndkTest/build.gradle.kts b/templates/single-ndk/submission/ndkTest/build.gradle.kts
new file mode 100644
index 0000000..60ddb7a
--- /dev/null
+++ b/templates/single-ndk/submission/ndkTest/build.gradle.kts
@@ -0,0 +1,9 @@
+plugins {
+    id("com.android.security.autorepro.ndktest")
+}
+
+nativeTest {
+    minSdk = 33
+    targetSdk = 33
+    compileSdk = 33
+}
diff --git a/templates/single-ndk/submission/ndkTest/src/native-sample.cpp b/templates/single-ndk/submission/ndkTest/src/native-sample.cpp
new file mode 100644
index 0000000..663e4ee
--- /dev/null
+++ b/templates/single-ndk/submission/ndkTest/src/native-sample.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+#include <iostream>
+#include <fstream>
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+#define EXIT_VULNERABLE 113
+
+int main(int argc, char *argv[]) {
+    if (argc != 3) {
+        std::cout << "unknown commands" << std::endl;
+        return EXIT_FAILURE;
+    }
+
+    std::ifstream f(argv[1]);
+    if (f.is_open()) {
+        // the host test can either check exit code or stdout
+        std::cout << "Hello " << f.rdbuf() << "! " << argv[2] << std::endl;
+        // please don't use a test-controlled value in a security report
+        std::string expected = "secure";
+        if (expected.compare(argv[2]) != 0) {
+            return EXIT_VULNERABLE;
+        } else {
+            return EXIT_SUCCESS;
+        }
+    } else {
+        std::cout << "could not open file" << std::endl;
+        return EXIT_FAILURE;
+    }
+}
