aboutsummaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
authorScott Barta <sbarta@google.com>2013-04-15 12:42:56 -0700
committerScott Barta <sbarta@google.com>2013-04-26 15:14:32 -0700
commit5afb360a339d083d0edc7b78c04f2dcfbd2a7f41 (patch)
tree477b9bcff9eafa3e5bb8d3bb1139c0f9fd2b21aa /templates
parent31baa1d95b494108670d0033b4724ef78f41ef85 (diff)
downloadsdk-5afb360a339d083d0edc7b78c04f2dcfbd2a7f41.zip
sdk-5afb360a339d083d0edc7b78c04f2dcfbd2a7f41.tar.gz
sdk-5afb360a339d083d0edc7b78c04f2dcfbd2a7f41.tar.bz2
Modified templates for Gradle projects
Modifies the existing templates to output Gradle build files with a new multi-level directory structure. The templates continue to work the old way that Eclipse expects, and the new behavior is only enabled if the "isGradle" global is set to "true". Files to configure the Gradle wrapper are placed in the SDK at tools/templates/gradle/wrapper. This CL changes all file copies and merges to go to fully-qualified directories set up via global variables. Things go to the old locations for non-Gradle builds based on how the globals are set up, but Gradle builds can override output directory variables to reflect the new directory structure. This CL also adds NewAndroidLibrary and NewJavaLibrary project templates, which will be used in the future. The current NewAndroidApplication template also can output a library, which is redundant and confusing; this will likely be fixed somehow in the future. Change-Id: Ieb830bdfba1797d87a218326ebd37c99d254758e
Diffstat (limited to 'templates')
-rw-r--r--templates/activities/BlankActivity/globals.xml.ftl3
-rw-r--r--templates/activities/BlankActivity/recipe.xml.ftl29
-rw-r--r--templates/activities/FullscreenActivity/globals.xml.ftl3
-rw-r--r--templates/activities/FullscreenActivity/recipe.xml.ftl21
-rw-r--r--templates/activities/FullscreenActivity/root/res/values/attrs.xml2
-rw-r--r--templates/activities/LoginActivity/globals.xml.ftl3
-rw-r--r--templates/activities/LoginActivity/recipe.xml.ftl17
-rw-r--r--templates/activities/MasterDetailFlow/globals.xml.ftl3
-rw-r--r--templates/activities/MasterDetailFlow/recipe.xml.ftl20
-rw-r--r--templates/activities/SettingsActivity/globals.xml.ftl3
-rw-r--r--templates/activities/SettingsActivity/recipe.xml.ftl17
-rw-r--r--templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jarbin0 -> 49896 bytes
-rw-r--r--templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties6
-rwxr-xr-xtemplates/gradle/wrapper/gradlew164
-rw-r--r--templates/gradle/wrapper/gradlew.bat90
-rw-r--r--templates/projects/NewAndroidApplication/globals.xml.ftl6
-rw-r--r--templates/projects/NewAndroidApplication/recipe.xml.ftl28
-rw-r--r--templates/projects/NewAndroidApplication/root/build.gradle.ftl24
-rw-r--r--templates/projects/NewAndroidApplication/root/settings.gradle.ftl1
-rw-r--r--templates/projects/NewAndroidLibrary/globals.xml.ftl10
-rw-r--r--templates/projects/NewAndroidLibrary/recipe.xml.ftl33
-rw-r--r--templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl15
-rw-r--r--templates/projects/NewAndroidLibrary/root/build.gradle.ftl24
-rwxr-xr-xtemplates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.pngbin0 -> 9397 bytes
-rwxr-xr-xtemplates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.pngbin0 -> 5237 bytes
-rwxr-xr-xtemplates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.pngbin0 -> 14383 bytes
-rw-r--r--templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl11
-rw-r--r--templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml12
-rw-r--r--templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl3
-rw-r--r--templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl20
-rw-r--r--templates/projects/NewAndroidLibrary/root/settings.gradle.ftl1
-rw-r--r--templates/projects/NewAndroidLibrary/template.xml82
-rw-r--r--templates/projects/NewAndroidLibrary/template_new_project.pngbin0 -> 12408 bytes
-rw-r--r--templates/projects/NewJavaLibrary/globals.xml.ftl7
-rw-r--r--templates/projects/NewJavaLibrary/recipe.xml.ftl11
-rw-r--r--templates/projects/NewJavaLibrary/root/build.gradle.ftl1
-rw-r--r--templates/projects/NewJavaLibrary/root/settings.gradle.ftl1
-rw-r--r--templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java4
-rw-r--r--templates/projects/NewJavaLibrary/template.xml24
-rw-r--r--templates/projects/NewJavaLibrary/template_new_project.pngbin0 -> 12408 bytes
40 files changed, 649 insertions, 50 deletions
diff --git a/templates/activities/BlankActivity/globals.xml.ftl b/templates/activities/BlankActivity/globals.xml.ftl
index 6220005..11aabd7 100644
--- a/templates/activities/BlankActivity/globals.xml.ftl
+++ b/templates/activities/BlankActivity/globals.xml.ftl
@@ -1,5 +1,8 @@
<?xml version="1.0"?>
<globals>
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
<global id="menuName" value="${classToResource(activityClass)}" />
</globals>
diff --git a/templates/activities/BlankActivity/recipe.xml.ftl b/templates/activities/BlankActivity/recipe.xml.ftl
index 78bd8b2..148b09d 100644
--- a/templates/activities/BlankActivity/recipe.xml.ftl
+++ b/templates/activities/BlankActivity/recipe.xml.ftl
@@ -1,32 +1,37 @@
<?xml version="1.0"?>
<recipe>
- <merge from="AndroidManifest.xml.ftl" />
+ <merge from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
<instantiate from="res/menu/main.xml.ftl"
- to="res/menu/${menuName}.xml" />
+ to="${resOut}/menu/${menuName}.xml" />
- <merge from="res/values/strings.xml.ftl" />
+ <merge from="res/values/strings.xml.ftl"
+ to="${resOut}/values/strings.xml" />
- <merge from="res/values/dimens.xml" />
- <merge from="res/values-sw600dp/dimens.xml" />
- <merge from="res/values-sw720dp-land/dimens.xml" />
+ <merge from="res/values/dimens.xml"
+ to="${resOut}/values/dimens.xml" />
+ <merge from="res/values-sw600dp/dimens.xml"
+ to="${resOut}/values-sw600dp/dimens.xml" />
+ <merge from="res/values-sw720dp-land/dimens.xml"
+ to="${resOut}/values-sw720dp-land/dimens.xml" />
<!-- Decide what kind of layout to add (viewpager or not) -->
<#if navType?contains("pager")>
<instantiate from="res/layout/activity_pager.xml.ftl"
- to="res/layout/${layoutName}.xml" />
+ to="${resOut}/layout/${layoutName}.xml" />
<instantiate from="res/layout/fragment_dummy.xml.ftl"
- to="res/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
+ to="${resOut}/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
<#elseif navType == "tabs" || navType == "dropdown">
<instantiate from="res/layout/activity_fragment_container.xml"
- to="res/layout/${layoutName}.xml" />
+ to="${resOut}/layout/${layoutName}.xml" />
<instantiate from="res/layout/fragment_dummy.xml.ftl"
- to="res/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
+ to="${resOut}/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
<#else>
<instantiate from="res/layout/activity_simple.xml.ftl"
- to="res/layout/${layoutName}.xml" />
+ to="${resOut}/layout/${layoutName}.xml" />
</#if>
<!-- Decide which activity code to add -->
@@ -48,5 +53,5 @@
</#if>
- <open file="res/layout/${layoutName}.xml" />
+ <open file="${resOut}/layout/${layoutName}.xml" />
</recipe>
diff --git a/templates/activities/FullscreenActivity/globals.xml.ftl b/templates/activities/FullscreenActivity/globals.xml.ftl
index a416d3a..6d73e17 100644
--- a/templates/activities/FullscreenActivity/globals.xml.ftl
+++ b/templates/activities/FullscreenActivity/globals.xml.ftl
@@ -1,5 +1,8 @@
<?xml version="1.0"?>
<globals>
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
<global id="simpleName" value="${activityToLayout(activityClass)}" />
</globals>
diff --git a/templates/activities/FullscreenActivity/recipe.xml.ftl b/templates/activities/FullscreenActivity/recipe.xml.ftl
index 1e41e5f..b3e1f20 100644
--- a/templates/activities/FullscreenActivity/recipe.xml.ftl
+++ b/templates/activities/FullscreenActivity/recipe.xml.ftl
@@ -1,16 +1,21 @@
<?xml version="1.0"?>
<recipe>
- <merge from="AndroidManifest.xml.ftl" />
+ <merge from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
- <merge from="res/values/attrs.xml" />
- <merge from="res/values/colors.xml" />
- <merge from="res/values/styles.xml" />
- <merge from="res/values-v11/styles.xml" />
+ <merge from="res/values/attrs.xml"
+ to="${resOut}/values/attrs.xml" />
+ <merge from="res/values/colors.xml"
+ to="${resOut}/values/colors.xml" />
+ <merge from="res/values/styles.xml"
+ to="${resOut}/values/styles.xml" />
+ <merge from="res/values-v11/styles.xml"
+ to="${resOut}/values-v11/styles.xml" />
<instantiate from="res/layout/activity_fullscreen.xml.ftl"
- to="res/layout/${layoutName}.xml" />
+ to="${resOut}/layout/${layoutName}.xml" />
<merge from="res/values/strings.xml.ftl"
- to="res/values/strings.xml" />
+ to="${resOut}/values/strings.xml" />
<instantiate from="src/app_package/FullscreenActivity.java.ftl"
to="${srcOut}/${activityClass}.java" />
@@ -21,5 +26,5 @@
<instantiate from="src/app_package/util/SystemUiHiderHoneycomb.java.ftl"
to="${srcOut}/util/SystemUiHiderHoneycomb.java" />
- <open file="res/layout/${layoutName}.xml" />
+ <open file="${resOut}/layout/${layoutName}.xml" />
</recipe>
diff --git a/templates/activities/FullscreenActivity/root/res/values/attrs.xml b/templates/activities/FullscreenActivity/root/res/values/attrs.xml
index 0201588..2cf1a1a 100644
--- a/templates/activities/FullscreenActivity/root/res/values/attrs.xml
+++ b/templates/activities/FullscreenActivity/root/res/values/attrs.xml
@@ -9,4 +9,4 @@
<attr name="buttonBarButtonStyle" format="reference" />
</declare-styleable>
-</resources> \ No newline at end of file
+</resources>
diff --git a/templates/activities/LoginActivity/globals.xml.ftl b/templates/activities/LoginActivity/globals.xml.ftl
index 62dfd8d..fbe8985 100644
--- a/templates/activities/LoginActivity/globals.xml.ftl
+++ b/templates/activities/LoginActivity/globals.xml.ftl
@@ -1,6 +1,9 @@
<?xml version="1.0"?>
<globals>
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
<global id="menuName" value="${classToResource(activityClass)}" />
<global id="simpleName" value="${activityToLayout(activityClass)}" />
</globals>
diff --git a/templates/activities/LoginActivity/recipe.xml.ftl b/templates/activities/LoginActivity/recipe.xml.ftl
index ece4285..58d823f 100644
--- a/templates/activities/LoginActivity/recipe.xml.ftl
+++ b/templates/activities/LoginActivity/recipe.xml.ftl
@@ -1,19 +1,22 @@
<?xml version="1.0"?>
<recipe>
- <merge from="AndroidManifest.xml.ftl" />
+ <merge from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
- <merge from="res/values/styles.xml" />
- <merge from="res/values-large/styles.xml" />
+ <merge from="res/values/styles.xml"
+ to="${resOut}/values/styles.xml" />
+ <merge from="res/values-large/styles.xml"
+ to="${resOut}/values-large/styles.xml" />
<copy from="res/menu/activity_login.xml"
- to="res/menu/${menuName}.xml" />
+ to="${resOut}/menu/${menuName}.xml" />
<instantiate from="res/layout/activity_login.xml.ftl"
- to="res/layout/${layoutName}.xml" />
+ to="${resOut}/layout/${layoutName}.xml" />
<instantiate from="res/values/strings.xml.ftl"
- to="res/values/strings_${simpleName}.xml" />
+ to="${resOut}/values/strings_${simpleName}.xml" />
<instantiate from="src/app_package/LoginActivity.java.ftl"
to="${srcOut}/${activityClass}.java" />
- <open file="res/layout/${layoutName}.xml" />
+ <open file="${resOut}/layout/${layoutName}.xml" />
</recipe>
diff --git a/templates/activities/MasterDetailFlow/globals.xml.ftl b/templates/activities/MasterDetailFlow/globals.xml.ftl
index 952e278..415d60e 100644
--- a/templates/activities/MasterDetailFlow/globals.xml.ftl
+++ b/templates/activities/MasterDetailFlow/globals.xml.ftl
@@ -1,6 +1,9 @@
<?xml version="1.0"?>
<globals>
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
<global id="CollectionName" value="${extractLetters(objectKind)}List" />
<global id="collection_name" value="${extractLetters(objectKind?lower_case)}_list" />
<global id="DetailName" value="${extractLetters(objectKind)}Detail" />
diff --git a/templates/activities/MasterDetailFlow/recipe.xml.ftl b/templates/activities/MasterDetailFlow/recipe.xml.ftl
index 8b09c84..c06e517 100644
--- a/templates/activities/MasterDetailFlow/recipe.xml.ftl
+++ b/templates/activities/MasterDetailFlow/recipe.xml.ftl
@@ -1,19 +1,23 @@
<?xml version="1.0"?>
<recipe>
- <merge from="AndroidManifest.xml.ftl" />
+ <merge from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
- <merge from="res/values-large/refs.xml.ftl" />
- <merge from="res/values-sw600dp/refs.xml.ftl" />
- <merge from="res/values/strings.xml.ftl" />
+ <merge from="res/values-large/refs.xml.ftl"
+ to="${resOut}/values-large/refs.xml" />
+ <merge from="res/values-sw600dp/refs.xml.ftl"
+ to="${resOut}/values-sw600dp/refs.xml" />
+ <merge from="res/values/strings.xml.ftl"
+ to="${resOut}/values/strings.xml" />
<instantiate from="res/layout/activity_content_detail.xml.ftl"
- to="res/layout/activity_${detail_name}.xml" />
+ to="${resOut}/layout/activity_${detail_name}.xml" />
<instantiate from="res/layout/activity_content_list.xml.ftl"
- to="res/layout/activity_${collection_name}.xml" />
+ to="${resOut}/layout/activity_${collection_name}.xml" />
<instantiate from="res/layout/activity_content_twopane.xml.ftl"
- to="res/layout/activity_${extractLetters(objectKind?lower_case)}_twopane.xml" />
+ to="${resOut}/layout/activity_${extractLetters(objectKind?lower_case)}_twopane.xml" />
<instantiate from="res/layout/fragment_content_detail.xml.ftl"
- to="res/layout/fragment_${detail_name}.xml" />
+ to="${resOut}/layout/fragment_${detail_name}.xml" />
<instantiate from="src/app_package/ContentDetailActivity.java.ftl"
to="${srcOut}/${DetailName}Activity.java" />
diff --git a/templates/activities/SettingsActivity/globals.xml.ftl b/templates/activities/SettingsActivity/globals.xml.ftl
index a416d3a..6d73e17 100644
--- a/templates/activities/SettingsActivity/globals.xml.ftl
+++ b/templates/activities/SettingsActivity/globals.xml.ftl
@@ -1,5 +1,8 @@
<?xml version="1.0"?>
<globals>
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
<global id="simpleName" value="${activityToLayout(activityClass)}" />
</globals>
diff --git a/templates/activities/SettingsActivity/recipe.xml.ftl b/templates/activities/SettingsActivity/recipe.xml.ftl
index e315963..6f68147 100644
--- a/templates/activities/SettingsActivity/recipe.xml.ftl
+++ b/templates/activities/SettingsActivity/recipe.xml.ftl
@@ -1,14 +1,19 @@
<?xml version="1.0"?>
<recipe>
- <merge from="AndroidManifest.xml.ftl" />
+ <merge from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
- <copy from="res/xml/pref_data_sync.xml" />
- <copy from="res/xml/pref_general.xml" />
- <merge from="res/xml/pref_headers.xml.ftl" />
- <copy from="res/xml/pref_notification.xml" />
+ <copy from="res/xml/pref_data_sync.xml"
+ to="${resOut}/xml/pref_data_sync.xml" />
+ <copy from="res/xml/pref_general.xml"
+ to="${resOut}/xml/pref_general.xml" />
+ <merge from="res/xml/pref_headers.xml.ftl"
+ to="${resOut}/xml/pref_headers.xml" />
+ <copy from="res/xml/pref_notification.xml"
+ to="${resOut}/xml/pref_notification.xml" />
<instantiate from="res/values/strings.xml.ftl"
- to="res/values/strings_${simpleName}.xml" />
+ to="${resOut}/values/strings_${simpleName}.xml" />
<instantiate from="src/app_package/SettingsActivity.java.ftl"
to="${srcOut}/${activityClass}.java" />
diff --git a/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
--- /dev/null
+++ b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..d67ba29
--- /dev/null
+++ b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=http\://services.gradle.org/distributions-snapshots/gradle-1.6-20130404052254+0000-bin.zip
diff --git a/templates/gradle/wrapper/gradlew b/templates/gradle/wrapper/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/templates/gradle/wrapper/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+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"
+ which java >/dev/null 2>&1 || 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
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/templates/gradle/wrapper/gradlew.bat b/templates/gradle/wrapper/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/templates/gradle/wrapper/gradlew.bat
@@ -0,0 +1,90 @@
+@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
+
+@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=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+: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 %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="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!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/templates/projects/NewAndroidApplication/globals.xml.ftl b/templates/projects/NewAndroidApplication/globals.xml.ftl
index bfc27eb..2565dcd 100644
--- a/templates/projects/NewAndroidApplication/globals.xml.ftl
+++ b/templates/projects/NewAndroidApplication/globals.xml.ftl
@@ -1,4 +1,10 @@
<?xml version="1.0"?>
<globals>
+ <global id="isGradle" value="false" />
+ <global id="topOut" value="." />
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
+ <global id="mavenUrl" value="" />
</globals>
diff --git a/templates/projects/NewAndroidApplication/recipe.xml.ftl b/templates/projects/NewAndroidApplication/recipe.xml.ftl
index bc8f02e..79210a9 100644
--- a/templates/projects/NewAndroidApplication/recipe.xml.ftl
+++ b/templates/projects/NewAndroidApplication/recipe.xml.ftl
@@ -1,21 +1,33 @@
<?xml version="1.0"?>
<recipe>
- <instantiate from="AndroidManifest.xml.ftl" />
+<#if isGradle == "true">
+ <merge from="settings.gradle.ftl"
+ to="${topOut}/settings.gradle" />
+ <instantiate from="build.gradle.ftl"
+ to="${projectOut}/build.gradle" />
+</#if>
+ <instantiate from="AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
<#if copyIcons>
- <copy from="res/drawable-hdpi" />
- <copy from="res/drawable-mdpi" />
- <copy from="res/drawable-xhdpi" />
+ <copy from="res/drawable-hdpi"
+ to="${resOut}/drawable-hdpi" />
+ <copy from="res/drawable-mdpi"
+ to="${resOut}/drawable-mdpi" />
+ <copy from="res/drawable-xhdpi"
+ to="${resOut}/drawable-xhdpi" />
</#if>
- <instantiate from="res/values/styles.xml.ftl" />
+ <instantiate from="res/values/styles.xml.ftl"
+ to="${resOut}/values/styles.xml" />
<#if buildApi gte 11 && baseTheme != "none">
<instantiate from="res/values-v11/styles_hc.xml.ftl"
- to="res/values-v11/styles.xml" />
+ to="${resOut}/values-v11/styles.xml" />
</#if>
<#if buildApi gte 14 && baseTheme?contains("darkactionbar")>
<copy from="res/values-v14/styles_ics.xml"
- to="res/values-v14/styles.xml" />
+ to="${resOut}/values-v14/styles.xml" />
</#if>
- <instantiate from="res/values/strings.xml.ftl" />
+ <instantiate from="res/values/strings.xml.ftl"
+ to="${resOut}/values/strings.xml" />
</recipe>
diff --git a/templates/projects/NewAndroidApplication/root/build.gradle.ftl b/templates/projects/NewAndroidApplication/root/build.gradle.ftl
new file mode 100644
index 0000000..0232c7e
--- /dev/null
+++ b/templates/projects/NewAndroidApplication/root/build.gradle.ftl
@@ -0,0 +1,24 @@
+buildscript {
+ repositories {
+ maven { url '${mavenUrl}/prebuilts-repo' }
+ maven { url '${mavenUrl}/tools-repo' }
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:0.4-SNAPSHOT'
+ }
+}
+apply plugin: 'android'
+
+dependencies {
+ compile files('libs/android-support-v4.jar')
+}
+
+android {
+ compileSdkVersion ${buildApi}
+ buildToolsVersion "${buildApi}"
+
+ defaultConfig {
+ minSdkVersion ${minApi}
+ targetSdkVersion ${targetApi}
+ }
+}
diff --git a/templates/projects/NewAndroidApplication/root/settings.gradle.ftl b/templates/projects/NewAndroidApplication/root/settings.gradle.ftl
new file mode 100644
index 0000000..b12004b
--- /dev/null
+++ b/templates/projects/NewAndroidApplication/root/settings.gradle.ftl
@@ -0,0 +1 @@
+include ':${projectName}'
diff --git a/templates/projects/NewAndroidLibrary/globals.xml.ftl b/templates/projects/NewAndroidLibrary/globals.xml.ftl
new file mode 100644
index 0000000..2565dcd
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/globals.xml.ftl
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<globals>
+ <global id="isGradle" value="false" />
+ <global id="topOut" value="." />
+ <global id="projectOut" value="." />
+ <global id="manifestOut" value="." />
+ <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+ <global id="resOut" value="res" />
+ <global id="mavenUrl" value="" />
+</globals>
diff --git a/templates/projects/NewAndroidLibrary/recipe.xml.ftl b/templates/projects/NewAndroidLibrary/recipe.xml.ftl
new file mode 100644
index 0000000..9999701
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/recipe.xml.ftl
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<recipe>
+<#if isGradle == "true">
+ <merge from="settings.gradle.ftl"
+ to="${topOut}/settings.gradle" />
+ <instantiate from="build.gradle.ftl"
+ to="${projectOut}/build.gradle" />
+</#if>
+ <instantiate from="MODULE_NAME/src/main/AndroidManifest.xml.ftl"
+ to="${manifestOut}/AndroidManifest.xml" />
+
+<#if copyIcons>
+ <copy from="res/drawable-hdpi"
+ to="${resOut}/drawable-hdpi" />
+ <copy from="res/drawable-mdpi"
+ to="${resOut}/drawable-mdpi" />
+ <copy from="res/drawable-xhdpi"
+ to="${resOut}/drawable-xhdpi" />
+</#if>
+ <instantiate from="res/values/styles.xml.ftl"
+ to="${resOut}/values/styles.xml" />
+<#if buildApi gte 11 && baseTheme != "none">
+ <instantiate from="res/values-v11/styles_hc.xml.ftl"
+ to="${resOut}/values-v11/styles.xml" />
+</#if>
+<#if buildApi gte 14 && baseTheme?contains("darkactionbar")>
+ <copy from="res/values-v14/styles_ics.xml"
+ to="${resOut}/values-v14/styles.xml" />
+</#if>
+
+ <instantiate from="res/values/strings.xml.ftl"
+ to="${resOut}/values/strings.xml" />
+</recipe>
diff --git a/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl b/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl
new file mode 100644
index 0000000..390a9da
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl
@@ -0,0 +1,15 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="${packageName}"
+ android:versionCode="1"
+ android:versionName="1.0">
+
+ <uses-sdk android:minSdkVersion="${minApi}" <#if buildApi gte 4>android:targetSdkVersion="${targetApi}" </#if>/>
+
+ <application <#if minApiLevel gte 4 && buildApi gte 4>android:allowBackup="true"</#if>
+ android:label="@string/app_name"
+ android:icon="@drawable/ic_launcher"<#if baseTheme != "none">
+ android:theme="@style/AppTheme"</#if>>
+
+ </application>
+
+</manifest>
diff --git a/templates/projects/NewAndroidLibrary/root/build.gradle.ftl b/templates/projects/NewAndroidLibrary/root/build.gradle.ftl
new file mode 100644
index 0000000..12733c7
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/build.gradle.ftl
@@ -0,0 +1,24 @@
+buildscript {
+ repositories {
+ maven { url '${mavenUrl}/prebuilts-repo' }
+ maven { url '${mavenUrl}/tools-repo' }
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:0.4-SNAPSHOT'
+ }
+}
+apply plugin: 'android-library'
+
+dependencies {
+ compile files('libs/android-support-v4.jar')
+}
+
+android {
+ compileSdkVersion ${buildApi}
+ buildToolsVersion "${buildApi}"
+
+ defaultConfig {
+ minSdkVersion ${minApi}
+ targetSdkVersion ${targetApi}
+ }
+}
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..96a442e
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..359047d
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..71c6d76
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl
new file mode 100644
index 0000000..f8993c3
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl
@@ -0,0 +1,11 @@
+<resources>
+
+ <!--
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo<#if baseTheme?contains("light")>.Light</#if>">
+ <!-- API 11 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml b/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml
new file mode 100644
index 0000000..a91fd03
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml
@@ -0,0 +1,12 @@
+<resources>
+
+ <!--
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- API 14 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl
new file mode 100644
index 0000000..ee03444
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">${escapeXmlString(appTitle)}</string>
+</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl
new file mode 100644
index 0000000..30fe5b5
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl
@@ -0,0 +1,20 @@
+<resources>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme<#if baseTheme?contains("light")>.Light</#if>">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl b/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl
new file mode 100644
index 0000000..b12004b
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl
@@ -0,0 +1 @@
+include ':${projectName}'
diff --git a/templates/projects/NewAndroidLibrary/template.xml b/templates/projects/NewAndroidLibrary/template.xml
new file mode 100644
index 0000000..463643d
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/template.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<template
+ format="1"
+ revision="1"
+ name="Android Library"
+ description="Creates a new Android library.">
+ <dependency name="android-support-v4" revision="8" />
+
+ <thumbs>
+ <thumb>template_new_project.png</thumb>
+ </thumbs>
+
+ <category value="Applications" />
+
+ <parameter
+ id="packageName"
+ name="Package name"
+ type="string"
+ constraints="package"
+ default="com.mycompany.myapp" />
+
+ <parameter
+ id="appTitle"
+ name="Library title"
+ type="string"
+ constraints="nonempty"
+ default="My Library"/>
+
+ <parameter
+ id="baseTheme"
+ name="Base Theme"
+ type="enum"
+ default="holo_light_darkactionbar"
+ help="The base user interface theme for the library">
+ <option id="none">None</option>
+ <option id="holo_dark" minBuildApi="11">Holo Dark</option>
+ <option id="holo_light" minBuildApi="11">Holo Light</option>
+ <option id="holo_light_darkactionbar" minBuildApi="14" default="true">Holo Light with Dark Action Bar</option>
+ </parameter>
+
+ <parameter
+ id="minApi"
+ name="Minimum API level"
+ type="string"
+ constraints="apilevel"
+ default="7" />
+
+ <!--
+ Usually the same as minApi, but when minApi is a code name this will be the corresponding
+ API level
+ -->
+ <parameter
+ id="minApiLevel"
+ name="Minimum API level"
+ type="string"
+ constraints="apilevel"
+ default="7" />
+
+ <parameter
+ id="targetApi"
+ name="Target API level"
+ type="string"
+ constraints="apilevel"
+ default="16" />
+
+ <parameter
+ id="buildApi"
+ name="Build API level"
+ type="string"
+ constraints="apilevel"
+ default="16" />
+
+ <parameter
+ id="copyIcons"
+ name="Include launcher icons"
+ type="boolean"
+ default="true" />
+
+ <globals file="globals.xml.ftl" />
+ <execute file="recipe.xml.ftl" />
+
+</template>
diff --git a/templates/projects/NewAndroidLibrary/template_new_project.png b/templates/projects/NewAndroidLibrary/template_new_project.png
new file mode 100644
index 0000000..92e8556
--- /dev/null
+++ b/templates/projects/NewAndroidLibrary/template_new_project.png
Binary files differ
diff --git a/templates/projects/NewJavaLibrary/globals.xml.ftl b/templates/projects/NewJavaLibrary/globals.xml.ftl
new file mode 100644
index 0000000..5b9b620
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/globals.xml.ftl
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<globals>
+ <global id="isGradle" value="false" />
+ <global id="topOut" value="." />
+ <global id="projectOut" value="." />
+ <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
+</globals>
diff --git a/templates/projects/NewJavaLibrary/recipe.xml.ftl b/templates/projects/NewJavaLibrary/recipe.xml.ftl
new file mode 100644
index 0000000..e2d943a
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/recipe.xml.ftl
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<recipe>
+<#if isGradle == "true">
+ <merge from="settings.gradle.ftl"
+ to="${topOut}/settings.gradle" />
+ <instantiate from="build.gradle.ftl"
+ to="${projectOut}/build.gradle" />
+</#if>
+ <instantiate from="/src/library_package/Placeholder.java"
+ to="${srcOut}/Placeholder.java" />
+</recipe>
diff --git a/templates/projects/NewJavaLibrary/root/build.gradle.ftl b/templates/projects/NewJavaLibrary/root/build.gradle.ftl
new file mode 100644
index 0000000..bbfeb03
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/root/build.gradle.ftl
@@ -0,0 +1 @@
+apply plugin: 'java'
diff --git a/templates/projects/NewJavaLibrary/root/settings.gradle.ftl b/templates/projects/NewJavaLibrary/root/settings.gradle.ftl
new file mode 100644
index 0000000..b12004b
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/root/settings.gradle.ftl
@@ -0,0 +1 @@
+include ':${projectName}'
diff --git a/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java b/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java
new file mode 100644
index 0000000..016aacb
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java
@@ -0,0 +1,4 @@
+package com.example;
+
+public class Placeholder {
+}
diff --git a/templates/projects/NewJavaLibrary/template.xml b/templates/projects/NewJavaLibrary/template.xml
new file mode 100644
index 0000000..4a3ed90
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/template.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<template
+ format="1"
+ revision="1"
+ name="Java Library"
+ description="Creates a new Java library.">
+
+ <thumbs>
+ <thumb>template_new_project.png</thumb>
+ </thumbs>
+
+ <category value="Applications" />
+
+ <parameter
+ id="projectName"
+ name="Library name"
+ type="string"
+ constraints="nonempty"
+ default="MyLibrary"/>
+
+ <globals file="globals.xml.ftl" />
+ <execute file="recipe.xml.ftl" />
+
+</template>
diff --git a/templates/projects/NewJavaLibrary/template_new_project.png b/templates/projects/NewJavaLibrary/template_new_project.png
new file mode 100644
index 0000000..92e8556
--- /dev/null
+++ b/templates/projects/NewJavaLibrary/template_new_project.png
Binary files differ