This document discusses Android code templates, which use FreeMarker to generate boilerplate Android code and assets from simple UI parameters. It describes the default ADT templates, how they are located, and how to configure Eclipse to work with templates. It provides an overview of FreeMarker and demonstrates how to create a custom animation template using FreeMarker directives.
4. What are Android Code
Templates?
• A mechanism for generating boilerplate
Android code and assets from the input
of simple UI parameters.
• Intergrated with the Eclipse ADT Plugin
• Templates are written using
FreeMarker - a Java templating engine
• It is relatively lightweight - not a full
metadata driven code generation
solution like EMF
Friday 7 December 12
5. Code Generation Process
recipe.xml.ftl
UI Parameters
FreeMarker
MyActivity.java
MyActivity.java.ftl
Friday 7 December 12
6. Code Generation Process
recipe.xml.ftl
UI Parameters
FreeMarker
output directory
root
(source directory)
Friday 7 December 12
28. Tools and Config
• Eclipse
• FreeMarker IDE
• Create a location mapping in Eclipse to
<android-sdk>/tools/templates
• ADT Plugin Preview Releases
Friday 7 December 12
29. FreeMarker IDE
Key Features:
• Syntax Highlighting
• Template Structure Outline
• Developer:
JBoss Tools Sub Project
Friday 7 December 12
63. Template Variable Dataflow
UI Parameters Global Values
globals.xml.ftl
Recipe Execution
Friday 7 December 12
64. FreeMarker
Template Language
Friday 7 December 12
65. FreeMarker Template Language
• It is a Java Template Language used
for over 10 years
• It is an example of a DSL for generating
text output of any kind
• It has a small subset of programming
language constructs
• Similar to: Velocity Template Language,
C Preprocessor, PHP, Django templates
• http://freemarker.org
Friday 7 December 12
66. Introduction to FreeMarker
Template Data
<manifest>
<activity name="{activityName}"> <global id="HomeActivity" value=
<manifest> "HomeActivity"/>
FreeMarker
Merge
<manifest>
<activity name="HomeActivity">
<manifest>
Output
Friday 7 December 12
71. Extra Template Functions
string slashedPackageName(string)
This function converts a full Java package name to its corresponding directory path.
For example, if the given argument is com.example.foo, the return value will be com/
example/foo.
<global id="srcOut" value="src/${slashedPackageName(packageName)}" />
string underscoreToCamelCase(string)
This function converts an underscore-delimited string, such as foo_bar, to its
corresponding camel-case string, such as FooBar.
string activityToLayout(string)
This function converts an activity class-like identifer string, such as FooActivity, to a
corresponding resource-friendly identifier string, such as activity_foo.
Friday 7 December 12