page.title=Publishing Your Applications
@jd:body

<div id="qv-wrapper">
<div id="qv">

<h2>Publishing quickview</h2>

<ul>
<li>You can publish your application using a hosted service such as Android Market or through a web server.</li>
<li>Before you publish, make sure you have prepared your application properly.</li>
<li>Android Market makes it easy for users of Android-powered devices to see and download your application.</li>
</ul>


<h2>In this document</h2>

<ol>
<li><a href="#overview">Publishing on Android Market</a>
    <ol>
    <li><a href="#marketupgrade">Publishing Upgrades on Android Market</a>
    <li><a href="#marketintent">Using Intents to Launch the Market Application</a></li>
    </ol></li>
<!--
<li><span style="color:ccc">Publishing on Other Hosted Services</a></li>
<li><span style="color:ccc">Publishing through a Web Server</a></li>
-->
</ol>

<h2>See also</h2>

<ol>
<li><a href="{@docRoot}guide/publishing/preparing.html">Preparing to Publish</a></li>
</ol>

<div id="qv-extra">
  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
  <div id="qv-sub-rule">
    <img src="{@docRoot}assets/images/icon_market.jpg" style="float:left;margin:0;padding:0;">
    <p style="color:#669999;">Interested in publishing your app on Android Market?</p>
    <a id="publish-link" href="http://market.android.com/publish">Go to Android Market &raquo;</a>
  </div>
</div>

</div>
</div>

<p>Publishing an application means testing it, packaging it appropriately, and making 
it available to users of Android-powered mobile devices for download or sideload.</p>

<p>If you've followed the steps outlined in 
<a href="{@docRoot}guide/publishing/preparing.html">Preparing to
Publish Your Applications</a>, the result of the process is a compiled .apk that
is signed with your release private key. Inside the .apk, the application is
properly versioned and any MapView elements reference a Maps API Key that you
obtained by registering the MD5 fingerprint of the same certificate used to sign
the .apk. Your application is now ready for publishing. </p>

<p>The sections below provide information about publishing your Android
application to mobile device users.</p>

<h2 id="market">Publishing on Android Market</h2>

<p>Android Market is a hosted service that makes it easy for users to find and
download Android applications to their Android-powered devices, and makes it 
easy for developers to publish their applications to Android users.</p>

<p>To publish your application on Android Market, you first need to register
with the service using your Google account and agree to the terms of service.
Once you are registered, you can upload your application to the service whenever
you want, as many times as you want, and then publish it when you are ready.
Once published, users can see your application, download it, and rate it using
the Market application installed on their Android-powered devices. </p>

<p>To register as an Android Market developer and get started with publishing,
visit the Android Market: </p>

<p style="margin-left:3em;"><a
href="http://market.android.com/publish">http://market.android.com/publish</a>
</p>

<p>If you plan to publish your application on Android Market, you must make sure
that it meets the requirements listed below, which are enforced by the Market
server when you upload the application.</p>

<div class="special">
<p>Requirements enforced by the Android Market server:</p>
<ol>
<li>Your application must be signed with a cryptographic private key whose
validity period ends after <span style="color:red">22 October 2033</span>. </li>
<li>Your application must define both an <code>android:versionCode</code> and an
<code>android:versionName</code> attribute in the <code>&lt;manifest&gt;</code>
element of its manifest. The server uses the <code>android:versionCode</code> as
the basis for identifying the application internally and handling upgrades, and
it displays the <code>android:versionName</code> to users as the application's
version.</li>
<li>Your application must define both an <code>android:icon</code> and an
<code>android:label</code> attribute in the <code>&lt;application&gt;</code>
element of its manifest.</li>
</ol>
</div>

<h3 id="marketupgrade">Publishing Upgrades on Android Market</h3>

<p>The beta version of Android Market does not support notifying your users when
you publish a new version of your application. This capability will be
added soon, but currently the user must independently initiate download of an
upgraded application. When you publish an upgrade, you can assist users by
notifying them that the upgrade is available and giving them a way to download
the upgraded application from Android Market.</p>

<p>Here is a suggested way of tracking installed application versions and
notifying users that an upgrade is available:</p>

<ol>
<li>Have your app occasionally check in with a web-service that you're
running. This web service should return two values: the latest available
version number for the application (corresponding to
<code>android:versionCode</code>) and a URI string that your application
can later send in an Intent, to launch Market and search for the
upgraded application for the user. 

<p>The URI that your web service returns should be properly formatted to 
search Android Market for your upgraded application. See 
<a href="#marketintent">Using Intents to Launch the Market Application</a> 
for more information. The URI should specify the upgraded 
application's package name as the query parameter, since the package name
is guaranteed to be unique on Android Market. The URI format for the 
package name search is: </p>

