| 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 »</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><manifest></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><application></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:<package></code> or |
| <br><code>market://search?q=pname:<package></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=<appMarketAppIdString></code> |
| or<br> |
| <code>market://details?id=<appMarketUidString></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:<package></code> or<br> |
| <code>market://search?q=pname:<package></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:"<Developer Name>"</code> |
| or<br> <code>market://search?q=pub:"<Developer Name>"</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=<substring></code> or |
| <br><code>market://search?q=<substring></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 — you |
| can't currently load the URIs in a web browser, either on a desktop machine or |
| on the device. </p> |