page.title=The Developer's Guide
@jd:body

<p>
Welcome to the <i>Android Dev Guide</i>! The Dev Guide provides 
a practical introduction to developing applications for Android and documentation about major
platform features. It explores the concepts behind Android, the framework for 
constructing an application, and the tools for developing, 
testing, and publishing software for the platform.
</p>

<p>
The Dev Guide holds most of the documentation for the Android
platform, except for reference material on the framework API.  
For API specifications, go to the 
<a href="{@docRoot}reference/packages.html">Reference</a>.
</p>  

<p>
As you can see in the panel on the left, the Dev Guide is 
divided into several sections:
<p>

<dl>
<dt><b>Android Basics</b></dt>
<dd>An initial orientation to Android &mdash; what it is, 
what it offers, and how your application fits in.</dd>

<dt><b>Framework Topics</b></dt>
<dd>Discussions of particular parts of the Android framework
and API.  For an introduction to the framework, begin with
<a href="{@docRoot}guide/topics/fundamentals.html">Application
Fundamentals</a>.  Then explore other topics &mdash; from 
designing a user interface and setting up resources to storing 
data and using permissions &mdash; as needed.</dd>

<dt><b>Android Market Topics</b></dt>
<dd>Documentation for topics that concern publishing and monetizing applications on Android
Market, such as how to enforce licensing policies and implement in-app billing.</dd>

<dt><b>Developing</b></dt>
<dd>Directions for using Android's development and debugging tools, 
and for testing the results.</dd>

<dt><b>Publishing</b></dt>
<dd>Instructions on how to prepare your application for deployment
and how to publish it when it's ready.</dd>

<dt><b>Best Practices</b></dt> 
<dd>Recommendations on preferred techniques for writing  
applications that perform efficiently and work well for the
user.</dd>

<dt><b>Web Applications</b></dt> 
<dd>Documentation about how to create web applications that work seamlessly on Android-powered
devices and create Android applications that embed web-based content.</dd>

<dt><b>Appendix</b></dt>
<dd>Reference information and specifications, as well as FAQs, 
a glossary of terms, and other information.</dd>
</dl>

<p>
The first step in programming for Android is downloading the SDK
(software development kit).  For instructions and information, visit the <a
href="{@docRoot}sdk/index.html">SDK</a> tab.
</p>

<p>
After you have the SDK, begin by looking through the Dev Guide.
If you want to start by getting a quick look at some code, the 
<a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a>
tutorial walks you through a standard "Hello, World" application to introduce some basics of an
Android application. The 
<a href="{@docRoot}guide/topics/fundamentals.html">Application
Fundamentals</a> document is a good place to start learning the basics about the application
framework.
</p>


<p>
For additional help, consider joining one or more of the Android 
discussion groups.  Go to the 
<a href="{@docRoot}resources/community-groups.html">Developer Forums</a> page
for more information.
</p>

<p>To return to this page later, just click the "Dev Guide" tab while any Dev Guide page is loaded. </p>