<p><code>http://market.android.com/search?q=pname:&lt;package&gt;</code> or 
<br><code>market://search?q=pname:&lt;package&gt;</code></p>

</li>
<li>Your application can then compare its own version number against
that retrieved.  If the retrieved value is greater, your application can
show a dialog informing the user that a new version is available. The
dialog can offer buttons to begin the download or cancel. </li> <li>If
the user clicks the button to begin the download, your application can
call startActivity() using the ACTION_VIEW Intent, passing the URI
received from your web service. The Intent launches the Market
application on the device and initiates an immediate search on the
Android Market site, based on the query parameters in the URI. When the
result is displayed, the user can view the details of the upgraded
application and begin the download. 

<p>Note that, because the URI string is received from your web 
service and not hard-coded into your application, you can easily change
the Market launch behaviors whenever needed, without 
having to change your application. </p></li></ol>

<p>For more information about URIs you can pass to the Market application at
launch, see <a href="#marketintent">Using Intents to Launch the Market
Application</a>, below.</p>

<h3 id="marketintent">Using Intents to Launch the Market Application on 
a Device</h3>

<p>Android-powered devices include a preinstalled Market application that gives
users access to the Android Market site. From Market, users can
browse or search available applications, read ratings and reviews, and
download/install applications.</p>

<p>You can launch the Market application from another Android
application by sending an Intent to the system. You might want to do
this, for example, to help the user locate and download an upgrade to an
installed application, or to let the user know about related
applications that are available for download. </p>

<p>To launch Market, you send an ACTION_VIEW Intent, passing a Market-handled
URI string as the Intent data. In most cases, your application would call
startActivity() to send the ACTION_VIEW Intent with the Market-handled URI.</p>

<p>The URI that you supply with the Intent lets the system route the intent
properly and also expresses the type of action that you want Market to perform
after launch. Currently, you can have Market initiate a search for applications
on Android Market, based on query parameters that you provide. For example, you
can specify URIs to search for applications by:</p>

<ul>
<li>Package name</li>
<li>Developer name</li>
<li>String match across application name, developer name, and
description, or </li>
<li>Any combination of the above</li>
</ul>

<p>Note that the URI queries return results from the public metadata supplied by
developers in their Android Market profiles or application publishing
information, but not from the developer's private account or from the
certificate used to sign the application. </p>

<p>The table below provides a list of URIs and actions currently
supported by the Market application.</p>

<table>
<tr>
<th>For this Result</th>
<th>Pass this URI with the ACTION_VIEW Intent</th>
<th>Comments</th>
</tr>

<!--
<tr>
<td>Display the details screen for a specific application, as identified 
by its Market appID string.</td>
<td><code>http://market.android.com/details?id=&lt;appMarketAppIdString&gt;</code> 
or<br>
<code>market://details?id=&lt;appMarketUidString&gt;</code></td>
<td>Note that Market appID is specific to an application 
<em>and</em> its version. That is, an appID query loads the details page 
for a specific version of an application.</td>
</tr>
-->
<tr>
<td>Search for an application by its fully qualified Java package name and
display the result.</td>
<td><code>http://market.android.com/search?q=pname:&lt;package&gt;</code> or<br>
<code>market://search?q=pname:&lt;package&gt;</code></td>
<td>Searches only the Java package name of applications. Returns only exact
matches.</td>
</tr>

<tr>
<td>Search for applications by developer name and display the results.</td>
<td><code>http://market.android.com/search?q=pub:"&lt;Developer&nbsp;Name&gt;"</code>
or<br> <code>market://search?q=pub:"&lt;Developer Name&gt;"</code></td>
<td>Searches only the "Developer Name" fields of Market public profiles. 
Returns exact matches only. </td>
</tr>

<tr>
<td>Search for applications by substring and display the results.</td>
<td><code>http://market.android.com/search?q=&lt;substring&gt;</code> or
<br><code>market://search?q=&lt;substring&gt;</code></td>
<td>Searches all public fields (application title, developer name, and
application description) for all applications. Returns exact and partial 
matches.</td>
</tr>

<tr>
<td>Search using multiple query parameters and display the results.</td>
<td>Example:<p><code>http://market.android.com/search?q=world pname:com.android.hello pub:Android</code></p></td>
<td>Returns a list of applications meeting all the supplied parameters. </td>
</tr>
</table>

<p>Note that these URIs work only when passed as intent data &mdash; you 
can't currently load the URIs in a web browser, either on a desktop machine or 
on the device. </p>