Massive clobber of all HTML files in developer docs for new site design
Change-Id: Idc55a0b368c1d2c1e7d4999601b739dd57f08eb3
This commit is contained in:
44
docs/html/about/about_toc.cs
Normal file
44
docs/html/about/about_toc.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
<ul id="nav">
|
||||
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot?>about/index.html">Welcome</a></div>
|
||||
<ul>
|
||||
<!-- <li><a href="<?cs var:toroot ?>about/marketplace.html">Open Marketplace</a></li>
|
||||
|
||||
<li><a href="<?cs var:toroot ?>about/flexible.html">Flexible Framework</a></li>
|
||||
-->
|
||||
<li><a href="<?cs var:toroot?>about/start.html">Get Started</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-4.0-highlights.html">
|
||||
<span class="en">Ice Cream Sandwich</span></a></div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-4.0.3.html">Android 4.0.3 APIs</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-4.0.html">Android 4.0 APIs</a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-3.0-highlights.html">
|
||||
<span class="en">Honeycomb</span></a></div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-3.2.html">Android 3.2 APIs</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-3.1.html">Android 3.1 APIs</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-3.0.html">Android 3.0 APIs</a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-2.3-highlights.html">
|
||||
<span class="en">Gingerbread</span></a></div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-2.3.4.html">Android 2.3.4 APIs</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/versions/android-2.3.3.html">Android 2.3.3 APIs</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header empty"><a href="<?cs
|
||||
var:toroot?>about/dashboards/index.html">Dashboards</a></div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
235
docs/html/about/dashboards/index.jd
Normal file
235
docs/html/about/dashboards/index.jd
Normal file
@@ -0,0 +1,235 @@
|
||||
page.title=Dashboards
|
||||
header.hide=1
|
||||
@jd:body
|
||||
|
||||
|
||||
|
||||
<h2 id="Platform">Platform Versions</h2>
|
||||
|
||||
<p>This page provides data about the relative number of active devices
|
||||
running a given version of the Android platform. This can help you
|
||||
understand the landscape of device distribution and decide how to prioritize
|
||||
the development of your application features for the devices currently in
|
||||
the hands of users. For information about how to target your application to devices based on
|
||||
platform version, read about <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API levels</a>.</p>
|
||||
|
||||
|
||||
<h3 id="PlatformCurrent">Current Distribution</h3>
|
||||
|
||||
<p>The following pie chart and table is based on the number of Android devices that have accessed
|
||||
Google Play within a 14-day period ending on the data collection date noted below.</p>
|
||||
|
||||
<div class="col-6" style="margin-left:0">
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Version</th>
|
||||
<th>Codename</th>
|
||||
<th>API Level</th>
|
||||
<th>Distribution</th>
|
||||
</tr>
|
||||
<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.3%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.6%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>5.2%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>19.1%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
|
||||
</td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.4%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7
|
||||
</a></td><!-- Gingerbread --> <td>10</td><td>64.6%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-3.1.html">3.1</a></td>
|
||||
<td rowspan="2">Honeycomb</td> <td>12</td><td>0.7%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td><!-- Honeycomb --><td>13</td><td>2%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-4.0.html">4.0 - 4.0.2</a></td>
|
||||
<td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.4%</td></tr>
|
||||
<tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a> </td><!-- ICS --> <td>15</td><td>6.7%</td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-7" style="margin-right:0">
|
||||
<img alt=""
|
||||
src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.3,0.6,5.2,19.1,0.4,64.6,0.7,2.0,0.4,6.7&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0|Android%204.0.3&chco=c4df9b,6fad0c&chf=bg,s,00000000" />
|
||||
|
||||
</div><!-- end dashboard-panel -->
|
||||
|
||||
<p style="clear:both"><em>Data collected during a 14-day period ending on June 1, 2012</em></p>
|
||||
<!--
|
||||
<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
|
||||
-->
|
||||
|
||||
<h3 id="PlatformHistorical">Historical Distribution</h3>
|
||||
|
||||
<p>The following stacked line graph provides a history of the relative number of
|
||||
active Android devices running different versions of the Android platform. It also provides a
|
||||
valuable perspective of how many devices your application is compatible with, based on the
|
||||
platform version.</p>
|
||||
|
||||
<p>Notice that the platform versions are stacked on top of each other with the oldest active
|
||||
version at the top. This format indicates the total percent of active devices that are compatible
|
||||
with a given version of Android. For example, if you develop your application for
|
||||
the version that is at the very top of the chart, then your application is
|
||||
compatible with 100% of active devices (and all future versions), because all Android APIs are
|
||||
forward compatible. Or, if you develop your application for a version lower on the chart,
|
||||
then it is currently compatible with the percentage of devices indicated on the y-axis, where the
|
||||
line for that version meets the y-axis on the right.</p>
|
||||
|
||||
<p>Each dataset in the timeline is based on the number of Android devices that accessed
|
||||
Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
|
||||
|
||||
<img alt="" height="250" width="660"
|
||||
src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C12/01%7C12/15%7C01/01%7C01/15%7C02/01%7C02/15%7C03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C1%3A%7C2011%7C%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:98.6,98.5,98.3,98.2,98.6,98.4,98.4,98.6,98.5,98.6,98.8,98.7,98.9|97.3,97.3,97.2,97.2,97.6,97.5,97.6,97.8,97.8,97.9,98.1,98.1,98.3|87.7,88.1,88.7,89.2,89.9,90.3,90.8,91.4,91.8,92.1,92.5,92.7,93.1|52.4,55.2,58.2,60.1,62.0,63.7,65.2,66.8,68.6,69.9,71.5,72.6,74.0|2.3,2.6,3.5,3.6,4.0,4.1,4.3,4.6,5.5,6.5,7.6,8.2,9.4|1.2,1.3,2.0,2.2,2.6,3.0,3.2,3.5,4.5,5.5,6.6,7.4,8.7|0.0,0.0,0.3,0.4,0.7,0.8,1.1,1.3,2.3,3.3,4.4,5.3,6.7&chm=b,c3df9b,0,1,0|b,b6dc7d,1,2,0|tAndroid%202.2,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|tAndroid%202.3.3,496c13,3,0,15,,t::-5|b,9ddb3d,3,4,0|b,91da1e,4,5,0|b,80c414,5,6,0|B,6fad0c,6,7,0&chg=7,25&chdl=Android%201.6|Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08&chf=bg,s,00000000" />
|
||||
|
||||
<p><em>Last historical dataset collected during a 14-day period ending on June 1, 2012</em></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 id="Screens">Screen Sizes and Densities</h2>
|
||||
|
||||
<p>This section provides data about the relative number of active devices that have a particular
|
||||
screen configuration, defined by a combination of screen size and density. To simplify the way that
|
||||
you design your user interfaces for different screen configurations, Android divides the range of
|
||||
actual screen sizes and densities into:</p>
|
||||
|
||||
<ul>
|
||||
<li>A set of four generalized <strong>sizes</strong>: <em>small</em>, <em>normal</em>,
|
||||
<em>large</em>, and <em>xlarge</em></em></li>
|
||||
<li>A set of four generalized <strong>densities</strong>: <em>ldpi</em> (low), <em>mdpi</em>
|
||||
(medium), <em>hdpi</em> (high), and <em>xhdpi</em> (extra high)</li>
|
||||
</ul>
|
||||
|
||||
<p>For information about how you can support multiple screen configurations in your
|
||||
application, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> This data is based on the number
|
||||
of Android devices that have accessed Google Play within a 7-day period
|
||||
ending on the data collection date noted below.</p>
|
||||
|
||||
|
||||
<div class="col-6" style="margin-left:0">
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th scope="col">ldpi</th>
|
||||
<th scope="col">mdpi</th>
|
||||
<th scope="col">hdpi</th>
|
||||
<th scope="col">xhdpi</th>
|
||||
</tr>
|
||||
<tr><th scope="row">small</th>
|
||||
<td>2.3%</td> <!-- small/ldpi -->
|
||||
<td></td> <!-- small/mdpi -->
|
||||
<td>2.4%</td> <!-- small/hdpi -->
|
||||
<td></td> <!-- small/xhdpi -->
|
||||
</tr>
|
||||
<tr><th scope="row">normal</th>
|
||||
<td>0.7%</td> <!-- normal/ldpi -->
|
||||
<td>26.2%</td> <!-- normal/mdpi -->
|
||||
<td>57.8%</td> <!-- normal/hdpi -->
|
||||
<td>0.9%</td> <!-- normal/xhdpi -->
|
||||
</tr>
|
||||
<tr><th scope="row">large</th>
|
||||
<td>0.3%</td> <!-- large/ldpi -->
|
||||
<td>2%</td> <!-- large/mdpi -->
|
||||
<td></td> <!-- large/hdpi -->
|
||||
<td></td> <!-- large/xhdpi -->
|
||||
</tr>
|
||||
<tr><th scope="row">xlarge</th>
|
||||
<td></td> <!-- xlarge/ldpi -->
|
||||
<td>7.4%</td> <!-- xlarge/mdpi -->
|
||||
<td></td> <!-- xlarge/hdpi -->
|
||||
<td></td> <!-- xlarge/xhdpi -->
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-7" style="margin-right:0">
|
||||
<img alt=""
|
||||
src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=Xlarge%20/%20mdpi|Large%20/%20ldpi|Large%20/%20mdpi|Normal%20/%20hdpi|Normal%20/%20ldpi|Normal%20/%20mdpi|Normal%20/%20xhdpi|Small%20/%20hdpi|Small%20/%20ldpi&chd=t%3A7.4,0.3,2.0,57.8,0.7,26.2,0.9,2.4,2.3&chf=bg,s,00000000" />
|
||||
|
||||
</div>
|
||||
|
||||
<p style="clear:both"><em>Data collected during a 7-day period ending on May 1, 2012</em></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 id="OpenGL">Open GL Version</h2>
|
||||
|
||||
<p>This section provides data about the relative number of active devices that support a particular
|
||||
version of OpenGL ES. Note that support for one particular version of OpenGL ES also implies
|
||||
support for any lower version (for example, support for version 2.0 also implies support for
|
||||
1.1).</p>
|
||||
|
||||
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
|
||||
android:glEsVersion} attribute of the <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
|
||||
element. You can also use the <a
|
||||
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
|
||||
<supports-gl-texture>}</a> element to declare the GL compression formats that your application
|
||||
uses.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> This data is based on the number
|
||||
of Android devices that have accessed Google Play within a 7-day period
|
||||
ending on the data collection date noted below.</p>
|
||||
|
||||
|
||||
<div class="col-6" style="margin-left:0">
|
||||
<table>
|
||||
<tr>
|
||||
<th scope="col">OpenGL ES Version</th>
|
||||
<th scope="col">Distribution</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1.1 only</th>
|
||||
<td>9.9%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2.0 & 1.1</th>
|
||||
<td>90.1%</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-7" style="margin-right:0">
|
||||
<img alt=""
|
||||
src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL% 202.0%20%26%201.1&chd=t%3A9.9,90.1&chf=bg,s,00000000" />
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p style="clear:both"><em>Data collected during a 7-day period ending on June 4, 2012</em></p>
|
||||
34
docs/html/about/flexible.jd
Normal file
34
docs/html/about/flexible.jd
Normal file
@@ -0,0 +1,34 @@
|
||||
page.title=Flexible Framework
|
||||
walkthru=1
|
||||
|
||||
@jd:body
|
||||
|
||||
<style>
|
||||
blockquote {
|
||||
color:#9933CC;
|
||||
}
|
||||
</style>
|
||||
|
||||
<blockquote>Android's flexible framework means it runs on more devices and reaches more
|
||||
users</blockquote>
|
||||
|
||||
<p>Android powers millions of devices around the world and in a variety of form-factors. The Android
|
||||
framework is specially built to run apps on more than just one screen size and hardware
|
||||
configuration. As an app developer, Android's scale and variety offers you the potential to quickly
|
||||
reach millions of users.</p>
|
||||
|
||||
<p>Android apps are flexible and easily adapt to the device on which they are running. Although the
|
||||
system scales your assets when necessary, you can provide alternative app resources that are
|
||||
optimized for specific device categories, such as the screen size and density. Android applies the
|
||||
appropriate resources when running your app, based on the current device’s configuration.</p>
|
||||
|
||||
<blockquote>You're in control of which devices can install your app</blockquote>
|
||||
|
||||
<p>Some devices provide a different user experience when using apps, but you’re always in control of
|
||||
how your app behaves on each device. If you publish your app on Google Play, you also have
|
||||
control over which kinds of devices are allowed to install your app and you can closely control how
|
||||
your app is distributed.</p>
|
||||
|
||||
<p>Every device that includes Google Play has been certified compatible. This means that
|
||||
the device has passed a rigorous test suite to ensure that the device uses a version of Android that
|
||||
supports all the platform APIs and will successfully run your app.</p>
|
||||
157
docs/html/about/index.jd
Normal file
157
docs/html/about/index.jd
Normal file
@@ -0,0 +1,157 @@
|
||||
page.title=Android, the world's most popular mobile platform
|
||||
walkthru=0
|
||||
header.hide=0
|
||||
|
||||
@jd:body
|
||||
|
||||
<div style="position:absolute;width:440px;">
|
||||
<p>Android powers hundreds of millions of mobile devices in more than 190
|
||||
countries around the world. It's the largest installed base of any mobile platform
|
||||
and growing fast—every day another 900,000 users power up their
|
||||
Android devices for the first time and start looking for apps, games,
|
||||
and other digital content. </p>
|
||||
|
||||
<div style="width:330px">
|
||||
<p>Android gives you a world-class platform for creating apps and games for
|
||||
Android users everywhere, as well as an open marketplace for distributing
|
||||
to them instantly.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<img src="{@docRoot}images/about/growth-chart.png" alt="" height="400" width="681"
|
||||
style="margin:20px 0 10px 30px;" />
|
||||
<div style="position:relative;left: 450px;width: 250px;top: -20px;color: #777;">
|
||||
<em>Android growth in device activations</em></div>
|
||||
|
||||
|
||||
<h3>Global partnerships and large installed base</h3>
|
||||
|
||||
<p>Building on the contributions of the open-source Linux community and more
|
||||
than 300 hardware, software, and carrier partners, Android has rapidly become
|
||||
the fastest-growing mobile OS.</p>
|
||||
|
||||
<blockquote>Every day more than 900,000 new Android devices are activated worldwide.</blockquote>
|
||||
|
||||
<p>Android’s openness has made it a favorite for consumers and developers alike,
|
||||
driving strong growth in app consumption. Android users download more than
|
||||
1 billion apps and games from Google Play each month. </p>
|
||||
|
||||
<p>With it's partners, Android is continuously pushing the boundaries of hardware and software
|
||||
forward to bring new capabilities to users and developers. For developers,
|
||||
Android innovation lets you build powerful, differentiated applications
|
||||
that use the latest mobile technologies.</p>
|
||||
|
||||
<!-- <h3>Rapid innovation</h3>
|
||||
|
||||
<p>Android is continuously pushing the boundaries of hardware and software
|
||||
forward, to bring new capabilities to users and developers. For developers, the
|
||||
rapid evolution of Android technology lets you stay in front with powerful,
|
||||
differentiated applications.</p>
|
||||
|
||||
<p>Android gives you access to the latest technologies and innovations across a
|
||||
multitude of device form-factors, chipset architectures, and price points. From
|
||||
multicore processing and high-performance graphics to state-of-the-art sensors,
|
||||
vibrant touchscreens, and emerging mobile technologies such as Near Field
|
||||
Communication (NFC), Wi-Fi Direct, and face tracking.</p> -->
|
||||
|
||||
<h3>Powerful development framework</h3>
|
||||
|
||||
<blockquote>Easily optimize a single binary for phones, tablets, and other devices.</blockquote>
|
||||
|
||||
<p>Android gives you everything you need to build best-in-class app experiences.
|
||||
It gives you a single application model that lets you deploy
|
||||
your apps broadly to hundreds of millions of users across a wide range of
|
||||
devices—from phones to tablets and beyond.</p>
|
||||
|
||||
<p>Android also gives you tools for creating apps that look great and take
|
||||
advantage of the hardware capabilities available on each device. It
|
||||
automatically adapts your UI to look it's best on each device, while giving you
|
||||
as much control as you want over your UI on different device
|
||||
types. </p>
|
||||
|
||||
<p>For example, you can create a single app binary that's optimized for
|
||||
both phone and tablet form factors. You declare your UI in lightweight sets of XML
|
||||
resources, one set for parts of the UI that are common to all form factors and
|
||||
other sets for optimzations specific to phones or tablets.
|
||||
At runtime, Android applies the correct resource sets based on its screen size,
|
||||
density, locale,
|
||||
and so on.</p>
|
||||
|
||||
|
||||
<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android
|
||||
Developer Tools</a>
|
||||
offers a full Java IDE with advanced features for developing, debugging, and
|
||||
packaging Android apps. Using the IDE, you can develop on any available Android
|
||||
device or create virtual devices that emulate any hardware configuration.</p>
|
||||
|
||||
<blockquote>A billion downloads a month and growing. Get your apps in front
|
||||
of millions of users at Google's scale.</blockquote>
|
||||
|
||||
<h3>Open marketplace for distributing your apps</h3>
|
||||
|
||||
<p>Google Play is the premier marketplace for selling and distributing Android apps.
|
||||
When you publish an app on Google Play, you reach the huge installed base of
|
||||
Android.</p>
|
||||
|
||||
<div style="float:left;margin-right:24px;margin-top:12px;">
|
||||
<img src="{@docRoot}images/gp-device.png">
|
||||
</div>
|
||||
|
||||
<p>As an open marketplace, Google Play puts you in control of how you sell your
|
||||
products. You can publish whenever you want, as often as you want, and to the
|
||||
customers you want. You can distribute broadly to all markets and
|
||||
devices or focus on specific segments, devices, or ranges of hardware
|
||||
capabilities.</p>
|
||||
|
||||
<p>You can monetize in the way that works best for your business—priced or
|
||||
free, with in-app products or subscriptions—for highest engagement and
|
||||
revenues. You also have complete control of the pricing for your apps
|
||||
and in-app products and can set or change prices in any supported currency at
|
||||
any time.<p>
|
||||
|
||||
<p>Beyond growing your customer base, Google Play helps you build visibility and
|
||||
engagement across your apps and brand. As your apps rise in popularity, Google
|
||||
Play gives them higher placement in weekly "top" charts and rankings, and for
|
||||
the best apps promotional slots in curated collections.
|
||||
</p>
|
||||
|
||||
<p>Preinstalled on hundreds of millions of Android devices around the world,
|
||||
Google Play can be a growth engine for your business.</p>
|
||||
|
||||
<p><a class="landing-page-link" href="{@docRoot}about/start.html">GET STARTED</a></p>
|
||||
|
||||
<div style="background: #F0F0F0;
|
||||
border-top: 1px solid #DDD;
|
||||
padding: 20px 0 24px 0;
|
||||
overflow: auto;
|
||||
clear:both;
|
||||
margin-bottom:-10px;
|
||||
margin-top:60px;"">
|
||||
<div style="padding:0 0 0 29px;">
|
||||
<h4>Developer Story: Robot Invader</h4>
|
||||
<img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px height:78px;
|
||||
width: 78px;
|
||||
float: left;
|
||||
margin: 17px 20px 9px 0;" src=
|
||||
"//g0.gstatic.com/android/market/com.robotinvader.knightmare/hi-256-0-9e08d83bc8d01649e167131d197ada1cd1783fb0">
|
||||
<div style="width:700px;">
|
||||
<p style="margin-top:26px;margin-bottom:12px;">Robot Invader chose
|
||||
Android as the launch platform for their first game,
|
||||
<a data-g-event="Developers Page" data-g-label="Case Study Link" href=
|
||||
"//play.google.com/store/apps/details?id=com.robotinvader.knightmare"><em>Wind-up
|
||||
Knight</em></a>.
|
||||
</p>
|
||||
<p>
|
||||
Hear from the developers themselves how Android helped them reach more
|
||||
than 100 devices with a single app binary, then iterate rapidly to ensure
|
||||
a great experience for users.
|
||||
</p>
|
||||
</div>
|
||||
<iframe style="float:left;
|
||||
margin-right:24px;
|
||||
margin-top:14px;" width="700" height="394" src=
|
||||
"http://www.youtube.com/embed/hTtlLiUTowY" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
</div>
|
||||
62
docs/html/about/marketplace.jd
Normal file
62
docs/html/about/marketplace.jd
Normal file
@@ -0,0 +1,62 @@
|
||||
page.title=Open Marketplace
|
||||
walkthru=1
|
||||
|
||||
@jd:body
|
||||
|
||||
<style>
|
||||
blockquote {
|
||||
color:#9933CC;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Android offers an open distribution model, not a walled garden. Once you’ve developed an
|
||||
app for Android and want to distribute it, you have choice.</p>
|
||||
|
||||
<p>Your final application is contained in an APK file that you can make available to users any
|
||||
way you want. For example, you can upload it to your own web site to allow visitors to
|
||||
install it onto their devices. More often, you’ll want to use a trusted
|
||||
marketplace where users can discover and search for your apps.</p>
|
||||
|
||||
<p>How you choose to distribute your app affects precisely how many users your app will reach. Which
|
||||
distribution provider you choose also affects the kinds of services available to you as a publisher,
|
||||
such as licensing and in-app billing APIs, user bug reports, installation analytics, marketing
|
||||
services, and more.</p>
|
||||
|
||||
<p>Among your choices is Google Play, the premier marketplace for selling and distributing apps
|
||||
to Android users around the world. When you publish an app on Google Play, you reach hundreds of
|
||||
millions of customers in over 130 countries.</p>
|
||||
|
||||
|
||||
<h3>Your business, your customers</h3>
|
||||
|
||||
<blockquote>Google Play makes your apps available to your customers
|
||||
immediately</blockquote>
|
||||
|
||||
<p>As an open marketplace, Google Play puts you in control of your business and makes it easy for
|
||||
you to manage how you sell your products. You can publish whenever you want, as often as you want,
|
||||
and to the exact set of customers you want.</p>
|
||||
|
||||
|
||||
<h3>Visibility for your apps</h3>
|
||||
|
||||
<p>Beyond growing your customer base, Google Play helps you build visibility and engagement across
|
||||
your apps and brand. As your apps rise in popularity, Google Play gives you higher placement in
|
||||
weekly "top" lists and offers promotional slots in curated collections. You can engage customers
|
||||
using rich, colorful product pages that feature app screenshots, videos, and user reviews, as well
|
||||
as cross-marketing links to your other products.</p>
|
||||
|
||||
<h3>Flexible monetizing and distribution</h3>
|
||||
|
||||
<blockquote class="right">You can distribute
|
||||
your apps free or priced and you can sell in-app products for additional revenue</blockquote>
|
||||
|
||||
<p>Google Play offers a choice of monetizing options to meet your business needs. You control the
|
||||
pricing of your apps and in-app products—you can set and change prices at any time, even
|
||||
individually in local currencies around the world. On purchase, Google Play handles transactions in
|
||||
the buyer’s currency and makes payouts in your own currency.</p>
|
||||
|
||||
|
||||
<p>After publishing, you can manage the distribution of your app. You can distribute broadly to all
|
||||
markets and devices or focus on specific segments, devices, or ranges of hardware capabilities.
|
||||
Google Play provides the tools for controlling distribution and ensures that your app is available
|
||||
only to the users who you are targeting.</p>
|
||||
63
docs/html/about/start.jd
Normal file
63
docs/html/about/start.jd
Normal file
@@ -0,0 +1,63 @@
|
||||
page.title=Get Started
|
||||
walkthru=0
|
||||
|
||||
@jd:body
|
||||
|
||||
<p>Everything you need to start developing apps for Android is available here on
|
||||
developer.android.com. You'll find everything from the developer SDK, API documentation, and design
|
||||
guidelines, to information about the current device landscape and how you can distribute and
|
||||
monetize your app.</p>
|
||||
|
||||
<p>No two apps are built in the same way, but we've structured the information you need to build an
|
||||
app into the following three sections that represent the general order for app development.
|
||||
|
||||
|
||||
<style>
|
||||
h2.blue{color:#33B5E5}
|
||||
h2.blue+hr{background:#33B5E5}
|
||||
|
||||
h2.orange{color:#FF8800}
|
||||
h2.orange+hr{background:#FF8800}
|
||||
|
||||
h2.green{color:#99CC00}
|
||||
h2.green+hr{background:#99CC00}
|
||||
</style>
|
||||
|
||||
<div class="col-4" style="margin-left:0">
|
||||
<h2 class="blue">1. Design</h2>
|
||||
|
||||
<p>Before you write a single line of code, you need to design the user interface and make it fit
|
||||
the Android user experience. Although you may know what a user will <em>do</em> with your app, you
|
||||
should pause to focus on how a user will <em>interact</em> with it. Your design should be sleek,
|
||||
simple, powereful, and tailored to the Android experience.</p>
|
||||
|
||||
<p>So whether your a one-man shop or a large team, you should study the <a
|
||||
href="{@docRoot}design/index.html">Design</a> guidelines first.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-5">
|
||||
<h2 class="orange">2. Develop</h2>
|
||||
<p>Once your design is finalized, all you need are the tools to turn your app ideas into reality.
|
||||
Android's framework provides you the APIs to build apps that take full advantage of
|
||||
device hardware, connected accessory devices, the Internet, software features, and more.
|
||||
With the power of Android, there's no limit to the power of your apps.</p>
|
||||
|
||||
<p>Everything you need to learn about the app framework and developer tools is in the <a
|
||||
href="{@docRoot}develop/index.html">Develop</a> documentation.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-4" style="margin-right:0">
|
||||
<h2 class="green">3. Distribute</h2>
|
||||
<p>Now your app is complete. You've built it to support a variety of screen sizes and
|
||||
densities, and tested it on the Android emulator and on real devices. You're ready to ship your app.</p>
|
||||
|
||||
<p>How you proceed depends on a variety of factors, such as your monetization strategy and which
|
||||
types of devices your app supports. Everything you need to get started with this process is
|
||||
available in the <a href="{@docRoot}distribute/index.html">Distribute</a> section.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<p style="clear:both">Now that you know what's available, get started by installing the <a
|
||||
href="{@docRoot}sdk/index.html">Android SDK</a>.</p>
|
||||
@@ -31,7 +31,7 @@ Differences Report »</a> </li>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -54,14 +54,14 @@ compliant and includes no external libraries. </p>
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the platform into your Android 1.6 or later SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>.</p>
|
||||
see <a href="{@docRoot}sdk/exploring.html">Exploring the
|
||||
SDK</a>.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>For a list of new user features and platform highlights, see the <a
|
||||
href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
{@sdkPlatformVersion} Platform Highlights</a> document.</p>
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
@@ -184,7 +184,7 @@ application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="api">Framework API Changes</h2>
|
||||
@@ -208,6 +208,6 @@ application.</p>
|
||||
<h3 id="DeveloperAPIs">New Framework APIs</h3>
|
||||
|
||||
<p>For a detailed overview of new APIs, see the
|
||||
<a href="{@docRoot}sdk/android-1.6.html#api-changes">Version Notes</a>.
|
||||
<a href="{@docRoot}about/versions/android-1.6.html#api-changes">Version Notes</a>.
|
||||
For a complete report of all API changes, see the
|
||||
<a href="{@docRoot}sdk/api_diff/4/changes.html">API Differences Report</a>.
|
||||
@@ -31,7 +31,7 @@ Differences Report »</a> </li>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -55,14 +55,14 @@ and includes no external libraries.</p>
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the latest Android 1.6 platform into your Android 1.6 or later SDK. For
|
||||
more information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>.</p>
|
||||
more information, see <a href="{@docRoot}sdk/exploring.html">Exploring the
|
||||
SDK</a>.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>For a list of new user features and platform highlights, see the <a
|
||||
href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
{@sdkPlatformVersion} Platform Highlights</a> document.</p>
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="api">Framework API Changes</h2>
|
||||
@@ -192,7 +192,7 @@ hardware acceleration.</p>
|
||||
|
||||
<p>Android 2.0 includes several new developer APIs.
|
||||
For an overview of new APIs, see the
|
||||
<a href="{@docRoot}sdk/android-2.0.html#api">Android 2.0 version notes</a>.</p>
|
||||
<a href="{@docRoot}about/versions/android-2.0.html#api">Android 2.0 version notes</a>.</p>
|
||||
|
||||
<p>For a complete report of all API changes, see the
|
||||
<a href="{@docRoot}sdk/api_diff/5/changes.html">API Differences Report</a>.</p>
|
||||
@@ -31,7 +31,7 @@ differences report »</a> </li>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -56,14 +56,14 @@ includes no external libraries. </p>
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the platform into your Android 1.6 or later SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>.</p>
|
||||
see <a href="{@docRoot}sdk/exploring.html">Exploring the
|
||||
SDK</a>.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>For a list of new user features and platform highlights, see the <a
|
||||
href="http://developer.android.com/sdk/android-2.0-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-2.0-highlights.html">Android
|
||||
2.0 Platform Highlights</a> document.</p>
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
@@ -246,7 +246,7 @@ through Settings.</p>
|
||||
<h3 id="ant">Ant Support</h3>
|
||||
|
||||
<ul>
|
||||
<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}guide/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
|
||||
<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}tools/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
|
||||
|
||||
<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
|
||||
</ul>
|
||||
@@ -257,7 +257,7 @@ through Settings.</p>
|
||||
framework API provided by the Android {@sdkPlatformVersion} platform. Note,
|
||||
however, that Android 2.0.1 is a minor release to Android 2.0, so for more
|
||||
information about the changes made to in Android 2.0, please refer to the
|
||||
<a href="{@docRoot}sdk/android-2.0.html#api">Android 2.0 version notes</a>.</p>
|
||||
<a href="{@docRoot}about/versions/android-2.0.html#api">Android 2.0 version notes</a>.</p>
|
||||
|
||||
|
||||
<h3 id="api-level">API level</h3>
|
||||
@@ -274,7 +274,7 @@ set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h3 id="api-changes">API changes summary</h3>
|
||||
@@ -26,7 +26,7 @@ sdk.platform.majorMinor=major
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -49,14 +49,14 @@ compliant and includes no external libraries. </p>
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the platform into your SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>.</p>
|
||||
see <a href="{@docRoot}sdk/exploring.html">Exploring the
|
||||
SDK</a>.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>For a list of new user features and platform highlights, see the <a
|
||||
href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android
|
||||
{@sdkPlatformVersion} Platform Highlights</a> document.</p>
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
@@ -235,7 +235,7 @@ through Settings.</p>
|
||||
<h3 id="ant">Ant Support</h3>
|
||||
|
||||
<ul>
|
||||
<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}guide/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
|
||||
<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}tools/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
|
||||
|
||||
<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
|
||||
</ul>
|
||||
@@ -259,7 +259,7 @@ set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h3 id="api-changes">API changes summary</h3>
|
||||
@@ -31,7 +31,7 @@ Differences Report »</a> </li>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -55,14 +55,14 @@ includes no external libraries. </p>
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the platform into your SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>.</p>
|
||||
see <a href="{@docRoot}sdk/exploring.html">Exploring the
|
||||
SDK</a>.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>Android {@sdkPlatformVersion} does not add significant user features, see the <a
|
||||
href="http://developer.android.com/sdk/android-2.0-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-2.0-highlights.html">Android
|
||||
2.0 Platform Highlights</a> document for the latest user features.</p>
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
@@ -87,7 +87,7 @@ class="toggle-content-img" alt="" />
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
@@ -164,7 +164,7 @@ application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="api">Framework API Changes</h2>
|
||||
@@ -11,12 +11,8 @@ sdk.platform.majorMinor=minor
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#features">Platform Highlights</a></li>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#api">Framework API Changes</a>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
|
||||
</ol>
|
||||
</li>
|
||||
@@ -31,7 +27,7 @@ Differences Report »</a> </li>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
<li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -46,113 +42,18 @@ fixes. For information on developer features and API changes, see the
|
||||
<a href="#api">Framework API</a> section.</p>
|
||||
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes a
|
||||
fully compliant Android library and system image, as well as a set of emulator
|
||||
skins, sample applications, and more. The downloadable platform
|
||||
includes no external libraries. </p>
|
||||
|
||||
<p>To get started developing or testing against the Android
|
||||
{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
|
||||
download the platform into your SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
|
||||
first.</p>
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
|
||||
<h2 id="features">Platform Highlights</h2>
|
||||
|
||||
<p>For a list of new user features and platform highlights, see the <a
|
||||
href="http://developer.android.com/sdk/android-2.2-highlights.html">Android
|
||||
href="http://developer.android.com/about/versions/android-2.2-highlights.html">Android
|
||||
2.2 Platform Highlights</a> document.</p>
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>The sections below provide notes about successive releases of
|
||||
the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
|
||||
revision number. To determine what revision(s) of the Android
|
||||
{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
|
||||
the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
|
||||
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
<dd>
|
||||
<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
|
||||
Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
|
||||
bugs in the previous rendering library. It also unlocks several editor features that were added in
|
||||
ADT 12.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2010)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires SDK Tools r6 or higher.</p>
|
||||
</dd>
|
||||
|
||||
<dt>System Image:</dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li>Adds default Search Widget.</li>
|
||||
<li>Includes proper provisioning for the platform's Backup Manager. For more information about how to use the Backup Manager, see <a href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>.</li>
|
||||
<li>Updates the Android 2.2 system image to FRF91.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2010)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires SDK Tools r6 or higher.</p>
|
||||
</dd>
|
||||
|
||||
<dt>Tools:</dt>
|
||||
<dd>
|
||||
<p>Adds support for building with Android library projects. See <a href="tools-notes.html">SDK Tools, r6</a> for information.</p>
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 id="api-level">API Level</h2>
|
||||
|
||||
@@ -170,7 +71,7 @@ application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
|
||||
element in your application's manifest. </p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="api">Framework API Changes</h2>
|
||||
@@ -348,123 +249,4 @@ href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
|
||||
Differences Report</a>.</p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Alarm Clock</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Contacts</li>
|
||||
<li>Custom Locale (developer app)</li>
|
||||
<li>Dev Tools (developer app)</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
|
||||
<li>Gallery</li>
|
||||
<li>IMEs for Japanese, Chinese, and Latin text input</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Phone</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts (developer app)</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides a variety of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android {@sdkPlatformVersion} system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
<li>Czech (cs_CZ)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Russian (ru_RU)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>Localized UI strings match the locales that are accessible
|
||||
through Settings.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> Android supports more locales than are listed above. However,
|
||||
the entire collection of locale strings cannot fit on a single system image, so the above list is
|
||||
only what's included in the system image for the SDK. All of Android's supported locales are
|
||||
available in the <a href="http://source.android.com/">Android Open Source Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes a set of emulator skins that you can use
|
||||
for modeling your application in different screen sizes and resolutions. The
|
||||
emulator skins are:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
QVGA (240x320, low density, small screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA (240x400, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
FWQVGA (240x432, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
HVGA (320x480, medium density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA800 (480x800, high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA854 (480x854 high density, normal screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=Android 2.3 Platform Highlights
|
||||
page.title=Gingerbread
|
||||
|
||||
@jd:body
|
||||
|
||||
@@ -14,8 +14,7 @@ page.title=Android 2.3 Platform Highlights
|
||||
}
|
||||
#jd-content div.video {
|
||||
float:right;
|
||||
padding:0 60px 40px;
|
||||
margin-top:-15px;
|
||||
padding:0 0 0 40px;
|
||||
}
|
||||
#jd-content table.columns {
|
||||
margin:0 0 1em 0;
|
||||
@@ -38,16 +37,6 @@ page.title=Android 2.3 Platform Highlights
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="video">
|
||||
<object width="278" height="180">
|
||||
<param name="movie" value="http://www.youtube.com/v/Jx3pdWBlZ34?hl=en&fs=1"></param>
|
||||
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
|
||||
value="always"></param>
|
||||
<embed src="http://www.youtube.com/v/Jx3pdWBlZ34?hl=en&fs=1" type="application/x-shockwave-flash"
|
||||
allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
|
||||
</object>
|
||||
</div>
|
||||
|
||||
<p>The Android 2.3 platform introduces many new and exciting features for
|
||||
users and developers. This document provides a glimpse at some of the new features
|
||||
and technologies in Android 2.3. For detailed information about the new developer APIs, see the <a
|
||||
@@ -63,8 +52,10 @@ href="android-2.3.html">Android 2.3 version notes</a>.</p>
|
||||
<h2 id="UserFeatures" style="clear:right">New User Features</h2>
|
||||
|
||||
<div>
|
||||
<img style="float:right;padding-bottom:2em;" src="images/2.3/home-menu.png" alt="" height="280" />
|
||||
<img style="float:right;padding-bottom:2em;" src="images/2.3/home-plain.png" alt="" height="280" />
|
||||
<img style="float:right;margin-left:20px;padding-bottom:2em;"
|
||||
src="{@docRoot}sdk/images/2.3/home-menu.png" alt="" height="280" />
|
||||
<img style="float:right;margin-left:20px;padding-bottom:2em;"
|
||||
src="{@docRoot}sdk/images/2.3/home-plain.png" alt="" height="280" />
|
||||
|
||||
<h3>UI refinements for simplicity and speed</h3>
|
||||
|
||||
@@ -98,8 +89,10 @@ the key and sliding to select a character.</p>
|
||||
</div>
|
||||
|
||||
<div style="padding-top:1em;">
|
||||
<div style="margin-right:1em;float:left;"><img src="images/2.3/onetouch.png" alt="" height="260" /></div>
|
||||
<div style="padding-right:2em;float:left;"><img src="images/2.3/selection.png" alt="" height="160" /></div>
|
||||
<div style="margin-right:1em;float:left;"><img src="{@docRoot}sdk/images/2.3/onetouch.png" alt=""
|
||||
height="260" /></div>
|
||||
<div style="padding-right:2em;float:left;"><img src="{@docRoot}sdk/images/2.3/selection.png" alt=""
|
||||
height="160" /></div>
|
||||
|
||||
|
||||
<h3>One-touch word selection and copy/paste</h3>
|
||||
@@ -116,8 +109,10 @@ modes, no use of a trackball is needed.</p>
|
||||
</div>
|
||||
|
||||
<div style="clear:left">
|
||||
<div style="padding-right:2em;float:right;"><img src="images/2.3/running.png" alt="" height="280" /></div>
|
||||
<div style="padding-left:1em;float:right;"><img src="images/2.3/power.png" alt="" height="280" /></div>
|
||||
<div style="padding-right:2em;float:right;margin-left:20px;"><img
|
||||
src="{@docRoot}sdk/images/2.3/running.png" alt="" height="280" /></div>
|
||||
<div style="padding-left:1em;float:right;margin-left:20px;"><img
|
||||
src="{@docRoot}sdk/images/2.3/power.png" alt="" height="280" /></div>
|
||||
|
||||
<h3>Improved power management </h3>
|
||||
|
||||
@@ -147,8 +142,10 @@ necessary stop an application or report feedback to its developer. </p>
|
||||
managing information and relationships. </p>
|
||||
|
||||
<div style="padding-top:1em;">
|
||||
<div style="padding-right:1.5em;float:left;"><img src="images/2.3/sipcall.png" alt="" height="190" align="left"/><br>
|
||||
<img src="images/2.3/ffc.png" alt="" height="190" align="left" style="margin-bottom:1.5em;margin-top:.75em;"/><div></div>
|
||||
<div style="padding-right:1.5em;float:left;"><img src="{@docRoot}sdk/images/2.3/sipcall.png" alt=""
|
||||
height="190" align="left"/><br>
|
||||
<img src="{@docRoot}sdk/images/2.3/ffc.png" alt="" height="190" align="left"
|
||||
style="margin-bottom:1.5em;margin-top:.75em;"/><div></div>
|
||||
</div>
|
||||
|
||||
<p style="margin-top:1em;margin-bottom:.75em;"><strong>Internet calling</strong></p>
|
||||
@@ -162,7 +159,8 @@ Additionally, support for the platform's SIP and internet calling features on
|
||||
specific devices is determined by their manufacturers and associated carriers.
|
||||
</p>
|
||||
|
||||
<div style="padding-right:1.5em;float:right;;"><img src="images/2.3/nfc.png" alt="" height="190" /> </div>
|
||||
<div style="padding-right:1.5em;float:right;margin-left:20px;;"><img
|
||||
src="{@docRoot}sdk/images/2.3/nfc.png" alt="" height="190" /> </div>
|
||||
|
||||
<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Near-field communications</strong></p>
|
||||
|
||||
@@ -10,12 +10,8 @@ sdk.platform.apiLevel=10
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -25,11 +21,6 @@ href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -40,78 +31,11 @@ Differences Report »</a> </li>
|
||||
and APIs to the Android 2.3 platform.</p>
|
||||
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator
|
||||
skins and more. The downloadable platform
|
||||
includes no external libraries.</p>
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
<p>To get started developing or testing against Android
|
||||
{@sdkPlatformVersion}, use the Android SDK Manager to
|
||||
download the platform into your SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
|
||||
first.</p>
|
||||
|
||||
<p>For a high-level introduction to Android 2.3, see the <a
|
||||
href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>The sections below provide notes about successive releases of
|
||||
the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
|
||||
revision number. To determine what revision(s) of the Android
|
||||
{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
|
||||
the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
|
||||
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
<dd>
|
||||
<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
|
||||
Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
|
||||
bugs in the previous rendering library. It also unlocks several editor features that were added in
|
||||
ADT 12.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires SDK Tools r9 or higher.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<h2 id="api">API Overview</h2>
|
||||
@@ -264,156 +188,5 @@ manifest. If your application is designed to run only on Android 2.3 and higher,
|
||||
declaring the attribute prevents the application from being installed on earlier
|
||||
versions of the platform.</p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Contacts</li>
|
||||
<li>Cusom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gallery</li>
|
||||
<li>IMEs for Japanese, Chinese, and Latin text input</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Phone</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts (developer app)</li>
|
||||
<li>Speech Recorder</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android {@sdkPlatformVersion} system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian-Bokmol, Norway(nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes a set of emulator skins that you can use
|
||||
for modeling your application in different screen sizes and resolutions. The
|
||||
emulator skins are:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
QVGA (240x320, low density, small screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA400 (240x400, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA432 (240x432, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
HVGA (320x480, medium density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA800 (480x800, high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA854 (480x854 high density, normal screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
148
docs/html/about/versions/android-2.3.4.jd
Normal file
148
docs/html/about/versions/android-2.3.4.jd
Normal file
@@ -0,0 +1,148 @@
|
||||
page.title=Android 2.3.4 Platform
|
||||
sdk.platform.version=2.3.4
|
||||
sdk.platform.apiLevel=10
|
||||
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#openaccessory">Open Accessory Library</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
<ol>
|
||||
<li><a
|
||||
href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p>
|
||||
|
||||
<p>Android 2.3.4 is a maintenance release that adds several bug fixes and patches
|
||||
to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally,
|
||||
Android 2.3.4 brings support for the Open Accessory API to mobile devices,
|
||||
through the optional <a href="#usb">Open Accessory Library</a>. </p>
|
||||
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
|
||||
|
||||
<h2 id="api">API Overview</h2>
|
||||
|
||||
<p>Android 2.3.4 provides the same framework API to applications as Android 2.3.3
|
||||
(API level 10). For a summary of the API, see the
|
||||
<a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.3 version notes</a>.</p>
|
||||
|
||||
|
||||
<h2 id="openaccessory">Open Accessory Library</h2>
|
||||
|
||||
<p><em>Open Accessory</em> is a new capability for integrating
|
||||
connected peripherals with applications running on the platform. The capability
|
||||
is based on a USB (Universal Serial Bus) stack built into the platform and an
|
||||
API exposed to applications. Peripherals that attach to Android-powered devices
|
||||
as accessories connect as USB hosts. </p>
|
||||
|
||||
<p>Open Accessory is introduced in <a
|
||||
href="{@docRoot}about/versions/android-3.1.html#usb">Android 3.1</a> (API level 12), but is
|
||||
made available to devices running Android 2.3.4 by means of an optional external
|
||||
library, the Open Accessory Library. The library exposes a framework API that
|
||||
lets applications discover, communicate with, and manage a variety of device
|
||||
types connected over USB. It also provides the implementation of the API against
|
||||
parts of the Android platform that are not directly exposed to applications in
|
||||
Android 2.3.4.</p>
|
||||
|
||||
<p>The Open Accessory Library is optional on any given device. Device
|
||||
manufacturers may choose whether to include the Open Accessory Library in their
|
||||
products or exclude it. The library is forward-compatible with Android 3.1, so
|
||||
applications developed against Android 2.3.4 will run properly on devices
|
||||
running Android 3.1, if those devices support USB accessories. </p>
|
||||
|
||||
<p>The API provided by the Open Accessory Library is based on the Open Accessory
|
||||
API provided in Android 3.1. In most areas, you can use the same techniques and
|
||||
APIs. However, developing for the Open Accessory Library on Android 2.3.4 differs
|
||||
from the standard USB API in these ways:
|
||||
|
||||
<ul>
|
||||
<li>Obtaining a {@link android.hardware.usb.UsbManager} object — To obtain
|
||||
a {@link android.hardware.usb.UsbManager} object when using the add-on library,
|
||||
use the helper method <code>getInstance()</code> rather than {@link
|
||||
android.content.Context#getSystemService(java.lang.String) getSystemService()}
|
||||
For example:
|
||||
|
||||
<pre>UsbManager manager = UsbManager.getInstance(this);</pre></li>
|
||||
|
||||
<li>Obtaining a {@link android.hardware.usb.UsbAccessory} from a filtered intent
|
||||
— When you filter for a connected device or accessory with an intent
|
||||
filter, the {@link android.hardware.usb.UsbAccessory} object is contained
|
||||
inside the intent that is passed to your application. If you are using the
|
||||
add-on library, you can get the {@link android.hardware.usb.UsbAccessory} object
|
||||
in the following manner:
|
||||
|
||||
<pre>UsbAccessory accessory = UsbManager.getAccessory(intent)</pre></li>
|
||||
|
||||
<li>No USB host support — Android 2.3.4 and the Open Accessory Library do
|
||||
not support USB host mode (for example, through {@link
|
||||
android.hardware.usb.UsbDevice}), although USB host mode is supported in Android
|
||||
3.1. An Android-powered device running Android 2.3.4 can not function as a USB
|
||||
host. The library enables the Android-powered device to function as
|
||||
a peripheral only, with the connected accessory functioning as USB host
|
||||
(through {@link android.hardware.usb.UsbAccessory}).</li>
|
||||
</ul>
|
||||
|
||||
<p>To develop apps using the Open Accessory Library, you need:</p>
|
||||
|
||||
<ul>
|
||||
<li>The latest version of the Android SDK tools</li>
|
||||
<li>The latest version of the Google APIs add-on, which includes the library
|
||||
itself (for linking)</li>
|
||||
<li>An actual hardware device running Android 2.3.4 (or Android 3.1) with USB
|
||||
accessories support, for runtime testing against connected devices</li>
|
||||
</ul>
|
||||
|
||||
<p>For a full discussion of how to develop applications that interact with USB
|
||||
accessories, please see the related <a
|
||||
href="{@docRoot}guide/topics/connectivity/usb/index.html">developer documentation</a>.</p>
|
||||
|
||||
<p>Additionally, developers can request filtering on Google Play, such that
|
||||
their applications are not available to users whose devices do not provide the
|
||||
appropriate accessory support. To request filtering, add the element below
|
||||
to the application manifest:</p>
|
||||
|
||||
<pre><uses-feature
|
||||
android:name="android.hardware.usb.accessory"
|
||||
android:required="true"></pre>
|
||||
|
||||
|
||||
<h2 id="api-level">API Level</h2>
|
||||
|
||||
<p>The Android 2.3.4 platform does <em>not</em> increment the API level —
|
||||
it uses the same API level as Android 2.3.3, API level 10.
|
||||
|
||||
<p>To use APIs introduced in API level 10 in your application,
|
||||
you need compile the application against the Android library that is provided in
|
||||
the latest version of the Google APIs Add-On, which also includes the Open
|
||||
Accessory Library.</p>
|
||||
|
||||
<p>Depending on your needs, you might
|
||||
also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
|
||||
attribute to the <code><uses-sdk></code> element in the application's
|
||||
manifest. If your application is designed to run only on Android 2.3.3 and higher,
|
||||
declaring the attribute prevents the application from being installed on earlier
|
||||
versions of the platform.</p>
|
||||
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
@@ -10,12 +10,8 @@ sdk.platform.apiLevel=9
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -25,11 +21,6 @@ href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -37,85 +28,13 @@ Differences Report »</a> </li>
|
||||
<em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p>
|
||||
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator
|
||||
skins and more. The downloadable platform
|
||||
includes no external libraries.</p>
|
||||
|
||||
<p>To get started developing or testing against Android
|
||||
{@sdkPlatformVersion}, use the Android SDK Manager to
|
||||
download the platform into your SDK. For more information,
|
||||
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
|
||||
first.</p>
|
||||
|
||||
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
|
||||
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>The sections below provide notes about successive releases of
|
||||
the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
|
||||
revision number. To determine what revision(s) of the Android
|
||||
{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
|
||||
the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
function toggleDiv(link) {
|
||||
var toggleable = $(link).parent();
|
||||
if (toggleable.hasClass("closed")) {
|
||||
//$(".toggleme", toggleable).slideDown("fast");
|
||||
toggleable.removeClass("closed");
|
||||
toggleable.addClass("open");
|
||||
$(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
|
||||
} else {
|
||||
//$(".toggleme", toggleable).slideUp("fast");
|
||||
toggleable.removeClass("open");
|
||||
toggleable.addClass("closed");
|
||||
$(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.toggleable {
|
||||
padding: .25em 1em 0em 1em;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.toggleme {
|
||||
padding: 1em 1em 0 2em;
|
||||
line-height:1em;
|
||||
}
|
||||
.toggleable a {
|
||||
text-decoration:none;
|
||||
}
|
||||
.toggleme a {
|
||||
text-decoration:underline;
|
||||
}
|
||||
.toggleable.closed .toggleme {
|
||||
display:none;
|
||||
}
|
||||
#jd-content .toggle-img {
|
||||
margin:0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="toggleable opened">
|
||||
<a href="#" onclick="return toggleDiv(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(December 2010)</em></a>
|
||||
<div class="toggleme">
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires SDK Tools r8 or higher.</p>
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 id="api">API Overview</h2>
|
||||
|
||||
@@ -648,7 +567,7 @@ events and surfaces.</li>
|
||||
</ul>
|
||||
|
||||
<p>For full information on working with native code or to download the NDK,
|
||||
see the <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a> page.</p>
|
||||
see the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> page.</p>
|
||||
|
||||
|
||||
<h3 id="dalvik">Dalvik Runtime</h3>
|
||||
@@ -787,156 +706,5 @@ manifest. If your application is designed to run only on Android 2.3 and higher,
|
||||
declaring the attribute prevents the application from being installed on earlier
|
||||
versions of the platform.</p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Contacts</li>
|
||||
<li>Cusom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gallery</li>
|
||||
<li>IMEs for Japanese, Chinese, and Latin text input</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Phone</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts (developer app)</li>
|
||||
<li>Speech Recorder</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android {@sdkPlatformVersion} system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian-Bokmol, Norway(nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes a set of emulator skins that you can use
|
||||
for modeling your application in different screen sizes and resolutions. The
|
||||
emulator skins are:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
QVGA (240x320, low density, small screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA400 (240x400, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA432 (240x432, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
HVGA (320x480, medium density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA800 (480x800, high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA854 (480x854 high density, normal screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=Android 3.0 Platform Highlights
|
||||
page.title=Honeycomb
|
||||
|
||||
@jd:body
|
||||
|
||||
@@ -15,7 +15,6 @@ page.title=Android 3.0 Platform Highlights
|
||||
#jd-content div.video {
|
||||
float:right;
|
||||
padding:0 60px 40px;
|
||||
margin-top:-15px;
|
||||
}
|
||||
#jd-content table.columns {
|
||||
margin:0 0 1em 0;
|
||||
@@ -44,7 +43,7 @@ page.title=Android 3.0 Platform Highlights
|
||||
<p>The Android 3.0 platform introduces many new and exciting features for users and developers.
|
||||
This document provides a glimpse of some of the new features and technologies, as delivered in
|
||||
Android 3.0. For a more detailed look at new developer APIs, see the <a
|
||||
href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
href="{@docRoot}about/versions/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="#UserFeatures">New User Features</a></li>
|
||||
@@ -54,7 +53,9 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
<h2 id="UserFeatures" style="clear:right">New User Features</h2>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a href="images/3.0/home_hero1_full.png" target="_android"><img src="images/3.0/home_hero1.png" alt="" height="280" /></a></div>
|
||||
<div style="float:right;margin-left:20px;"><a
|
||||
href="{@docRoot}sdk/images/3.0/home_hero1_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/home_hero1.png" alt="" height="280" /></a></div>
|
||||
|
||||
<h3>New UI designed from the ground up for tablets</h3>
|
||||
|
||||
@@ -75,7 +76,9 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
</div>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/homescreen_cust_port_full.png" target="_android"><img src="images/3.0/homescreen_cust_port.png" alt="" height="280" /></a></div>
|
||||
<div style="float:right;margin-left:20px;"><a
|
||||
href="{@docRoot}sdk/images/3.0/homescreen_cust_port_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/homescreen_cust_port.png" alt="" height="280" /></a></div>
|
||||
|
||||
<p style="margin-top:1em;margin-bottom:.75em;"><strong>Customizable Home screens</strong></p>
|
||||
|
||||
@@ -84,7 +87,8 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
</div>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1.5em;float:left;"><a href="images/3.0/tasks_full.png" target="_android"><img src="images/3.0/tasks.png" alt="" height="280" /></a>
|
||||
<div style="margin-right:1.5em;float:left;"><a href="{@docRoot}sdk/images/3.0/tasks_full.png"
|
||||
target="_android"><img src="{@docRoot}sdk/images/3.0/tasks.png" alt="" height="280" /></a>
|
||||
|
||||
<!--<p style="font-size:90%">Figure</p> --></div>
|
||||
|
||||
@@ -100,7 +104,8 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
<p>The Android soft keyboard is redesigned to make entering text fast and accurate on larger screen sizes. The keys are reshaped and repositioned for improved targeting, and new keys have been added, such as a Tab key, to provide richer and more efficient text input. Users can touch-hold keys to access menus of special characters and switch text/voice input modes from a button in the System Bar.</p>
|
||||
|
||||
<div style="padding-top:1em;">
|
||||
<div style="margin-right:1em;float:right;"><a href="images/3.0/copy_full.png" target="_android"><img src="images/3.0/copy.png" alt="" height="180" /></a></div>
|
||||
<div style="margin-left:20px;float:right;"><a href="{@docRoot}sdk/images/3.0/copy_full.png"
|
||||
target="_android"><img src="{@docRoot}sdk/images/3.0/copy.png" alt="" height="180" /></a></div>
|
||||
|
||||
|
||||
<h3>Improved text selection, copy and paste</h3>
|
||||
@@ -116,8 +121,11 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
<h3>Updated set of standard apps</h3>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;;padding-top:0em;margin-left:1em;"><a href="images/3.0/browser_full.png" target="_android"><img src="images/3.0/browser.png" alt="" height="200" /></a><br>
|
||||
<a href="images/3.0/camera_full.png" target="_android"><img src="images/3.0/camera.png" alt="" height="200" /></a></div>
|
||||
<div style="margin-left:20px;float:right;;padding-top:0em;"><a
|
||||
href="{@docRoot}sdk/images/3.0/browser_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/browser.png" alt="" height="200" /></a><br>
|
||||
<a href="{@docRoot}sdk/images/3.0/camera_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/camera.png" alt="" height="200" /></a></div>
|
||||
|
||||
<p>The Android 3.0 platform includes an updated set of standard applications that are designed for use on larger screen devices. The sections below highlight some of the new features. </p>
|
||||
|
||||
@@ -156,7 +164,9 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
<h3 id="ui">New UI Framework for creating great tablet apps</h3>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/contacts_full.png" target="_android"><img src="images/3.0/contacts.png" alt="" height="200" /></a></div>
|
||||
<div style="float:right;margin-left:20px;"><a
|
||||
href="{@docRoot}sdk/images/3.0/contacts_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/contacts.png" alt="" height="200" /></a></div>
|
||||
|
||||
|
||||
<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Activity fragments, for greater control of content and design flexibility</strong></p>
|
||||
@@ -171,7 +181,9 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1.5em;float:left;margin-left:0em;"><a href="images/3.0/widgets.png" target="_android"><img src="images/3.0/widgets.png" alt="" height="200" target="_android" /></a></div>
|
||||
<div style="margin-right:1.5em;float:left;margin-left:0em;"><a
|
||||
href="{@docRoot}sdk/images/3.0/widgets.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/widgets.png" alt="" height="200" target="_android" /></a></div>
|
||||
|
||||
<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Expanded Home screen widgets</strong></p>
|
||||
|
||||
@@ -188,7 +200,10 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
<p>Notifications are a key part of the Android user experience because they let applications show key updates and status information to users in real time. Android 3.0 extends this capability, letting developers include richer content and control more properties. A new builder class lets developers quickly create notifications that include large and small icons, a title, a priority flag, and any properties already available in previous versions. Notifications can offer more types of content by building on the expanded set of UI Widgets that are now available as remote Views.</p>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/mail_drag_full.png" target="_android"><img src="images/3.0/mail_drag.png" alt="" height="200" style="padding-top:1em;"/></a></div>
|
||||
<div style="float:right;margin-left:20px;"><a
|
||||
href="{@docRoot}sdk/images/3.0/mail_drag_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.0/mail_drag.png" alt="" height="200"
|
||||
style="padding-top:1em;"/></a></div>
|
||||
|
||||
<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Multiselect, clipboard, and drag-and-drop</strong></p>
|
||||
|
||||
@@ -244,20 +259,3 @@ href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
|
||||
<p>Android 3.0 brings a new UI designed for tablets and other larger screen devices, but it also is fully compatible with applications developed for earlier versions of the platform, or for smaller screen sizes. Existing applications can seamlessly participate in the new holographic UI theme without code changes, by adding a single attribute in their manifest files. The platform emulates the Menu key, which is replaced by the overflow menu in the Action Bar in the new UI. Developers wanting to take fuller advantage of larger screen sizes can also create dedicated layouts and assets for larger screens and add them to their existing applications.</p>
|
||||
|
||||
|
||||
<h2>More information</h2>
|
||||
|
||||
<div class="video">
|
||||
<object width="278" height="180">
|
||||
<param name="movie" value="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1"></param>
|
||||
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
|
||||
value="always"></param>
|
||||
<embed src="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1" type="application/x-shockwave-flash"
|
||||
allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
|
||||
</object>
|
||||
</div>
|
||||
|
||||
<p>For more information about the new developer APIs, see the <a
|
||||
href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
|
||||
|
||||
<p>For a video overview of platform features, see the Android 3.0 Sneak Peek. </p>
|
||||
@@ -8,12 +8,8 @@ sdk.platform.apiLevel=11
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -23,12 +19,6 @@ href="{@docRoot}sdk/api_diff/11/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
|
||||
Handsets</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -40,76 +30,14 @@ component for the Android SDK. The downloadable platform includes an Android lib
|
||||
image, as well as a set of emulator skins and more. The downloadable platform includes no external
|
||||
libraries.</p>
|
||||
|
||||
<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
|
||||
Manager to download the platform into your SDK. For more information, see <a
|
||||
href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
|
||||
|
||||
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
|
||||
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
|
||||
Highlights</a>.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong>
|
||||
If you've already published an Android application, please test and optimize your application on
|
||||
Android 3.0 as soon as possible. You should do so to be sure your application provides the best
|
||||
experience possible on the latest Android-powered devices. For information about what you can do,
|
||||
read <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
|
||||
Handsets</a>.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
|
||||
refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
<dd>
|
||||
<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
|
||||
Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
|
||||
bugs in the previous rendering library. It also unlocks several editor features that were added in
|
||||
ADT 12.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -165,7 +93,7 @@ android.app.FragmentTransaction#commit commit()} and the system applies the frag
|
||||
the activity.</p>
|
||||
|
||||
<p>For more information about using fragments, read the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation. Several
|
||||
href="{@docRoot}guide/components/fragments.html">Fragments</a> documentation. Several
|
||||
samples are also available in the <a
|
||||
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
|
||||
API Demos</a> application.</p>
|
||||
@@ -261,11 +189,9 @@ before attempting to paste it.</p>
|
||||
object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
|
||||
android.content.ClipData.Item}s.</p>
|
||||
|
||||
<p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
|
||||
and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
|
||||
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">API Demos</a>
|
||||
and a more complete implementation in the <a
|
||||
href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>
|
||||
<p>For more information, read the <a href="{@docRoot}guide/topics/text/copy-paste.html">Copy
|
||||
and Paste</a> documentation. You can also see a simple implementation of copy and paste in the API Demos
|
||||
sample and a more complete implementation in the Note Pad sample.</p>
|
||||
|
||||
|
||||
|
||||
@@ -385,7 +311,7 @@ changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to
|
||||
loader for your activity or fragment.</p>
|
||||
|
||||
<p>For more information, read the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
|
||||
href="{@docRoot}guide/components/loaders.html">Loaders</a> documentation. You can also see
|
||||
example code using loaders in the <a
|
||||
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor</a>
|
||||
and <a
|
||||
@@ -453,7 +379,7 @@ such as a {@link android.animation.ValueAnimator} or {@link android.animation.Ob
|
||||
discussed above.</p>
|
||||
|
||||
<p>For more information, see the <a
|
||||
href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> documentation. You can
|
||||
href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> documentation. You can
|
||||
also see several samples using the animation APIs in the <a
|
||||
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
|
||||
Demos</a> application.</p>
|
||||
@@ -1046,141 +972,5 @@ manifest. If your application is designed to run only on Android 2.3 and higher,
|
||||
declaring the attribute prevents the application from being installed on earlier
|
||||
versions of the platform.</p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>API Demos</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Contacts</li>
|
||||
<li>Custom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gallery</li>
|
||||
<li>Gestures Builder</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts</li>
|
||||
<li>Speech Recorder</li>
|
||||
<li>Widget Preview</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android 3.0 system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian bokmål, Norway (nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes the following emulator skin:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
WXGA (1280x800, medium density, xlarge screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=Android 3.1 Platform Highlights
|
||||
page.title=Honeycomb MR1
|
||||
|
||||
@jd:body
|
||||
|
||||
@@ -15,7 +15,6 @@ page.title=Android 3.1 Platform Highlights
|
||||
#jd-content div.video {
|
||||
float:right;
|
||||
padding:0 60px 40px;
|
||||
margin-top:-15px;
|
||||
}
|
||||
#jd-content table.columns {
|
||||
margin:0 0 1em 0;
|
||||
@@ -45,11 +44,11 @@ features introduced in Android 3.0. It builds on the same tablet-optimized UI
|
||||
and features offered in Android 3.0 and adds several new capabilities for
|
||||
users and developers. This document provides an overview of the new features and
|
||||
technologies introduced in Android 3.1. For a more detailed look at new
|
||||
developer APIs, see the <a href="{@docRoot}sdk/android-3.1.html">API
|
||||
developer APIs, see the <a href="{@docRoot}about/versions/android-3.1.html">API
|
||||
Overview</a> document.</p>
|
||||
|
||||
<p>For a high-level introduction to Android 3.0, please see the <a
|
||||
href="{@docRoot}sdk/android-3.0-highlights.html">Android 3.0 Platform
|
||||
href="{@docRoot}about/versions/android-3.0-highlights.html">Android 3.0 Platform
|
||||
Highlights</a>.</p>
|
||||
|
||||
<ul>
|
||||
@@ -60,7 +59,9 @@ Highlights</a>.</p>
|
||||
<h2 id="UserFeatures" style="clear:right">New User Features</h2>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a href="images/3.1/home_full.png" target="_android"><img src="images/3.1/home.png" alt="" height="280" /></a>
|
||||
<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a
|
||||
href="{@docRoot}sdk/images/3.1/home_full.png" target="_android"><img
|
||||
src="{@docRoot}sdk/images/3.1/home.png" alt="" height="280" /></a>
|
||||
<div style="padding-left:1.25em;padding-bottom:1.25em;width:450px;font-size:.9em"><strong>Figure 1.</strong> An Android 3.1 Home screen.</div>
|
||||
</div>
|
||||
|
||||
@@ -293,7 +294,7 @@ many new ways to engage users and build powerful interaction experiences with
|
||||
connected hardware.</p>
|
||||
|
||||
<p>To learn more about how to develop applications that interact with
|
||||
accessories, see the <a href="{@docRoot}guide/topics/usb/accessory.html">USB
|
||||
accessories, see the <a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">USB
|
||||
Accessory</a> documentation.</p>
|
||||
|
||||
<h3 id="host">USB host API</h3>
|
||||
@@ -305,7 +306,7 @@ connected devices such as audio devices. input devices, communications devices,
|
||||
hubs, cameras, and more.</p>
|
||||
|
||||
<p>To learn more about how to develop applications that interact with
|
||||
USB devices, see the <a href="{@docRoot}guide/topics/usb/host.html">USB
|
||||
USB devices, see the <a href="{@docRoot}guide/topics/connectivity/usb/host.html">USB
|
||||
Host</a> documentation.</p>
|
||||
|
||||
<h3 id="inputdevices">Input from mice, joysticks, and gamepads</h3>
|
||||
@@ -8,12 +8,8 @@ sdk.platform.apiLevel=12
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -23,12 +19,6 @@ href="{@docRoot}sdk/api_diff/12/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
|
||||
Apps for Android 3.x</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -40,108 +30,12 @@ downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. The downloadable platform includes no external libraries.</p>
|
||||
|
||||
<p>To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK. For more
|
||||
information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
|
||||
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
|
||||
Highlights</a>.</p>
|
||||
|
||||
<p class="note"><strong>Reminder:</strong> If you've already published an
|
||||
Android application, please test and optimize your application on Android 3.0
|
||||
and Android 3.1 as soon as possible. You should do so to be sure your
|
||||
application provides the best experience possible on the latest Android-powered
|
||||
devices. For information about what you can do, read <a
|
||||
href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for
|
||||
Android 3.0</a>.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
|
||||
have installed, refer to the "Installed Packages" listing in the Android SDK and
|
||||
AVD Manager.</p>
|
||||
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
<dd>
|
||||
<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
|
||||
Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
|
||||
bugs in the previous rendering library. It also unlocks several editor features that were added in
|
||||
ADT 12.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 2</a> <em>(May 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r11</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
<dt>Notes:</dt>
|
||||
<dd>
|
||||
<p>Fixes an issue with the visual layout editor rendering library that prevented Android 3.1 from
|
||||
running in ADT.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>
|
||||
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r11</a> or
|
||||
higher.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<h2 id="#api" style="margin-top:1.5em;">API Overview</h2>
|
||||
@@ -236,7 +130,7 @@ accessories (connection of USB hosts), declare this element:
|
||||
|
||||
<p>For complete information about how to develop applications that interact with
|
||||
USB accessories, please see the
|
||||
<a href="{@docRoot}guide/topics/usb/index.html">developer documentation</a>.</p>
|
||||
<a href="{@docRoot}guide/topics/connectivity/usb/index.html">developer documentation</a>.</p>
|
||||
|
||||
<p class="note">To look at sample applications that use the USB host API, see <a
|
||||
href="{@docRoot}resources/samples/USB/AdbTest/index.html">ADB Test</a> and <a
|
||||
@@ -930,7 +824,7 @@ devices.</li>
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
|
||||
<uses-feature>}</a> manifest elements. For more information about
|
||||
declaring features in an application manifest, read <a
|
||||
href="{@docRoot}guide/appendix/market-filters.html">Google Play
|
||||
href="{@docRoot}guide/google/play/filters.html">Google Play
|
||||
Filters</a>.</p>
|
||||
|
||||
|
||||
@@ -965,142 +859,5 @@ also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
|
||||
attribute to the <code><uses-sdk></code> element in the application's
|
||||
manifest.</p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>API Demos</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Contacts</li>
|
||||
<li>Custom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gallery</li>
|
||||
<li>Gestures Builder</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts</li>
|
||||
<li>Speech Recorder</li>
|
||||
<li>Widget Preview</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety
|
||||
of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android 3.0 system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian bokmål, Norway (nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes the following emulator skin:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
WXGA (1280x800, medium density, xlarge screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
@@ -8,13 +8,9 @@ sdk.platform.apiLevel=13
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#highlights">Highlights</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -24,22 +20,12 @@ href="{@docRoot}sdk/api_diff/13/changes.html">API
|
||||
Differences Report »</a> </li>
|
||||
</ol>
|
||||
|
||||
<h2>See Also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting
|
||||
Multiple Screens</a></li>
|
||||
<li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
|
||||
Apps for Android 3.x</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<p><em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p>
|
||||
|
||||
<p>Welcome to Android 3.2!</p>
|
||||
|
||||
<p>Android 3.2 is an incremental platform release that adds new
|
||||
capabilities for users and developers. The sections below provide an overview
|
||||
of the new features and developer APIs.</p>
|
||||
@@ -47,46 +33,10 @@ of the new features and developer APIs.</p>
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. The downloadable platform includes no external libraries.</p>
|
||||
|
||||
<p>To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK. For more
|
||||
information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
|
||||
|
||||
<p class="note"><strong>Reminder:</strong> If you've already published an
|
||||
Android application, please test and optimize your application on Android 3.2 as
|
||||
soon as possible. You should do so to be sure your application provides the best
|
||||
experience possible on the latest Android-powered devices. For information about
|
||||
what you can do, read <a
|
||||
href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for
|
||||
Android 3.x</a>.</p>
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
|
||||
have installed, refer to the "Installed Packages" listing in the Android SDK and
|
||||
AVD Manager.</p>
|
||||
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(July 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<dl>
|
||||
<dt>Initial release. SDK Tools r12 or higher is recommended.</dt>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 id="highlights" style="margin-top:1.5em;">Platform Highlights</h2>
|
||||
|
||||
@@ -288,7 +238,7 @@ size qualifiers</a>.</p>
|
||||
<h4>New manifest attributes for screen-size compatibility</h4>
|
||||
|
||||
<p>The framework offers a new set of <a
|
||||
href="{@docRoot}"><code><supports-screens></code></a> manifest attributes that let
|
||||
href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> manifest attributes that let
|
||||
you manage your app's support for different screen sizess.
|
||||
Specifically, you can specify the largest and smallest screens on which your app
|
||||
is designed to run, as well as the largest screen on which it is designed run
|
||||
@@ -600,142 +550,7 @@ also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
|
||||
attribute to the <code><uses-sdk></code> element in the application's
|
||||
manifest.</p>
|
||||
|
||||
<p>For more information about how to use API Level, see the <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>API Demos</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Contacts</li>
|
||||
<li>Custom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gallery</li>
|
||||
<li>Gestures Builder</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Spare Parts</li>
|
||||
<li>Speech Recorder</li>
|
||||
<li>Widget Preview</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety
|
||||
of
|
||||
built-in locales. In some cases, region-specific strings are available for the
|
||||
locales. In other cases, a default version of the language is used. The
|
||||
languages that are available in the Android 3.0 system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale
|
||||
descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, Zimbabwe (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian bokmål, Norway (nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes the following emulator skin:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
WXGA (1280x800, medium density, xlarge screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more information about how to develop an application that displays
|
||||
and functions properly on all Android-powered devices, see <a
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
|
||||
Screens</a>.</p>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=Android 4.0 Platform Highlights
|
||||
page.title=Ice Cream Sandwich
|
||||
|
||||
@jd:body
|
||||
|
||||
@@ -15,7 +15,6 @@ page.title=Android 4.0 Platform Highlights
|
||||
#jd-content div.video {
|
||||
float:right;
|
||||
padding:0 0 40px 60px;
|
||||
margin-top:-30px;
|
||||
}
|
||||
#jd-content table.columns {
|
||||
margin:0 0 1em 0;
|
||||
@@ -38,11 +37,6 @@ page.title=Android 4.0 Platform Highlights
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="video">
|
||||
<iframe width="380" height="223" src="http://www.youtube.com/embed/-F_ke3rxopc?hd=1" frameborder="0"
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
<p>Welcome to Android 4.0!</p>
|
||||
|
||||
<p>Android 4.0 delivers a refined, unified UI for phones and tablets and
|
||||
@@ -50,7 +44,7 @@ introduces innovative features for users and developers. This document provides
|
||||
a glimpse of the many new features and technologies that make Android 4.0
|
||||
simple, beautiful, and beyond smart. <!--For technical details about
|
||||
new developer APIs described below, see the <a
|
||||
href="{@docRoot}sdk/android-4.0.html">Android 4.0 API Overview</a>
|
||||
href="{@docRoot}about/versions/android-4.0.html">Android 4.0 API Overview</a>
|
||||
document.--></p>
|
||||
|
||||
<ul>
|
||||
@@ -61,12 +55,16 @@ document.--></p>
|
||||
<h2 id="UserFeatures" style="clear:right">Android 4.0 for Users</h2>
|
||||
|
||||
<div style="padding-bottom:0em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/home-lg.png" target="_android"><img style="float:right;xborder:1px solid #ddd;border-radius: 5px;" src="{@docRoot}sdk/images/4.0/home.png" alt="" height="300" width="180" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/lock-lg.png" target="_android"><img style="float:right;border:1px solid #ddd;border-radius: 5px;" src="{@docRoot}sdk/images/4.0/lock.png" alt="" height="300" width="180" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/home-lg.png" target="_android"><img
|
||||
style="margin-left:10px;float:right;xborder:1px solid #ddd;border-radius: 5px;"
|
||||
src="{@docRoot}sdk/images/4.0/home.png" alt="" height="300" width="180" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/lock-lg.png" target="_android"><img
|
||||
style="margin-left:20px;float:right;border:1px solid #ddd;border-radius: 5px;"
|
||||
src="{@docRoot}sdk/images/4.0/lock.png" alt="" height="300" width="180" /></a>
|
||||
</div>
|
||||
|
||||
|
||||
<h3 id="simple" style="color:#172861">Simple, beautiful, beyond smart</h3>
|
||||
<h3 id="simple" style="color:#258AAF">Simple, beautiful, beyond smart</h3>
|
||||
|
||||
<p>Android 4.0 builds on the things people love most about Android — easy
|
||||
multitasking, rich notifications, customizable home screens, resizable widgets,
|
||||
@@ -98,16 +96,23 @@ thumbnail switches to the app.</p>
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:.5em;float:left;width:182px;padding-top:.5em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/tasks-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/tasks.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1em;">The Recent Apps list makes multitasking simple.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/tasks.png" alt="" height="240" width="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1em;font-size:.9em;padding-right:1em;">The Recent Apps list makes
|
||||
multitasking simple.</div>
|
||||
<a href="{@docRoot}sdk/images/4.0/lock-camera-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/lock-camera.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1.75em;">Jump to the camera or see notifications without unlocking.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/lock-camera.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1em;font-size:.9em;padding-right:1.75em;">Jump to the camera or see
|
||||
notifications without unlocking.</div>
|
||||
<a href="{@docRoot}sdk/images/4.0/contact-call-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<!--<a href="{@docRoot}sdk/images/4.0/quick-response-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/quick-responses-new.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>-->
|
||||
<div style="padding-left:1em;padding-bottom:.5em;font-size:.9em;padding-right:1.75em;">For incoming calls, you can respond instantly by text.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/quick-responses-new.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>-->
|
||||
<div style="padding-bottom:.5em;font-size:.9em;padding-right:1.75em;">For incoming calls, you can
|
||||
respond instantly by text.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -118,12 +123,18 @@ top of the screen, while on larger-screen devices they appear in the System
|
||||
Bar.</p>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;margin-top:.5em;margin-bottom:0;padding-bottom:0;width:326px">
|
||||
<div
|
||||
style="float:right;margin-left:20px;margin-top:.5em;margin-bottom:0;padding-bottom:
|
||||
0 ; width:326px">
|
||||
<a href="{@docRoot}sdk/images/4.0/allapps-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/allapps.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/allapps.png" alt="" height="240" width="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/calendar-widget-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/calendar-widget.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->The All Apps launcher (left) and resizable widgets (right) give you apps and rich content from the home screen.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/calendar-widget.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
|
||||
3.</strong>-->The All Apps launcher (left) and resizable widgets (right) give you apps and rich
|
||||
content from the home screen.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -181,13 +192,19 @@ easier. Users can now dismiss individual notifications, apps from the Recent
|
||||
Apps list, and browser tabs with a simple swipe of a finger. </p>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;width:200px">
|
||||
<div
|
||||
style="float:right;margin-left:20px;margin-top:1.5em;margin-bottom:0;padding-bottom
|
||||
: 0 ; width:200px">
|
||||
<a href="{@docRoot}sdk/images/4.0/text-replace-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/text-replace.png" alt="" width="190" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->A spell-checker lets you find errors and fix them faster. </div>
|
||||
<img src="{@docRoot}sdk/images/4.0/text-replace.png" alt="" width="190" style="border:1px solid
|
||||
#ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
|
||||
3.</strong>-->A spell-checker lets you find errors and fix them faster. </div>
|
||||
<a href="{@docRoot}sdk/images/4.0/tts-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/tts.png" alt="" width="190" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A powerful voice input engine lets you dictate continously.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/tts.png" alt="" width="190" style="border:1px solid
|
||||
#ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A powerful voice input
|
||||
engine lets you dictate continously.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -225,10 +242,14 @@ quickly replace them from a list of suggestions.</p>
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margsin-right:.8em;float:left;width:350px;padding-top:1em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/usage-all-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/usage-all.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/usage-all.png" alt="" height="240" width="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/usage-maps-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/usage-maps.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1.75em;"><!--<strong>Figure 3.</strong>--> Data usage controls let you monitor total usage by network type and application and then set limits if needed.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/usage-maps.png" alt="" height="240" width="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1em;font-size:.9em;padding-right:1.75em;"><!--<strong>Figure
|
||||
3.</strong>--> Data usage controls let you monitor total usage by network type and application and
|
||||
then set limits if needed.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -270,19 +291,27 @@ accessibility features are active, everything visible on the screen can be
|
||||
spoken aloud by the standard screen reader.</p>
|
||||
|
||||
|
||||
<h3 id="comms" style="color:#172861">Communication and sharing</h3>
|
||||
<h3 id="comms" style="color:#258AAF">Communication and sharing</h3>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:.5em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;width:490px">
|
||||
<!--<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" />-->
|
||||
<div
|
||||
style="float:right;margin-left:20px;margin-top:1.5em;margin-bottom:0;padding-bottom
|
||||
: 0 ; width:490px">
|
||||
<!--<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" />-->
|
||||
<a href="{@docRoot}sdk/images/4.0/contact-faves-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-faves.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-faves.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/contact-connect-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-connect.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-connect.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/contact-email-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-email.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/contact-email.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
|
||||
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->Contacts and profiles are integrated across apps and social networks, for a consistent, personal experience everywhere — from incoming calls to emails.</div>
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
|
||||
3.</strong>-->Contacts and profiles are integrated across apps and social networks, for a
|
||||
consistent, personal experience everywhere — from incoming calls to emails.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -327,14 +356,18 @@ their own voice messages, transcriptions, and more to the visual voicemail
|
||||
inbox. </p>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margsin-right:0em;float:left;width:282px;padding-top:1em;">
|
||||
<div style="margin-right:0em;float:left;width:282px;padding-top:1em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/camera-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/camera.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/camera.png" alt="" width="240" height="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/gallery-edit-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-edit.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-edit.png" alt="" width="240" height="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/gallery-share-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-share.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:2.75em;">Capture the picture you want, edit, and share instantly. </div>
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-share.png" alt="" width="240" height="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1em;font-size:.9em;padding-right:2.75em;">Capture the picture you want,
|
||||
edit, and share instantly. </div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -370,9 +403,13 @@ the camera controls. </p>
|
||||
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:1em;padding-bottom:0;width:160px">
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-widget.png" alt="" width="144" style="border:1px solid #ddd;border-radius: 6px;" />
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A Photo Gallery widget on the home screen.</div>
|
||||
<div
|
||||
style="float:right;margin-left:20px;padding-top:1em;margin-bottom:1em;padding-
|
||||
bottom : 0 ;width:160px">
|
||||
<img src="{@docRoot}sdk/images/4.0/gallery-widget.png" alt="" width="144" style="border:1px solid
|
||||
#ddd;border-radius: 6px;" />
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A Photo Gallery widget
|
||||
on the home screen.</div>
|
||||
</div>
|
||||
|
||||
<p style="margin-top:1em;margin-bottom:.75em;"><strong>Redesigned Gallery app
|
||||
@@ -395,13 +432,18 @@ adding the widget to the home screen, users can flick through the photo stacks
|
||||
to locate the image they want, then tap to load it in Gallery. </p>
|
||||
|
||||
<div style="padding-top:0em;clear:right;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:1em;padding-bottom:0;width:320px">
|
||||
<img src="{@docRoot}sdk/images/4.0/live-effects.png" alt="" width="297" style="border:1px solid #ddd;border-radius: 6px;" />
|
||||
<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Live Effects let you change backgrounds and use Silly Faces during video.</div>
|
||||
<div
|
||||
style="float:right;margin-left:20px;padding-top:1em;margin-bottom:1em;padding-
|
||||
bottom : 0 ;width:320px">
|
||||
<img src="{@docRoot}sdk/images/4.0/live-effects.png" alt="" width="297" style="border:1px solid
|
||||
#ddd;border-radius: 6px;" />
|
||||
<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Live Effects let you
|
||||
change backgrounds and use Silly Faces during video.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p style="margin-top:1em;margin-bottom:.75em;"><strong>Live Effects for transforming video</strong></p>
|
||||
<p style="margin-top:1em;margin-bottom:.75em;"><strong>Live Effects for transforming
|
||||
video</strong></p>
|
||||
|
||||
<p>Live Effects is a collection of graphical transformations that add interest
|
||||
and fun to videos captured in the Camera app. For example, users can
|
||||
@@ -416,8 +458,10 @@ Google Talk app.</p>
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/screenshot-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/screenshot.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"> Snapping a screenshot.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/screenshot.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"> Snapping a
|
||||
screenshot.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -430,17 +474,24 @@ store it locally. Afterward, they can view, edit, and share the screen shot in
|
||||
Gallery or a similar app.</p>
|
||||
|
||||
|
||||
<h3 id="cloud" style="color:#172861">Cloud-connected experience</h3>
|
||||
<h3 id="cloud" style="color:#258AAF">Cloud-connected experience</h3>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:0;padding-bottom:0;width:326px">
|
||||
<div
|
||||
style="float:right;margin-left:20px;padding-top:1em;margin-bottom:0;padding-bottom:
|
||||
0 ; width:326px">
|
||||
<a href="{@docRoot}sdk/images/4.0/browser-tabs-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/browser-tabs.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<img src="{@docRoot}sdk/images/4.0/browser-tabs.png" alt="" height="240" width="144"
|
||||
style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<a href="{@docRoot}sdk/images/4.0/browser-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/browser.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->The Browser tabs menu <em>(left)</em> lets you quickly switch browser tabs. The options menu <em>(right)</em> gives you new ways to manage your browsing experience.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/browser.png" alt="" height="240" width="144" style="border:1px
|
||||
solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
|
||||
3.</strong>-->The Browser tabs menu <em>(left)</em> lets you quickly switch browser tabs. The
|
||||
options menu <em>(right)</em> gives you new ways to manage your browsing experience.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/bbench.png" alt="" width="310" />
|
||||
<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Benchmark comparisons of Android Browser.</div>
|
||||
<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Benchmark comparisons of
|
||||
Android Browser.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -509,12 +560,15 @@ screen, then jump into the Email app to compose or reply.</p>
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
|
||||
<a href="{@docRoot}sdk/images/4.0/beam-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/beam.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em;padding-right:1.5em;">Android Beam lets users share what they are using with a single tap.</div>
|
||||
<img src="{@docRoot}sdk/images/4.0/beam.png" alt="" height="240" width="144" style="border:1px solid
|
||||
#ddd;border-radius: 6px;" /></a>
|
||||
<div
|
||||
style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em;padding-right:1.5em;">Android
|
||||
Beam lets users share what they are using with a single tap.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 id="innovation" style="color:#172861">Innovation</h3>
|
||||
<h3 id="innovation" style="color:#258AAF">Innovation</h3>
|
||||
|
||||
<p>Android is continously driving innovation forward, pushing the boundaries of
|
||||
communication and sharing with new capabilities and interactions.</p>
|
||||
@@ -535,10 +589,13 @@ Android Beam to add other types of interactions, such as passing game scores,
|
||||
initiating a multiplayer game or chat, and more.</p>
|
||||
|
||||
<div style="padding-top:0em;">
|
||||
<div style="margin-right:1em;float:right;margin-left:1em;margin-top:.5em;margin-bottom:0;padding-bottom:0;width:160px">
|
||||
<div
|
||||
style="float:right;margin-left:20px;margin-top:.5em;margin-bottom:0;padding-bottom:
|
||||
0 ; width:160px">
|
||||
<a href="{@docRoot}sdk/images/4.0/face-unlock-lg.png" target="_android">
|
||||
<img src="{@docRoot}sdk/images/4.0/face-unlock.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
|
||||
<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Face recognition lets you unlock your phone with your face.</div>
|
||||
<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Face recognition lets you
|
||||
unlock your phone with your face.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -593,8 +650,8 @@ consistent design practices, simplified code and resources, and streamlined
|
||||
development across the range of Android-powered devices.</p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox" style="border-left:1px solid #22a5ca;background-color:#fff;">
|
||||
<h3>Key Android 3.x developer features, <br>now for phones too</h3>
|
||||
<div class="sidebox">
|
||||
<h3>Key Honeycomb developer features, <br>now for phones too</h3>
|
||||
|
||||
<p>Core UI</p>
|
||||
<ul>
|
||||
@@ -8,13 +8,9 @@ sdk.platform.apiLevel=15
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#Honeycomb">Previous APIs</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -34,100 +30,17 @@ Differences Report »</a> </li>
|
||||
users and developers, API changes, and various bug fixes.</p>
|
||||
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The development platform includes a
|
||||
fully compliant Android library and system image as well as a set of emulator
|
||||
skins, sample applications, and more. The downloadable platform includes no
|
||||
external libraries.</p>
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
<p>To start developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK. For more
|
||||
information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
|
||||
|
||||
<p>For a high-level overview of the new user and developer features, see the
|
||||
<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform
|
||||
Highlights</a>.</p>
|
||||
|
||||
|
||||
<h2 id="relnotes">Development Platform Revisions</h2>
|
||||
|
||||
<p>The sections below provide notes about successive revisions of the Android
|
||||
{@sdkPlatformVersion} development platform for the Android SDK, as denoted by
|
||||
revision number. To determine what revisions you have installed in your SDK
|
||||
environment, refer to the "Installed Packages" listing in the Android SDK
|
||||
Manager.</p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> To download the new Android
|
||||
4.0.x system components from the Android SDK Manager, you must first update the
|
||||
SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
|
||||
the Android 4.0.x system components will not be available for download.</p>
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Revision 3</a> <em>(March 2012)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<p>Maintenance update. The system version is 4.0.4.</p>
|
||||
<p class="note"><strong>Note:</strong> This system image includes support for emulator
|
||||
hardware graphics acceleration when used with SDK Tools r17 or higher.
|
||||
(<a href="{@docRoot}guide/developing/devices/emulator.html#accel-graphics">more info</a>)</p>
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>SDK Tools r17 or higher is required.</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Revision 2</a> <em>(January 2012)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<p>Maintenance update. The system version is 4.0.3.</p>
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>SDK Tools r14 or higher is required.</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Revision 1</a> <em>(December 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
|
||||
<p>Initial release. The system version is 4.0.3.</p>
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>SDK Tools r14 or higher is required.</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 id="api">API Overview</h2>
|
||||
|
||||
<p>The sections below provide a technical overview of new APIs in Android 4.0.3.</p>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
<div class="toggle-content closed">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
@@ -386,170 +299,6 @@ higher. Depending on your needs, you might also need to add an
|
||||
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
|
||||
element.</p>
|
||||
|
||||
<p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
|
||||
<p>For more information, see the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
|
||||
document. </p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>API Demos</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Calendar</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Custom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
<li>Gallery</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gestures Builder</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>People</li>
|
||||
<li>Phone</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Speech Recorder</li>
|
||||
<li>Widget Preview</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety of built-in
|
||||
locales. In some cases, region-specific strings are available for the locales. In other cases, a
|
||||
default version of the language is used. The languages that are available in the Android 3.0 system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian bokmål, Norway (nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes the following emulator skins:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
QVGA (240x320, low density, small screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA400 (240x400, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA432 (240x432, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
HVGA (320x480, medium density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA800 (480x800, high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA854 (480x854 high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WXGA720 (1280x720, extra-high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WSVGA (1024x600, medium density, large screen)
|
||||
</li>
|
||||
<li>
|
||||
WXGA (1280x800, medium density, xlarge screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>To test your application on an emulator that represents the latest Android device, you can create
|
||||
an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
|
||||
currently doesn't support the new on-screen navigation bar for devices without hardware navigation
|
||||
buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
|
||||
<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
|
||||
|
||||
<p>However, due to performance issues in the emulator when running high-resolution screens such as
|
||||
the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
|
||||
(hdpi, normal screen) to test your application.</p>
|
||||
|
||||
@@ -8,13 +8,9 @@ sdk.platform.apiLevel=14
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#relnotes">Revisions</a></li>
|
||||
<li><a href="#api">API Overview</a></li>
|
||||
<li><a href="#Honeycomb">Previous APIs</a></li>
|
||||
<li><a href="#api-level">API Level</a></li>
|
||||
<li><a href="#apps">Built-in Applications</a></li>
|
||||
<li><a href="#locs">Locales</a></li>
|
||||
<li><a href="#skins">Emulator Skins</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Reference</h2>
|
||||
@@ -36,80 +32,19 @@ platform release because it brings the extensive set of APIs and Holographic the
|
||||
to smaller screens. As an app developer, you now have a single platform and unified API framework
|
||||
that enables you to develop and publish your application with a single APK that provides an
|
||||
optimized user experience for handsets, tablets, and more, when running the same version of
|
||||
Android—Android 4.0 (API level 14) or greater. </p>
|
||||
Android—Android 4.0 (API level 14) or greater.</p>
|
||||
|
||||
<p>The Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK so you can begin developing and testing your
|
||||
applications on Android 4.0 with the Android emulator. The downloadable platform includes
|
||||
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
|
||||
downloadable component for the Android SDK. The downloadable platform includes
|
||||
an Android library and system image, as well as a set of emulator skins and
|
||||
more. The downloadable platform does not include any external libraries.</p>
|
||||
|
||||
<p>To start developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK. For more
|
||||
information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
|
||||
Components</a>. If you are new to Android, <a
|
||||
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
|
||||
|
||||
<p class="note"><strong>Reminder:</strong> If you've already published an
|
||||
Android application, please test your application on Android {@sdkPlatformVersion} as
|
||||
soon as possible to be sure your application provides the best
|
||||
experience possible on the latest Android-powered devices.</p>
|
||||
|
||||
<p>For a high-level overview of the new user and developer features in Android 4.0, see the
|
||||
<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform Highlights</a>.</p>
|
||||
|
||||
|
||||
|
||||
<h2 id="relnotes">Revisions</h2>
|
||||
|
||||
<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
|
||||
have installed, refer to the "Installed Packages" listing in the Android SDK Manager.</p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> To download the new Android
|
||||
4.0 system components from the Android SDK Manager, you must first update the
|
||||
SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
|
||||
the Android 4.0 system components will not be available for download.</p>
|
||||
|
||||
<div class="toggle-content opened" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-opened.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 2</a> <em>(December 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
<p>Maintenance update. The system version is 4.0.2.</p>
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>SDK Tools r14 or higher is required.</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
class="toggle-content-img" alt="" />
|
||||
Android {@sdkPlatformVersion}, Revision 1</a> <em>(October 2011)</em>
|
||||
</a></p>
|
||||
|
||||
<div class="toggle-content-toggleme" style="padding-left:2em;">
|
||||
<p>Initial release. The system version is 4.0.1.</p>
|
||||
<dl>
|
||||
<dt>Dependencies:</dt>
|
||||
<dd>SDK Tools r14 or higher is required.</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
more. To get started developing or testing against Android {@sdkPlatformVersion},
|
||||
use the Android SDK Manager to download the platform into your SDK.</p>
|
||||
|
||||
<h2 id="api">API Overview</h2>
|
||||
|
||||
<p>The sections below provide a technical overview of new APIs in Android 4.0.</p>
|
||||
|
||||
<div class="toggle-content closed" style="padding-left:1em;">
|
||||
<div class="toggle-content closed">
|
||||
|
||||
<p><a href="#" onclick="return toggleContent(this)">
|
||||
<img src="{@docRoot}assets/images/triangle-closed.png"
|
||||
@@ -643,7 +578,7 @@ action to start an activity, with either a URL or a MIME type set according to t
|
||||
android.nfc.NdefRecord} in the {@link android.nfc.NdefMessage}. For the activity you want to
|
||||
respond, you can declare intent filters for the URLs or MIME types your app cares about. For more
|
||||
information about Tag Dispatch see the <a
|
||||
href="{@docRoot}guide/topics/nfc/index.html#dispatch">NFC</a> developer guide.</p>
|
||||
href="{@docRoot}guide/topics/connectivity/nfc/index.html#dispatch">NFC</a> developer guide.</p>
|
||||
|
||||
<p>If you want your {@link android.nfc.NdefMessage} to carry a URI, you can now use the convenience
|
||||
method {@link android.nfc.NdefRecord#createUri createUri} to construct a new {@link
|
||||
@@ -671,7 +606,7 @@ application installed, the system launches it; if it’s not installed, Google P
|
||||
the user to your application in order to install it.</p>
|
||||
|
||||
<p>You can read more about Android Beam and other NFC features in the <a
|
||||
href="{@docRoot}guide/topics/nfc/nfc.html">NFC Basics</a> developer guide. For some example code
|
||||
href="{@docRoot}guide/topics/connectivity/nfc/nfc.html">NFC Basics</a> developer guide. For some example code
|
||||
using Android Beam, see the <a
|
||||
href="{@docRoot}resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html">Android
|
||||
Beam Demo</a>.</p>
|
||||
@@ -885,7 +820,7 @@ the methods necessary for any given view without extending the {@link android.vi
|
||||
|
||||
<p>If you want to maintain compatibility with Android versions prior to 4.0, while also supporting
|
||||
the new the accessibility APIs, you can do so with the latest version of the <em>v4 support
|
||||
library</em> (in <a href="{@docRoot}sdk/compatibility-library.html">Compatibility Package, r4</a>)
|
||||
library</em> (in <a href="{@docRoot}tools/extras/support-library.html">Compatibility Package, r4</a>)
|
||||
using a set of utility classes that provide the new accessibility APIs in a backward-compatible
|
||||
design.</p>
|
||||
|
||||
@@ -1679,7 +1614,7 @@ seemed to work because it made it possible to write buggy code. In Android 4.0,
|
||||
indirect references in order to detect these bugs.</p>
|
||||
|
||||
<p>The ins and outs of JNI local references are described in “Local and Global References" in <a
|
||||
href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>. In Android 4.0, <a
|
||||
href="{@docRoot}guide/practices/jni.html">JNI Tips</a>. In Android 4.0, <a
|
||||
href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">
|
||||
CheckJNI</a> has been enhanced to detect these errors. Watch the <a
|
||||
href="http://android-developers.blogspot.com/">Android Developers Blog</a> for an upcoming post
|
||||
@@ -1714,7 +1649,7 @@ it easier for you to test apps that use {@link android.webkit.WebView}</li>
|
||||
<ul>
|
||||
<li>Updated V8 JavaScript compiler for faster performance</li>
|
||||
<li>Plus other notable enhancements carried over from <a
|
||||
href="{@docRoot}sdk/android-3.0.html">Android
|
||||
href="{@docRoot}about/versions/android-3.0.html">Android
|
||||
3.0</a> are now available for handsets:
|
||||
<ul>
|
||||
<li>Support for fixed position elements on all pages</li>
|
||||
@@ -1779,7 +1714,7 @@ on handsets as well:</p>
|
||||
<ul>
|
||||
<li>{@link android.app.Fragment}: A framework component that allows you to separate distinct
|
||||
elements of an activity into self-contained modules that define their own UI and lifecycle. See the
|
||||
<a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</li>
|
||||
<a href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</li>
|
||||
<li>{@link android.app.ActionBar}: A replacement for the traditional title bar at the top of
|
||||
the activity window. It includes the application logo in the left corner and provides a new
|
||||
interface for menu items. See the
|
||||
@@ -1787,10 +1722,10 @@ interface for menu items. See the
|
||||
<li>{@link android.content.Loader}: A framework component that facilitates asynchronous
|
||||
loading of data in combination with UI components to dynamically load data without blocking the
|
||||
main thread. See the
|
||||
<a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</li>
|
||||
<a href="{@docRoot}guide/components/loaders.html">Loaders</a> developer guide.</li>
|
||||
<li>System clipboard: Applications can copy and paste data (beyond mere text) to and from
|
||||
the system-wide clipboard. Clipped data can be plain text, a URI, or an intent. See the
|
||||
<a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a> developer guide.</li>
|
||||
<a href="{@docRoot}guide/topics/text/copy-paste.html">Copy and Paste</a> developer guide.</li>
|
||||
<li>Drag and drop: A set of APIs built into the view framework that facilitates drag and drop
|
||||
operations. See the
|
||||
<a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</li>
|
||||
@@ -1829,7 +1764,7 @@ notes for more information.</li>
|
||||
<li>USB APIs: Powerful new APIs for integrating connected peripherals with
|
||||
Android applications. The APIs are based on a USB stack and services that are
|
||||
built into the platform, including support for both USB host and device interactions. See the <a
|
||||
href="{@docRoot}guide/topics/usb/index.html">USB Host and Accessory</a> developer guide.</li>
|
||||
href="{@docRoot}guide/topics/connectivity/usb/index.html">USB Host and Accessory</a> developer guide.</li>
|
||||
<li>MTP/PTP APIs: Applications can interact directly with connected cameras and other PTP
|
||||
devices to receive notifications when devices are attached and removed, manage files and storage on
|
||||
those devices, and transfer files and metadata to and from them. The MTP API implements the PTP
|
||||
@@ -1876,7 +1811,7 @@ notes for other new APIs.</li>
|
||||
|
||||
|
||||
|
||||
<h2 id="api-level">API Level</h2>
|
||||
<h3 id="api-level">API Level</h3>
|
||||
|
||||
<p>The Android {@sdkPlatformVersion} API is assigned an integer
|
||||
identifier—<strong>{@sdkPlatformApiLevel}</strong>—that is stored in the system itself.
|
||||
@@ -1890,170 +1825,5 @@ higher. Depending on your needs, you might also need to add an
|
||||
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
|
||||
element.</p>
|
||||
|
||||
<p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
|
||||
document. </p>
|
||||
|
||||
|
||||
<h2 id="apps">Built-in Applications</h2>
|
||||
|
||||
<p>The system image included in the downloadable platform provides these
|
||||
built-in applications:</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>API Demos</li>
|
||||
<li>Browser</li>
|
||||
<li>Calculator</li>
|
||||
<li>Calendar</li>
|
||||
<li>Camera</li>
|
||||
<li>Clock</li>
|
||||
<li>Custom Locale</li>
|
||||
<li>Dev Tools</li>
|
||||
<li>Downloads</li>
|
||||
<li>Email</li>
|
||||
<li>Gallery</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<ul>
|
||||
<li>Gestures Builder</li>
|
||||
<li>Messaging</li>
|
||||
<li>Music</li>
|
||||
<li>People</li>
|
||||
<li>Phone</li>
|
||||
<li>Search</li>
|
||||
<li>Settings</li>
|
||||
<li>Speech Recorder</li>
|
||||
<li>Widget Preview</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
|
||||
|
||||
<p>The system image included in the downloadable SDK platform provides a variety of built-in
|
||||
locales. In some cases, region-specific strings are available for the locales. In other cases, a
|
||||
default version of the language is used. The languages that are available in the Android 3.0 system
|
||||
image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
|
||||
|
||||
<table style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<tr>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;">
|
||||
<ul>
|
||||
<li>Arabic, Egypt (ar_EG)</li>
|
||||
<li>Arabic, Israel (ar_IL)</li>
|
||||
<li>Bulgarian, Bulgaria (bg_BG)</li>
|
||||
<li>Catalan, Spain (ca_ES)</li>
|
||||
<li>Czech, Czech Republic (cs_CZ)</li>
|
||||
<li>Danish, Denmark(da_DK)</li>
|
||||
<li>German, Austria (de_AT)</li>
|
||||
<li>German, Switzerland (de_CH)</li>
|
||||
<li>German, Germany (de_DE)</li>
|
||||
<li>German, Liechtenstein (de_LI)</li>
|
||||
<li>Greek, Greece (el_GR)</li>
|
||||
<li>English, Australia (en_AU)</li>
|
||||
<li>English, Canada (en_CA)</li>
|
||||
<li>English, Britain (en_GB)</li>
|
||||
<li>English, Ireland (en_IE)</li>
|
||||
<li>English, India (en_IN)</li>
|
||||
<li>English, New Zealand (en_NZ)</li>
|
||||
<li>English, Singapore(en_SG)</li>
|
||||
<li>English, US (en_US)</li>
|
||||
<li>English, South Africa (en_ZA)</li>
|
||||
<li>Spanish (es_ES)</li>
|
||||
<li>Spanish, US (es_US)</li>
|
||||
<li>Finnish, Finland (fi_FI)</li>
|
||||
<li>French, Belgium (fr_BE)</li>
|
||||
<li>French, Canada (fr_CA)</li>
|
||||
<li>French, Switzerland (fr_CH)</li>
|
||||
<li>French, France (fr_FR)</li>
|
||||
<li>Hebrew, Israel (he_IL)</li>
|
||||
<li>Hindi, India (hi_IN)</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
|
||||
<li>Croatian, Croatia (hr_HR)</li>
|
||||
<li>Hungarian, Hungary (hu_HU)</li>
|
||||
<li>Indonesian, Indonesia (id_ID)</li>
|
||||
<li>Italian, Switzerland (it_CH)</li>
|
||||
<li>Italian, Italy (it_IT)</li>
|
||||
<li>Japanese (ja_JP)</li>
|
||||
<li>Korean (ko_KR)</li>
|
||||
<li>Lithuanian, Lithuania (lt_LT)</li>
|
||||
<li>Latvian, Latvia (lv_LV)</li>
|
||||
<li>Norwegian bokmål, Norway (nb_NO)</li>
|
||||
<li>Dutch, Belgium (nl_BE)</li>
|
||||
<li>Dutch, Netherlands (nl_NL)</li>
|
||||
<li>Polish (pl_PL)</li>
|
||||
<li>Portuguese, Brazil (pt_BR)</li>
|
||||
<li>Portuguese, Portugal (pt_PT)</li>
|
||||
<li>Romanian, Romania (ro_RO)</li>
|
||||
<li>Russian (ru_RU)</li></li>
|
||||
<li>Slovak, Slovakia (sk_SK)</li>
|
||||
<li>Slovenian, Slovenia (sl_SI)</li>
|
||||
<li>Serbian (sr_RS)</li>
|
||||
<li>Swedish, Sweden (sv_SE)</li>
|
||||
<li>Thai, Thailand (th_TH)</li>
|
||||
<li>Tagalog, Philippines (tl_PH)</li>
|
||||
<li>Turkish, Turkey (tr_TR)</li>
|
||||
<li>Ukrainian, Ukraine (uk_UA)</li>
|
||||
<li>Vietnamese, Vietnam (vi_VN)</li>
|
||||
<li>Chinese, PRC (zh_CN)</li>
|
||||
<li>Chinese, Taiwan (zh_TW)</li>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Android platform may support more
|
||||
locales than are included in the SDK system image. All of the supported locales
|
||||
are available in the <a href="http://source.android.com/">Android Open Source
|
||||
Project</a>.</p>
|
||||
|
||||
<h2 id="skins">Emulator Skins</h2>
|
||||
|
||||
<p>The downloadable platform includes the following emulator skins:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
QVGA (240x320, low density, small screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA400 (240x400, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WQVGA432 (240x432, low density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
HVGA (320x480, medium density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA800 (480x800, high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WVGA854 (480x854 high density, normal screen)
|
||||
</li>
|
||||
<li>
|
||||
WXGA720 (1280x720, extra-high density, normal screen) <span class="new">new</span>
|
||||
</li>
|
||||
<li>
|
||||
WSVGA (1024x600, medium density, large screen) <span class="new">new</span>
|
||||
</li>
|
||||
<li>
|
||||
WXGA (1280x800, medium density, xlarge screen)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>To test your application on an emulator that represents the latest Android device, you can create
|
||||
an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
|
||||
currently doesn't support the new on-screen navigation bar for devices without hardware navigation
|
||||
buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
|
||||
<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
|
||||
|
||||
<p>However, due to performance issues in the emulator when running high-resolution screens such as
|
||||
the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
|
||||
(hdpi, normal screen) to test your application.</p>
|
||||
|
||||
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
|
||||
Level?</a></p>
|
||||
@@ -84,73 +84,73 @@ Android platform.</p>
|
||||
<table>
|
||||
<tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-4.0.3.html">Android 4.0.3</a></td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-4.0.3.html">Android 4.0.3</a></td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td>
|
||||
<td rowspan="2"><a href="{@docRoot}sdk/android-4.0-highlights.html">Platform
|
||||
<td rowspan="2"><a href="{@docRoot}about/versions/android-4.0-highlights.html">Platform
|
||||
Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-3.2.html">Android 3.2</a></td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-3.2.html">Android 3.2</a></td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td>
|
||||
<td><!-- <a href="{@docRoot}sdk/android-3.2-highlights.html">Platform Highlights</a>--></td></tr>
|
||||
<td><!-- <a href="{@docRoot}about/versions/android-3.2-highlights.html">Platform Highlights</a>--></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-3.1.html">Android 3.1.x</a></td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-3.1.html">Android 3.1.x</a></td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td>
|
||||
<td><a href="{@docRoot}sdk/android-3.1-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td><a href="{@docRoot}about/versions/android-3.1-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-3.0.html">Android 3.0.x</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-3.0.html">Android 3.0.x</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td>
|
||||
<td><a href="{@docRoot}sdk/android-3.0-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td><a href="{@docRoot}about/versions/android-3.0-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td>
|
||||
<td rowspan="2"><a href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td rowspan="2"><a href="{@docRoot}about/versions/android-2.3-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 2.3</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 2.3</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.2.html">Android 2.2.x</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.2.html">Android 2.2.x</td>
|
||||
<td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#FROYO}</td>
|
||||
<td><a href="{@docRoot}sdk/android-2.2-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td><a href="{@docRoot}about/versions/android-2.2-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.1.html">Android 2.1.x</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.1.html">Android 2.1.x</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td>
|
||||
<td rowspan="3" ><a href="{@docRoot}sdk/android-2.0-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td rowspan="3" ><a href="{@docRoot}about/versions/android-2.0-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.0.1.html">Android 2.0.1</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-2.0.html">Android 2.0</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-2.0.html">Android 2.0</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-1.6.html">Android 1.6</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-1.6.html">Android 1.6</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#DONUT}</td>
|
||||
<td><a href="{@docRoot}sdk/android-1.6-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td><a href="{@docRoot}about/versions/android-1.6-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-1.5.html">Android 1.5</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-1.5.html">Android 1.5</td>
|
||||
<td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td>
|
||||
<td><a href="{@docRoot}sdk/android-1.5-highlights.html">Platform Highlights</a></td></tr>
|
||||
<td><a href="{@docRoot}about/versions/android-1.5-highlights.html">Platform Highlights</a></td></tr>
|
||||
|
||||
<tr><td><a href="{@docRoot}sdk/android-1.1.html">Android 1.1</td>
|
||||
<tr><td><a href="{@docRoot}about/versions/android-1.1.html">Android 1.1</td>
|
||||
<td>2</td>
|
||||
<td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr>
|
||||
|
||||
@@ -360,7 +360,7 @@ Manager</strong>.</p>
|
||||
<p>To run your application against different platform versions in the emulator,
|
||||
create an AVD for each platform version that you want to test. For more
|
||||
information about AVDs, see <a
|
||||
href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a>. If
|
||||
href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>. If
|
||||
you are using a physical device for testing, ensure that you know the API Level
|
||||
of the Android platform it runs. See the table at the top of this document for
|
||||
a list of platform versions and their API Levels. </p>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=What is Android?
|
||||
page.title=App Framework
|
||||
@jd:body
|
||||
|
||||
<p>Android is a software stack for mobile devices that includes an operating
|
||||
@@ -10,7 +10,7 @@ footer.hide=1
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
left: 0;
|
||||
top: 472px;
|
||||
width: 450px;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
page.title=Progress and Activity
|
||||
header.title=Feedback
|
||||
@jd:body
|
||||
|
||||
<p>When an operation of interest to the user is taking place over a relatively long period of time,
|
||||
|
||||
@@ -63,8 +63,4 @@
|
||||
<div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div id="back-dac-section"><a href="<?cs var:toroot ?>index.html">Developers</a></div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
@@ -1,4 +1,4 @@
|
||||
page.title=
|
||||
page.title=Design
|
||||
header.hide=1
|
||||
footer.hide=1
|
||||
@jd:body
|
||||
@@ -10,7 +10,7 @@ footer.hide=1
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
left: 0;
|
||||
top: 472px;
|
||||
width: 280px;
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -10,7 +10,7 @@ footer.hide=1
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
left: 0;
|
||||
top: 492px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ files for further customization.
|
||||
|
||||
<ul>
|
||||
<li class="no-bullet with-icon tablet">
|
||||
<p>Action bar icons for phones and tablets should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
|
||||
<p>Action bar icons for phones should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@ footer.hide=1
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
left: 0;
|
||||
top: 402px;
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
366
docs/html/develop/index.jd
Normal file
366
docs/html/develop/index.jd
Normal file
@@ -0,0 +1,366 @@
|
||||
fullpage=true
|
||||
page.title=Develop
|
||||
header.hide=1
|
||||
carousel=1
|
||||
tabbedList=1
|
||||
@jd:body
|
||||
|
||||
<style>
|
||||
#noplayer-message {
|
||||
position:absolute;top:50%;left:0;width:100%;z-index:-1;text-align:center;display:none;
|
||||
}
|
||||
#player-frame object {z-index:1;}
|
||||
</style>
|
||||
|
||||
<div id="player-wrapper">
|
||||
<div id="player-frame">
|
||||
<div id="noplayer-message">
|
||||
<!-- busted flash player message -->
|
||||
Your video is supposed to appear here.<br/>
|
||||
Make sure you have the <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash® Player</a>.
|
||||
</div>
|
||||
<div id="player"><!-- Youtube embeds here... actually replaces this div --></div>
|
||||
<a class="close" onclick="$('#player-wrapper').hide()">close video</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap">
|
||||
<!-- Slideshow -->
|
||||
<div class="slideshow-container slideshow-develop col-16">
|
||||
<a href="" class="slideshow-prev">Prev</a>
|
||||
<a href="" class="slideshow-next">Next</a>
|
||||
<div class="frame">
|
||||
<ul>
|
||||
<li class="item carousel-home">
|
||||
<div class="col-8">
|
||||
<img
|
||||
src="http://1.bp.blogspot.com/-6qyjPxTuzv0/T6lde-Oq_fI/AAAAAAAABXc/zle7OFEGP44/s400/fddns%2Bcopy.png"
|
||||
class="play no-shadow no-transform" />
|
||||
</div>
|
||||
<div class="content-right col-6">
|
||||
<p class="title-intro">From the blog:</p>
|
||||
<h2>Using DialogFragments</h2>
|
||||
<p>In this post, I'll show how to use DialogFragments with the <a
|
||||
href="http://developer.android.com/reference/android/support/v4/app/DialogFragment.html">v4 support
|
||||
library</a> (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and
|
||||
return a result to the calling Activity using an interface.</p>
|
||||
<p><a
|
||||
href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html" class="button">Read
|
||||
more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="item carousel-home">
|
||||
<div class="col-8">
|
||||
<img
|
||||
src="http://1.bp.blogspot.com/-6K1kfNOdek8/T72bXvtTSQI/AAAAAAAABmw/kYzmJt0_328/s1600/google-play-subscriptions.png" class="play"></div>
|
||||
<div class="content-right col-6">
|
||||
<p class="title-intro">From the blog:</p>
|
||||
<h2>In-app Subscriptions in Google Play</h2>
|
||||
<p>Starting today, developers can use In-app Billing to sell monthly or annual
|
||||
subscriptions from inside of their apps. All subscriptions are auto-renewing, for every app and game
|
||||
and every type of subscription product.</p>
|
||||
<p><a class="button"
|
||||
href="http://android-developers.blogspot.com/2012/05/in-app-subscriptions-in-google-play.html">Read
|
||||
more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="item carousel-home">
|
||||
<div class="col-8">
|
||||
<img
|
||||
src="{@docRoot}images/home/developers_live.png" class="play"></div>
|
||||
<div class="content-right col-6">
|
||||
<h2>Learn what great apps are made of</h2>
|
||||
<p>Every week we host a live broadcast in which we review a collection of apps and games
|
||||
nominated by the creators. It's no-holds-barred and we tell you exactly what is flawed or
|
||||
fantastic in each app and how to make improvements.</p>
|
||||
<p><a href="" class="button" onclick="$('ul#DevelopersLive li:first
|
||||
a').click();return false;">Watch the latest review</a></p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="item carousel-home">
|
||||
<div class="col-8">
|
||||
<img style="margin-top:30px;width:300px"
|
||||
src="{@docRoot}images/home/ics-android.png" class="play no-shadow no-transform" />
|
||||
</div>
|
||||
<div class="content-right col-6">
|
||||
<h2>Ice Cream Sandwich</h2>
|
||||
<p>Android 4.0 brings handsets and tablets together with a unified
|
||||
design and a set of APIs for you to build a great user experience on all devices.
|
||||
For information about API changes in the latest release (API level 15),
|
||||
read the <a href='{@docRoot}about/versions/android-4.0.3.html'>platform notes</a> and <a
|
||||
href='{@docRoot}sdk/api_diff/15/changes.html'>diff report</a>.</p>
|
||||
<p><a class="button"
|
||||
href="{@docRoot}about/versions/android-4.0-highlights.html">Read the highlights</a></p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /End slideshow -->
|
||||
</div>
|
||||
<div class="wrap">
|
||||
<!-- news and feature feed -->
|
||||
<div class="feed col-8" style="margin-left:0">
|
||||
<ul class="feed-nav">
|
||||
<li class="active">DEVELOPER NEWS</li>
|
||||
<li>FEATURED DOCS</li>
|
||||
</ul>
|
||||
<div class="feed-container">
|
||||
<div class="feed-frame">
|
||||
<!-- DEVELOPER NEWS -->
|
||||
<ul>
|
||||
<li><a href="http://android-developers.blogspot.com/2012/04/faster-emulator-with-better-hardware.html">
|
||||
<div class="feed-image" style="background:url('../images/emulator-wvga800l.png') no-repeat 0 0">
|
||||
</div>
|
||||
<h4>A Faster Emulator with Better...</h4>
|
||||
<p>Today we’re thrilled to announce several significant improvements to the emulator, including a dramatic...</p>
|
||||
</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/2012/04/android-c2dm-client-login-key.html">
|
||||
<div class="feed-image" style="background:url('../images/develop/auth-code.png') no-repeat 0 0">
|
||||
</div>
|
||||
<h4>Android C2DM — Client Login key...</h4>
|
||||
<p>In the upcoming weeks, some of the older Client
|
||||
Login authentication keys will expire. If you generated the token you’re...</p>
|
||||
</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/2012/04/accessibility-are-you-serving-all-your.html">
|
||||
<div class="feed-image">
|
||||
</div>
|
||||
<h4>Accessibility</h4>
|
||||
<p>We recently published some new resources to help developers make their Android applications more accessible... </p>
|
||||
</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/2012/04/new-seller-countries-in-google-play.html">
|
||||
<div class="feed-image" style="background:url('http://developer.android.com/images/home/play_logo.png') no-repeat 0 0" >
|
||||
</div>
|
||||
<h4>New Seller Countries in Google Play</h4>
|
||||
<p>Over the past year we’ve been working to expand the list of
|
||||
countries and currencies from which Android developers...</p>
|
||||
</a></li>
|
||||
</ul>
|
||||
<!-- FEATURED DOCS -->
|
||||
<ul>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/index.html">
|
||||
<h4>Google Play In-app Billing</h4>
|
||||
<p>In-app Billing is a Google Play service that lets you sell digital content from inside your applications. You can sell products as standard in-app products (one-time purchase) or with subscriptions (recurring...</p>
|
||||
</a></li>
|
||||
<li><a href="{@docRoot}guide/topics/providers/contacts-provider.html">
|
||||
<h4>Contacts Provider</h4>
|
||||
<p>The Contacts Provider is a powerful and flexible Android component that manages the device's central repository of data about people. You can use it to build powerful social features...</p>
|
||||
</a></li>
|
||||
<li><a href="{@docRoot}training/efficient-downloads/index.html">
|
||||
<h4>Transferring Data Without Draining the Battery</h4>
|
||||
<p>This training class demonstrates the best practices for scheduling and executing downloads using techniques such as caching, polling, and prefetching.</p>
|
||||
</a></li>
|
||||
<li><a href="{@docRoot}training/backward-compatible-ui/index.html">
|
||||
<h4>Creating Backward-Compatible UIs</h4>
|
||||
<p>This training class demonstrates how to use UI components and APIs available in newer versions of Android in a backward-compatible way, ensuring that your application still runs on previous versions...</p>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /news and feature feed -->
|
||||
<!-- video feed -->
|
||||
<div class="feed col-8" style="margin-right:0">
|
||||
<ul class="feed-nav">
|
||||
<li class="active">DEVELOPERS LIVE</li>
|
||||
<li>VIDEO PLAYLISTS</li>
|
||||
</ul>
|
||||
<div class="feed-container">
|
||||
<div class="feed-frame">
|
||||
<ul id="DevelopersLive">
|
||||
</ul>
|
||||
<ul id="VideoPlaylists">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /video feed -->
|
||||
</div>
|
||||
|
||||
<br class="clearfix"/>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="//swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
/* Load a video into the player box.
|
||||
* @param id The YouTube video ID
|
||||
* @param title The video title to display in the player box (character escaped)
|
||||
* @param autoplay Whether to automatically play the video
|
||||
*/
|
||||
function loadVideo(id, title, autoplay) {
|
||||
swfobject.embedSWF('//www.youtube.com/v/' + id + '&rel=1&border=0&fs=1&autoplay=' +
|
||||
(autoplay?1:0), 'player', '525', '330', '9.0.0', false, false, {allowfullscreen: 'true'});
|
||||
$("#videoPlayerTitle").html("<h2>" + unescape(title) + "</h2>");
|
||||
$("#player-wrapper").show();
|
||||
setTimeout(function(){$('#noplayer-message').show()}, 2000);
|
||||
}
|
||||
|
||||
/* Draw all videos from a playlist into a 'videoPreviews' list
|
||||
* @param data The feed data returned from the youtube request
|
||||
*/
|
||||
function renderVideoPlaylists(data) {
|
||||
var MAX_LIST_DESC_LENGTH = 130; // the length at which we will trim the description
|
||||
var MAX_VIDEO_DESC_LENGTH = 100; // the length at which we will trim the description
|
||||
var MAX_LIST_LENGTH = 4; // number of videos to put in the list
|
||||
var feed = data.feed;
|
||||
var entries = feed.entry || [];
|
||||
var playlistId = feed.yt$playlistId.$t;
|
||||
|
||||
var $ulVideos = $('<ul style="display:none"/>');
|
||||
var summary = feed.media$group.media$description != null ? feed.media$group.media$description.$t : feed.subtitle.$t;
|
||||
|
||||
var $liPlaylist = $('<li class="playlist"></li>');
|
||||
var $aPlaylist = $('<a href="" onclick="togglePlaylist(this);return false;"></a>');
|
||||
$liPlaylist.append($aPlaylist);
|
||||
$aPlaylist.append('<h4>' + feed.title.$t + '</h4>');
|
||||
|
||||
var playlistDescription = summary.substr(0, MAX_LIST_DESC_LENGTH);
|
||||
playlistDescription += playlistDescription.length == MAX_LIST_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
|
||||
$aPlaylist.append('<p>' + playlistDescription + '</p>');
|
||||
|
||||
// Loop through each entry (each video) and add it to the 'videoPreviews' list
|
||||
var length = feed.entry.length < MAX_LIST_LENGTH ? feed.entry.length : MAX_LIST_LENGTH; // max of 4 videos per list
|
||||
for (var i = 0; i < length; i++) {
|
||||
var entry = entries[i];
|
||||
|
||||
var title = entry.title.$t;
|
||||
var id = entry.media$group.yt$videoid.$t;
|
||||
var thumbUrl = entry.media$group.media$thumbnail[0].url;
|
||||
var fullDescription = entry.media$group.media$description.$t;
|
||||
var playerUrl = entry.media$group.media$content[0].url;
|
||||
|
||||
var shortDescription = fullDescription.substr(0, MAX_VIDEO_DESC_LENGTH);
|
||||
shortDescription += shortDescription.length == MAX_VIDEO_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
|
||||
|
||||
var img = $('<img src="' + thumbUrl + '" width="60" height="45"/>');
|
||||
var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
|
||||
var pShortDescription = $('<p>' + shortDescription + '</p>');
|
||||
var h5Title = "<h5>" + title + "</h5>";
|
||||
var li = $('<li class="playlist-video"/>');
|
||||
|
||||
li.append(a);
|
||||
a.append(img).append(h5Title).append(pShortDescription);
|
||||
|
||||
$ulVideos.append(li);
|
||||
|
||||
// use the first entry's thumbnail for the playlist
|
||||
if (i == 0) {
|
||||
$aPlaylist.prepend('<img src="' + thumbUrl + '" width="120" height="90"/>');
|
||||
}
|
||||
}
|
||||
|
||||
if (feed.entry.length > MAX_LIST_LENGTH) {
|
||||
// add item to go to youtube for playlist
|
||||
$ulVideos.append('<li class="more"><a href="//www.youtube.com/playlist?list=PL' + playlistId + '">More »</a></li>');
|
||||
}
|
||||
|
||||
$liPlaylist.append($ulVideos);
|
||||
$('#VideoPlaylists').append($liPlaylist);
|
||||
}
|
||||
|
||||
|
||||
function renderDevelopersLivePlaylist(data) {
|
||||
|
||||
var MAX_DESC_LENGTH = 125; // the length at which we will trim the description
|
||||
var feed = data.feed;
|
||||
var entries = feed.entry || [];
|
||||
var playlistId = feed.yt$playlistId.$t;
|
||||
|
||||
var ul = $('#DevelopersLive');
|
||||
|
||||
// Loop through each entry (each video) and add it to the '#DevelopersLive' list
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var entry = entries[i];
|
||||
|
||||
var title = entry.title.$t;
|
||||
var id = entry.media$group.yt$videoid.$t;
|
||||
var thumbUrl = entry.media$group.media$thumbnail[0].url;
|
||||
var fullDescription = entry.media$group.media$description.$t;
|
||||
var playerUrl = entry.media$group.media$content[0].url;
|
||||
var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH);
|
||||
shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
|
||||
|
||||
var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>');
|
||||
var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
|
||||
var pShortDescription = $('<p>' + shortDescription + '</p>');
|
||||
var h4Title = "<h4>" + title + "</h4>";
|
||||
var li = $('<li/>');
|
||||
|
||||
li.append(a);
|
||||
a.append(img).append(h4Title).append(pShortDescription);
|
||||
|
||||
ul.append(li);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* This 'playlist' object defines the playlist IDs for each tab.
|
||||
* Each name inside 'playlist' corresponds to class names for the tab that the playlists belong to (eg: "googleioTab" and "googleioBox" divs).
|
||||
* Each string in 'ids' is the ID of a YouTube playlist that belongs in the corresponding tab.
|
||||
*/
|
||||
var playlists = {
|
||||
'googleio' : {
|
||||
'ids': ["734A052F802C96B9"]
|
||||
},
|
||||
'fridayreview' : {
|
||||
'ids': ["B7B9B23D864A55C3"]
|
||||
},
|
||||
'officehours' : {
|
||||
'ids': ["7383D9AADA6E6D55"]
|
||||
},
|
||||
'about' : {
|
||||
'ids': ["D7C64411AF40DEA5"]
|
||||
}
|
||||
};
|
||||
|
||||
/* Request the playlist feeds from YouTube */
|
||||
function showVideosPlaylists() {
|
||||
for (var x in playlists) {
|
||||
var ids = playlists[x].ids;
|
||||
for (var i in ids) {
|
||||
var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
|
||||
+ ids[i] +
|
||||
"?v=2&alt=json-in-script&max-results=50&callback=renderVideoPlaylists&orderby=published'><\/script>";
|
||||
$("body").append(script);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Request the playlist feeds from YouTube */
|
||||
function showDevelopersLivePlaylist() {
|
||||
var playlistId = "B7B9B23D864A55C3"; /* The Friday Review */
|
||||
var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
|
||||
+ playlistId +
|
||||
"?v=2&alt=json-in-script&max-results=10&callback=renderDevelopersLivePlaylist&orderby=published'><\/script > ";
|
||||
$("body").append(script);
|
||||
}
|
||||
|
||||
|
||||
function togglePlaylist(listLink) {
|
||||
var $list = $(listLink).parent();
|
||||
var $ul = $list.find('ul');
|
||||
if ($ul.is(":visible")) {
|
||||
$ul.slideUp(function() {
|
||||
$list.css({'height':'inherit'});
|
||||
});
|
||||
} else {
|
||||
$list.closest('ul').find('li.playlist').find('ul').slideUp();
|
||||
$ul.slideDown();
|
||||
$list.css({'height':'auto'});
|
||||
}
|
||||
}
|
||||
|
||||
showDevelopersLivePlaylist();
|
||||
showVideosPlaylists();
|
||||
</script>
|
||||
112
docs/html/distribute/distribute_toc.cs
Normal file
112
docs/html/distribute/distribute_toc.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
<ul id="nav">
|
||||
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/index.html">
|
||||
<span class="en">Google Play</span></a>
|
||||
</div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/about/visibility.html">
|
||||
<span class="en">Visibility</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/about/monetizing.html">
|
||||
<span class="en">Monetizing</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/about/distribution.html">
|
||||
<span class="en">Distribution</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">
|
||||
<span class="en">Publishing</span></a>
|
||||
</div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/register.html">
|
||||
<span class="en">Get Started</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/console.html">
|
||||
<span class="en">Developer Console</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/preparing.html">
|
||||
<span class="en">Publishing Checklist</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
|
||||
<span class="en">App Quality</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- <li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/developer-console.html">
|
||||
<span class="en">The Developer Console</span>
|
||||
</a>
|
||||
</div>
|
||||
<ul>
|
||||
<li class="nav-section"><a href="<?cs var:toroot ?>distribute/googleplay/register.html">
|
||||
<span class="en">Get Started</span></a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/distribution-controls.html">
|
||||
<span class="en">Managing Distribution</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/pricing-billing.html">
|
||||
<span class="en">Pricing and Billing</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/app-data.html">
|
||||
<span class="en">Reviewing App Data</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/advanced-options.html">
|
||||
<span class="en">Advanced Options</span>
|
||||
</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/publishing.html">
|
||||
<span class="en">Publishing and Updating</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</li> end of Developer Console -->
|
||||
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">
|
||||
<span class="en">Promoting</span></a>
|
||||
</div>
|
||||
<ul>
|
||||
<!-- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/product-pages.html">
|
||||
<span class="en">Your Product Pages</a></li>
|
||||
-->
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/linking.html">
|
||||
<span class="en">Linking to Your Products</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/badges.html">
|
||||
<span class="en">Google Play Badges</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
|
||||
<span class="en">Brand Assets and Guidelines</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!--
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/after.html">
|
||||
<span class="en">After Launch</span></a>
|
||||
</div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/errors.html.html">Reviewing Errors</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/reviews.html">Tracking User Reviews</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/supporting-users.html">Supporting Users</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
-->
|
||||
|
||||
<!--
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/strategies/index.html">
|
||||
<span class="en">Strategies</span></a>
|
||||
</div>
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/featuring.html">Featuring</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">App Quality</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
-->
|
||||
<li class="nav-section">
|
||||
<div class="nav-section-header empty">
|
||||
<a href="<?cs var:toroot ?>distribute/open.html">
|
||||
<span class="en">Open Distribution</span>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
127
docs/html/distribute/googleplay/about/distribution.jd
Normal file
127
docs/html/distribute/googleplay/about/distribution.jd
Normal file
@@ -0,0 +1,127 @@
|
||||
page.title=Distribution Control
|
||||
page.metaDescription=Reach the users you want, whenever you want.
|
||||
|
||||
@jd:body
|
||||
|
||||
<p>Deliver your apps to the users you want, on the devices you want, on <em>your</em> schedule. </p>
|
||||
|
||||
<h2 id="instant">Instant publishing, instant updates</h2>
|
||||
|
||||
<p>On Google Play, you can publish your products to customers instantly. Just
|
||||
upload and configure your product in the <span style="font-weight:500;">Google Play Android Developer Console</span>
|
||||
and press the Publish button—your app appears in the store listings within
|
||||
hours, not weeks. There are no delays for code or policy reviews, so you keep
|
||||
complete control over your release schedule.</p>
|
||||
|
||||
<p>Once your app is published, you can update it as often as you want. You can
|
||||
change prices, configuration, and distribution options at any time through the
|
||||
Google Play Android Developer Console, without needing to update your app
|
||||
binary.</p>
|
||||
|
||||
<p>Later, as you add features or address code issues, you can publish an updated
|
||||
binary at any time. Google Play makes the new version available immediately and
|
||||
notifies existing customers that an update is ready for download. To streamline
|
||||
the rollout across your customer base, Google Play also lets users accept
|
||||
automatic updates of your app, so that your updates are delivered and installed
|
||||
s soon as you publish them.</p>
|
||||
|
||||
<h2>Reaching the customers you want</h2>
|
||||
|
||||
<p>Google Play does more than connect your app with users—it helps you
|
||||
reach the broadest possible distribution across the Android ecosystem, while
|
||||
making sure that your app is only available to the audience that you want to
|
||||
reach.</p>
|
||||
|
||||
<div style="float:right;margin-left:18px;border:1px solid #DDD;margin:1.5em;">
|
||||
<img src="{@docRoot}images/gp-dc-countries.png" style="width:400px;padding:4px;margin-bottom:0;">
|
||||
</div>
|
||||
|
||||
<h3 id="geotargeting">Geographic targeting</h3>
|
||||
|
||||
<p>You can use controls in the Google Play Android Developer Console to easily
|
||||
manage the geographic distribution of your apps, without any changes in your
|
||||
application binary. You can specify which countries and territories you want to
|
||||
distribute to, and even which carriers (for some countries). </p>
|
||||
|
||||
<p>When users visit the store, Google Play makes sure that they are in one of
|
||||
your targeted countries before downloading your app. You can change your country
|
||||
and carrier targeting at any time just by saving changes in the Google Play
|
||||
Android Developer Console</p>
|
||||
|
||||
<div style="float:right;margin-left:18px;border:1px solid #DDD;margin:1.5em;">
|
||||
<img src="{@docRoot}images/gp-supported-dev-requirements.png"
|
||||
style="width:400px;padding:4px;margin-bottom:0;">
|
||||
</div>
|
||||
|
||||
<h3 id="captargeting">Capabilities targeting</h3>
|
||||
|
||||
<p>Google Play also lets you control distribution according to device features
|
||||
or capabilities that your app depends on. There are several types of
|
||||
dependencies that the app can define in its manifest, such as hardware features,
|
||||
OpenGL texture compression formats, libraries, Android platform versions, and
|
||||
others.</p>
|
||||
|
||||
<p>When you upload your app, Google Play reads the dependencies and sets up any
|
||||
necessary distribution rules. For technical information about declaring
|
||||
dependencies, read <a href="{@docRoot}guide/google/play/filters.html">Filters on
|
||||
Google Play</a>. </p>
|
||||
|
||||
<p>For pinpoint control over distribution, Google Play lets you see all of the
|
||||
devices your app is available to based on its dependencies (if any). From the
|
||||
Google Play Android Developer Console, you can list the supported devices and
|
||||
even exclude specific devices if needed.</p>
|
||||
|
||||
<h2 id="stats">Statistics for analyzing installs</h2>
|
||||
|
||||
<p>Once you’ve published your app, Google Play makes it easy to see how it’s
|
||||
doing. The Google Play Android Developer Console gives you access to a variety
|
||||
of anonymized metrics that show your app’s installation performance measured by
|
||||
unique users and unique devices, across a variety of different dimensions such
|
||||
as country, Android version, device, country, carrier, and app version.</p>
|
||||
|
||||
<div style="border:1px solid #DDD;margin:1.5em;margin-left:8%;width:608px">
|
||||
<img src="{@docRoot}images/gp-dc-stats-mini.png"
|
||||
style="width:600px;padding:4px;margin-bottom:0;">
|
||||
</div>
|
||||
<p>You can also view your installation data on timeline charts, for all metrics and
|
||||
dimensions. At a glance, these charts highlight your app’s installation peaks
|
||||
and longer-term trends, which you can correlate to promotions, app improvements,
|
||||
or other factors. You can even focus in on data inside a dimension by
|
||||
highlighting specific data points (such as individual platform versions or
|
||||
languages) on the timeline.</p>
|
||||
|
||||
<p>So that you can “take your data with you”, you can download all of your
|
||||
installation data as a CSV file for viewing in the business program of your
|
||||
choice.</p>
|
||||
|
||||
|
||||
<h2 id="advanced">Advanced delivery options</h2>
|
||||
|
||||
<p>Google Play offers convenient options for managing how your apps are
|
||||
delivered to users.</p>
|
||||
|
||||
<p>In most cases, it’s easy to create an app that supports all of your targeted
|
||||
screen sizes and platform versions from a single APK. Distributing a single APK
|
||||
to all of your users is a highly recommended approach, because it’s the easiest
|
||||
way to manage and maintain the app. If you need to deliver a different APK to
|
||||
devices, Google Play provides a way to do that. </p>
|
||||
|
||||
<p>An option called Multiple APK support lets you create multiple APK packages
|
||||
that use the same package name but differ in their OpenGL texture compression
|
||||
formats, screen-size support, or Android platform versions supported. You can
|
||||
upload all of the APKs to Google Play under a single product listing and Google
|
||||
Play selects the best APK to deliver to users, based on the characteristics of
|
||||
their devices. </p>
|
||||
|
||||
<p>The APK Expansion Files option lets you upload up to two secondary downloads
|
||||
for each published APK, including multiple APKs. Each of the two expansion files
|
||||
can be up to 2GB each and can contain any type of code or assets. When you
|
||||
upload the expansion files, Google Play hosts them for free and handles the
|
||||
download of the files as part of the normal APK installation.</p>
|
||||
|
||||
<h2 id="licensing">Protecting your App</h2>
|
||||
|
||||
<p>To help you protect your application against piracy, Google Play offers a
|
||||
licensing service that you can implement in your app. It’s a network-based
|
||||
service that lets an application query a trusted Google Play licensing server to
|
||||
determine whether the application is licensed to the current device user.</p>
|
||||
152
docs/html/distribute/googleplay/about/monetizing.jd
Normal file
152
docs/html/distribute/googleplay/about/monetizing.jd
Normal file
@@ -0,0 +1,152 @@
|
||||
page.title=Flexible Monetizing and Business Tools
|
||||
page.metaDescription=
|
||||
|
||||
@jd:body
|
||||
|
||||
<div style="float:right;margin-left:18px;padding:1.5em;">
|
||||
<img src="{@docRoot}images/gp-details-ww.png" style="width:180px">
|
||||
<img src="{@docRoot}images/gp-details-ww-purchase.png" style="width:180px">
|
||||
</div>
|
||||
|
||||
<p>Sell your app in more than 130 countries. Flexible monetization options with
|
||||
in-app purchase, subscriptions, and more. </p>
|
||||
|
||||
<h2>Streamlined purchase flow for users</h2>
|
||||
|
||||
<p>When users find your app, they can purchase it instantly with a streamlined,
|
||||
consistent purchasing process and convenient payment methods.</p>
|
||||
|
||||
<h3>Instant purchase from device or web</h3>
|
||||
|
||||
<p>Google Play makes it fast and easy for your customers to buy your products,
|
||||
whether from a phone, a tablet, or a desktop computer. When users find an app or
|
||||
game that they want to buy, they can purchase it in as few as two steps—one
|
||||
to initiate the purchase and another to accept purchase details and permissions
|
||||
and complete the transaction.</p>
|
||||
|
||||
<p>Google Play's convenient purchase experience is the same familiar process for
|
||||
all products everywhere across Google Play—apps, games, in-app products and
|
||||
subscriptions, and other digital content.</p>
|
||||
|
||||
<h3 id="cloud-connected-purchase">Cloud-connected</h3>
|
||||
|
||||
<p>Purchasing is even more convenient on Google Play because it’s
|
||||
cloud-connected. Users can find and purchase your products from anywhere—from
|
||||
their Android phones or using any web browser on any host computer. </p>
|
||||
|
||||
<p>When users find an app or game they want to buy, they purchase it and download
|
||||
it instantly to their devices over-the-air. Users who sign in to the Google Play web site can also buy apps and games
|
||||
and push them instantly to their phones, tablets, or other devices. Google Play
|
||||
manages the application download.</p>
|
||||
|
||||
<h3 id="payment-methods">Convenient payment options</h3>
|
||||
|
||||
<p>Users can purchase your products on Google Play using several convenient
|
||||
payment methods—credit card, Direct Carrier Billing, and Google Play balance.</p>
|
||||
|
||||
<p><span style="font-weight:500">Credit card</span> is the most common method of payment. Users can pay using any credit card
|
||||
that they’ve registered in Google Play. To make it easy for users to get started,
|
||||
registration is offered as a part of initial device setup process.</p>
|
||||
|
||||
<div class="sidebox-wrapper" style="float:right;">
|
||||
<div class="sidebox">
|
||||
<h2>Payment methods on Google Play</h2>
|
||||
<ul>
|
||||
<li>Credit Card</li>
|
||||
<li>Direct Carrier Billing</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Subscribers on many popular carrier networks worldwide can charge purchases
|
||||
to their monthly mobile phone bills through <span style="font-weight:500">Direct
|
||||
Carrier Billing</span>. This form of payment is convenient and simple and is
|
||||
extremely popular in regions where credit cards are less common. More than 75
|
||||
million users in key markets around the world can purchase
|
||||
your products through Direct Carrier Billing. Many more will get the option in
|
||||
the months ahead.</p>
|
||||
|
||||
<p>The payment methods available to users worldwide may vary, based on
|
||||
location, carrier network, and other factors.</p>
|
||||
|
||||
<div style="float:left;margin-right:2em;margin-top:1em;width:220px;">
|
||||
<img src="{@docRoot}images/gp-subs.png" style="width:220px">
|
||||
</div>
|
||||
|
||||
<h2 id="billing-models" style="margin-top:1.5em;">Choice of billing models</h2>
|
||||
|
||||
<p>Google Play gives you a choice of billing models to let you monetize your
|
||||
products. </p>
|
||||
|
||||
<p>You can offer apps to all users for free, or
|
||||
you can set an initial price for the app, paid before download. You can also
|
||||
sell one-time purchases and auto-renewing subscriptions from inside the app, and
|
||||
you can take advantage of AdMob integration to monetize your app through
|
||||
targeted advertising.</p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>Billing models on Google Play</h2>
|
||||
<ul>
|
||||
<li>Free (no charge to download)</li>
|
||||
<li>Priced (user charged before download)</li>
|
||||
<li>In-App products and subscriptions</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>You can combine these billing models in different ways, based on your business
|
||||
needs or market conditions. </p>
|
||||
|
||||
<p>For example, you can use a freemium or ad-supported model by distributing
|
||||
your app for free and selling in-app products or advertising. Alternatively you
|
||||
could set a nominal price for your app at download and sell value add-ons,
|
||||
gameplay levels, and upgrades as in-app products. The only restriction is that
|
||||
free apps must remain free (to download) for the life of the app.</p>
|
||||
|
||||
<h2 id="buyer-currency" style="margin-top:1.5em;">Flexible pricing in the currencies of your customers</h2>
|
||||
|
||||
<div style="float:right;margin-left:18px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-buyer-currency.png" style="width:240px;padding:4px;margin-bottom:0;">
|
||||
</div>
|
||||
|
||||
<p>Google Play gives you complete control over how you price your products. You
|
||||
can set prices in more than 130 countries, for millions of
|
||||
users around the world. When users browse your app’s product page or initiate a
|
||||
purchase, Google Play shows them the price they will be charged <em>in
|
||||
their local currency</em>.</p>
|
||||
|
||||
<p>You can set and adjust your prices at any time, in any available currency.
|
||||
Your prices in available currencies are independent, so you can adjust one
|
||||
price without affecting others. This gives you the ability to run
|
||||
short-term promotions and discounts in specific countries and more easily
|
||||
manage shifts in exchange rates.</p>
|
||||
|
||||
<p>You can set and manage prices for your apps and in-app products from the
|
||||
Google Play Android Developer Console.</p>
|
||||
|
||||
<h2 id="payouts">Monthly payouts in your local currency</h2>
|
||||
|
||||
<p>To sell products in Google Play, all you have to do is register for a Google
|
||||
Checkout merchant account and link it to your Google Play Android Developer
|
||||
Console account (see <a
|
||||
href="{@docRoot}distribute/googleplay/publish/register.html">Get Started with
|
||||
Publishing</a> for details). Once you’ve set up your account and published your
|
||||
apps, Google Play makes monthly payouts of sales proceeds to your merchant
|
||||
account, in your local currency.</p>
|
||||
|
||||
<h2 id="reporting">Detailed financial reporting</h2>
|
||||
|
||||
<p>When you sell priced apps or in-app products on Google Play, you get a
|
||||
variety of financial reports to help you track and project sales, optimize your
|
||||
marketing campaigns, and support your customers.</p>
|
||||
|
||||
<p>To help you keep up-to-date with the current activity, you can download daily
|
||||
reports summarizing recent purchases of your products. The reports include
|
||||
estimated sales amounts and include a variety of other data for each
|
||||
transaction.</p>
|
||||
|
||||
<p>At the close of the month, you can download a complete sales report that
|
||||
gives you the final details of all transactions that closed in the month,
|
||||
including the payout amounts and other data. Additional financial reports are
|
||||
available in your Google Checkout merchant account.</p>
|
||||
247
docs/html/distribute/googleplay/about/visibility.jd
Normal file
247
docs/html/distribute/googleplay/about/visibility.jd
Normal file
@@ -0,0 +1,247 @@
|
||||
page.title=Visibility for Your Apps
|
||||
page.metaDescription=
|
||||
|
||||
@jd:body
|
||||
|
||||
<div style="float:right;margin:0px 0px 24px 0px;">
|
||||
<img src="{@docRoot}images/gp-tab.png" style="width:420px" style>
|
||||
</div>
|
||||
|
||||
<p>A billion downloads a month and growing. Get your apps in front of millions
|
||||
of users at Google's scale. </p>
|
||||
|
||||
|
||||
<h2 id="reach">Worldwide reach, rapid growth</h2>
|
||||
|
||||
<p>Google Play is the premier store for distributing Android apps. It’s
|
||||
preinstalled on more than 300 million devices worldwide, a number growing by
|
||||
almost a million every day. Android users have downloaded
|
||||
more than <strong style="text-wrap:none;">15 billion apps</strong> from Google
|
||||
Play, growing at a rate of more than 1 billion per month.</p>
|
||||
|
||||
<p>When you publish on Google Play, you put your apps in front of Android's huge
|
||||
base of active customers, in more than 130 countries and territories across the
|
||||
world. </p>
|
||||
|
||||
<p>Google Play is a central part of the Android experience. New users
|
||||
personalize their devices with apps, games, and other Google Play content.
|
||||
Existing users return regularly to see what's trending and new. Downloading new
|
||||
apps is extremely convenient and fast— Google Play pushes apps to the
|
||||
user's devices instantly, over the air. No cable or sync is ever needed.</p>
|
||||
|
||||
<div style="float:left;margin:0px 20px 0px 0px;width:374px;">
|
||||
<div style="width:378px;padding:2px;">
|
||||
<img src="{@docRoot}images/gp-growth-downloads.png" style="width:600px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span
|
||||
style="font-weight:500;">Growth in app consumption</span>: Users download more than
|
||||
1 billion apps from Google Play each month.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p>Google Play is also a top destination for visitors from the the web. Anyone
|
||||
with a browser can explore everything that Google Play has to offer from its <a
|
||||
href="http://play.google.com/store">web site</a>. Android users can even buy and
|
||||
install the apps they want and Google Play pushes them automatically to their
|
||||
devices over the air. </p>
|
||||
|
||||
<p>The accessiblility and convenience of the Google Play web
|
||||
site give you new ways to drive traffic to your products from online ads, web
|
||||
search, cross-linking, and more.</p>
|
||||
</div>
|
||||
|
||||
<div style="clear:both;">
|
||||
<h2>Built for app discovery</h2>
|
||||
|
||||
<p>Google Play is designed to connect users with great apps and games. It
|
||||
provides key channels to help your app get noticed and gain traction in the
|
||||
marketplace.</p>
|
||||
|
||||
<h3 id="ratings">User ratings and reviews</h3>
|
||||
|
||||
<p>When you develop a great app, Android users show their appreciation through
|
||||
ratings and reviews. They rate your app (out of 5 stars) after downloading it
|
||||
and can post a short description of their experience. When other users are
|
||||
considering your app, they look at the ratings and reviews as key benchmarks of
|
||||
the app’s quality. </p>
|
||||
|
||||
</div>
|
||||
|
||||
<p>Your app’s rating is one of the most important factors influencing its
|
||||
ranking in the various lists and search results in Google Play. It's also one of
|
||||
the key signals that the editorial staff looks for, when curating apps and games
|
||||
for promotion in the store.</p>
|
||||
|
||||
<div style="border:1px solid #DDD;padding:1px;margin-left:110px;width:504px;">
|
||||
<img src="{@docRoot}images/gp-rating-web.png" style="width:500px;padding:0;margin:0;">
|
||||
</div>
|
||||
|
||||
<h3 id="category" stdle="padding-top:2em;">Category browsing</h3>
|
||||
|
||||
<p>When you publish an app in Google Play, you pick the category in which you
|
||||
want users to find your app. More than 30 categories are available. Inside each
|
||||
category, apps are ranked based on a combination of ratings, reviews, downloads,
|
||||
country, and other factors. Many popular categories also start with a collection
|
||||
of featured apps selected by the Google Play editorial staff.</p>
|
||||
|
||||
<div style="clear:both;margin-top:2em;margin-left:10%;width:560px;">
|
||||
<div style="clear:both;margin-top:2em;">
|
||||
<img src="{@docRoot}images/gpp-cat-feature280-puzzle.png" style="width:180px">
|
||||
<img src="{@docRoot}images/gpp-cat-feature280-photo.png" style="width:180px">
|
||||
<img src="{@docRoot}images/gpp-cat-feature280-sports.png" style="width:180px">
|
||||
</div>
|
||||
<p class="image-caption"><span style="font-weight:500;">Featuring in
|
||||
categories</span>: Most app and game categories include a featured list curated
|
||||
by the editorial team.</p>
|
||||
</div>
|
||||
|
||||
<h3 id="search">Search</h3>
|
||||
|
||||
<p>Search on Google Play lets users pinpoint an app or game quickly. Search uses
|
||||
powerful heuristics to suggest terms as the user types, and it offers direct
|
||||
links to apps as suggestions. In results, users find the most relevant, most
|
||||
popular apps at the top. </p>
|
||||
|
||||
<div style="float:left;margin:12px 24px 0px 0px;">
|
||||
<img src="{@docRoot}images/gp-top-new-paid.png" style="width:250px">
|
||||
</div>
|
||||
|
||||
<h3 id="top-charts" style="padding-top:1em">Top charts and lists</h3>
|
||||
|
||||
<p>Top charts keep users in touch with what’s popular and trending with Android
|
||||
users, right from the Apps and Games home pages. The charts are generated
|
||||
several times each day based on recent download activity, keeping them fresh and
|
||||
allowing new apps to move upward in the charts. To make the charts as relevant
|
||||
as possible for users across the world, they are also country-specific.</p>
|
||||
|
||||
<p>As your apps get traction and build momentum in downloads and ratings,
|
||||
they’ll climb one or more of the top charts and gain even more exposure.</p>
|
||||
|
||||
<div>
|
||||
<table style="width:440px">
|
||||
<tr>
|
||||
<td style="width:100px">Top Free</td><td>Free apps and games</td></tr>
|
||||
<td style="width:140px">Top Paid</td><td>Priced apps and games</td></tr>
|
||||
<td>Top New Free</td><td>Less than 30 days old</td></tr>
|
||||
<td>Top New Paid</td><td>Less than 30 days old</td></tr>
|
||||
<td>Top Grossing</td><td>Gross proceeds, free or priced</td></tr>
|
||||
<td>Best Selling</td><td>Popular priced games</td></tr>
|
||||
<td>Trending</td><td>New arrivals growing quickly in installs</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="clear:both">
|
||||
<h4 id="featured" style="padding-top:2.5em;">Featured, Staff Picks, Collections,
|
||||
and Badges</h4>
|
||||
|
||||
|
||||
<div style="float:right;margin-left:18px;">
|
||||
<img src="{@docRoot}images/gp-apps-home.png" style="width:180px">
|
||||
<img src="{@docRoot}images/gp-games-home.png" style="width:180px">
|
||||
</div>
|
||||
|
||||
<p>The Google Play editorial team is dedicated to bringing the best apps to the
|
||||
attention of users. It constantly reviews apps from across Google Play to find
|
||||
not only the biggest apps and games, but also the “diamonds in the rough” that
|
||||
they want more people to see. </p>
|
||||
|
||||
<p>When the team finds great apps and games they use the <em>Featured</em>,
|
||||
<em>Staff Picks</em>, and other collections to promote them. Any one of those
|
||||
can give your apps dramatically higher visibility and market penetration.</p>
|
||||
|
||||
<p>You can’t nominate your app for featuring or pay for a promotional slot,
|
||||
because the editorial team wants to show the best apps and give the same chances
|
||||
to all developers. However, if you build an app that users love and that looks
|
||||
great on Android devices, the editorial team will notice. <!--In some cases,
|
||||
they will reach out to you before your app is featured to make sure that your
|
||||
app will be at its best during featuring.</p> -->
|
||||
</div>
|
||||
|
||||
<h4>Featured and Staff Picks</h4>
|
||||
|
||||
<p>Each week the the Google Play editorial staff selects a new set of apps to
|
||||
promote in its popular <em>Featured</em> and <em>Staff Picks</em> collections.
|
||||
</p>
|
||||
|
||||
The <em>Featured</em> collections highlight the latest and greatest app and game
|
||||
titles available for Android. Category featuring highlights the best and most
|
||||
popular apps in the top categories.
|
||||
|
||||
<em>Staff Picks</em> collects all recently featured apps and games on Google
|
||||
Play. To better reach tablet users, there’s a special <em>Staff Picks</em>
|
||||
collection that highlights the best apps for Android tablets.</p>
|
||||
|
||||
<div style="float:left;margin-right:18px;">
|
||||
<img src="{@docRoot}images/gp-collectibles.png" stydle="width:180px">
|
||||
|
||||
</div>
|
||||
|
||||
<h4>App collections</h4>
|
||||
|
||||
<p>From time to time the editorial staff puts together a collection of apps and
|
||||
games based on a theme or seasonal event. The collections are popular with
|
||||
customers because they are timely and relevant, and they provide a new way to
|
||||
showcase great Android apps to users.</p>
|
||||
|
||||
<p>The editorial staff chooses apps for collection promotions in a similar way
|
||||
as for featuring—high-quality apps that show the best of Android on phones
|
||||
and tablets. For collections the staff also looks for apps that can make an
|
||||
interesting or unique contribution to the collection as a whole. </p>
|
||||
|
||||
<h4><img style="margin-right:.25em;margin-bottom:.5em;"
|
||||
src="{@docRoot}images/editorschoice_ann.png"> EDITORS' CHOICE</h4>
|
||||
|
||||
<p><em>Editors’ Choice</em> is a curated collection of apps that highlights some
|
||||
of the very best apps available on Android. These apps are chosen for high
|
||||
quality and great UI, long-term popularity, and innovative use of Android
|
||||
features.</p>
|
||||
|
||||
<p>Apps chosen for <em>Editors’ Choice</em> also receive a badge that is
|
||||
displayed wherever the app name is seen in Google Play.</p>
|
||||
|
||||
<h4><img style="margin-right:.25em;margin-bottom:.5em;"
|
||||
src="{@docRoot}images/topdev_ann.png"> TOP DEVELOPER</h4>
|
||||
|
||||
<p>Top Developer is a badge recognizing established, respected developers for
|
||||
their commitment to launching high-quality and innovative apps on
|
||||
Android. The Google Play editorial staff selects developers awards a Top
|
||||
Developer badge from time to time, based on the cumulative work of the
|
||||
developer.</p>
|
||||
|
||||
<p>The Top Developer badge appears next to the developer name wherever it is
|
||||
displayed in Google Play. For a developer, the badge means long-term recognition
|
||||
of all of your apps. For users, the badge signifies an additional level of trust
|
||||
and confidence in your products.</p>
|
||||
|
||||
<h3 id="details">Rich, colorful product pages</h3>
|
||||
|
||||
<p>In Google Play, your app’s storefront is its <em>product details page</em>
|
||||
— a rich and colorful page that lets you promote your app, highlight its
|
||||
ratings and reviews, and show what your app can do.
|
||||
|
||||
<p>Your product details page is the one page where your users come to find out
|
||||
everything about your app. When they see your app listed in search results, top
|
||||
charts, category listings, and collections, one tap takes them directly to your
|
||||
product details page.</p>
|
||||
|
||||
<div style="float:right;margin-left:10px;">
|
||||
<img src="{@docRoot}images/gp-details-pages-magicpiano.png" style="width:500px">
|
||||
</div>
|
||||
|
||||
<p>You can manage your product details page through the <span
|
||||
style="font-weight:500">Google Play Android Develeper Console</span>, from any
|
||||
web browser. Just sign in, upload or update your brand assets, and enter your
|
||||
product details in the languages of your markets. </p>
|
||||
|
||||
<p>When you publish, Google Play adds your app’s ratings, reviews, links to your
|
||||
other products, and more, and makes sure your product details page looks great
|
||||
on phones, tablets, or in a web browser.</p>
|
||||
|
||||
<p>You can link web users directly to your product details page from outside
|
||||
Google Play, such as from your web site, an ad campaign, reviews, social media
|
||||
posts, and more. See <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking
|
||||
to Your Products</a> to find out how. </p>
|
||||
|
||||
<p>To learn more about how to create your product details page, see
|
||||
<a href="{@docRoot}distribute/googleplay/publish/index.html">Publishing on Google Play</a>.</p>
|
||||
@@ -1,10 +1,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/community-groups.html">
|
||||
<meta http-equiv="refresh" content="0;url=http://developer.android.com/distribute/index.html">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>You should have been redirected. Please <a
|
||||
href="http://developer.android.com/resources/community-groups.html">click here</a>.</p>
|
||||
href="http://developer.android.com/distribute/index.html">click here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
203
docs/html/distribute/googleplay/promote/badges.jd
Normal file
203
docs/html/distribute/googleplay/promote/badges.jd
Normal file
@@ -0,0 +1,203 @@
|
||||
page.title=Google Play Badges
|
||||
@jd:body
|
||||
|
||||
<p>Google Play badges give you an officially branded way of promoting your app to Android users. Use the form below to quickly create badges to link users to your products from web pages, ads, reviews, and more. See <a href="linking.html">Linking to your products</a> for more ways to bring users to your apps.</p>
|
||||
|
||||
<p>Input your app's package or your publisher name, choose the style, size, and language, and click "Build my badge". The form will generate code for an embbeded button that links to your app's product page or a list of your apps. </p>
|
||||
|
||||
<p>Note that you should not modify the Google Play badges after generating them, including colors, size, text, and logo. See <a href="http://www.android.com/branding.html">Android Brand Guidelines</a> for more information.</p>
|
||||
|
||||
<style type="text/css">
|
||||
|
||||
form.button-form {
|
||||
margin-top:2em;
|
||||
}
|
||||
|
||||
/* the label and input elements are blocks that float left in order to
|
||||
keep the left edgets of the input aligned, and IE 6/7 do not fully support "inline-block" */
|
||||
label.block {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 100px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
input.text {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
div.button-row {
|
||||
white-space:nowrap;
|
||||
min-height:80px;
|
||||
}
|
||||
|
||||
div.button-row input {
|
||||
vertical-align:120%;
|
||||
}
|
||||
|
||||
#jd-content div.button-row img {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// variables for creating 'try it out' demo button
|
||||
var imagePath = "http://www.android.com/images/brand/"
|
||||
var linkStart = "<a href=\"http://play.google.com/store/";
|
||||
var imageStart = "\">\n"
|
||||
+ " <img alt=\"";
|
||||
// leaves opening for the alt text value
|
||||
var imageSrc = "\"\n src=\"" + imagePath;
|
||||
// leaves opening for the image file name
|
||||
var imageEnd = ".png\" />\n</a>";
|
||||
|
||||
// variables for creating code snippet
|
||||
var linkStartCode = "<a href=\"http://play.google.com/store/";
|
||||
var imageStartCode = "\">\n"
|
||||
+ " <img alt=\"";
|
||||
// leaves opening for the alt text value
|
||||
var imageSrcCode = "\"\n src=\"" + imagePath;
|
||||
// leaves opening for the image file name
|
||||
var imageEndCode = ".png\" />\n</a>";
|
||||
|
||||
/** Generate the HTML snippet and demo based on form values */
|
||||
function buildButton(form) {
|
||||
var selectedValue = $('form input[type=radio]:checked').val();
|
||||
var altText = selectedValue.indexOf("get_it") != -1 ? "Get it on Google Play" : "Android app on Google Play";
|
||||
|
||||
if (form["package"].value != "com.example.android") {
|
||||
$("#preview").show();
|
||||
$("#snippet").show().html(linkStartCode + "apps/details?id=" + form["package"].value
|
||||
+ imageStartCode + altText + imageSrcCode
|
||||
+ selectedValue + imageEndCode);
|
||||
$("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
|
||||
+ imageStart + altText + imageSrc
|
||||
+ selectedValue + imageEnd);
|
||||
} else if (form["publisher"].value != "Example, Inc.") {
|
||||
$("#preview").show();
|
||||
$("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
|
||||
+ imageStartCode + altText + imageSrcCode
|
||||
+ selectedValue + imageEndCode);
|
||||
$("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
|
||||
+ imageStart + altText + imageSrc
|
||||
+ selectedValue + imageEnd);
|
||||
} else {
|
||||
alert("Please enter your package name or publisher name");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Listen for Enter key */
|
||||
function onTextEntered(event, form, me) {
|
||||
// 13 = enter
|
||||
if (event.keyCode == 13) {
|
||||
buildButton(form);
|
||||
}
|
||||
}
|
||||
|
||||
/** When input is focused, remove example text and disable other input */
|
||||
function onInputFocus(object, example) {
|
||||
if (object.value == example) {
|
||||
$(object).val('').css({'color' : '#000'});
|
||||
}
|
||||
$('input[type="text"]:not(input[name='+object.name+'])',
|
||||
object.parentNode).attr('disabled','true');
|
||||
$('#'+object.name+'-clear').show();
|
||||
}
|
||||
|
||||
/** When input is blured, restore example text if appropriate and enable other input */
|
||||
function onInputBlur(object, example) {
|
||||
if (object.value.length < 1) {
|
||||
$(object).attr('value',example).css({'color':'#ccc'});
|
||||
$('input[type="text"]', object.parentNode).removeAttr('disabled');
|
||||
$('#'+object.name+'-clear').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/** Clear the form to start over */
|
||||
function clearLabel(id, example) {
|
||||
$("#preview").hide();
|
||||
$('#'+id+'').html('').attr('value',example).css({'color':'#ccc'});
|
||||
$('input[type="text"]', $('#'+id+'').parent()).removeAttr('disabled');
|
||||
$('#'+id+'-clear').hide();
|
||||
return false;
|
||||
}
|
||||
|
||||
/** When the doc is ready, find the inputs and color the input grey if the value is the example
|
||||
text. This is necessary to handle back-navigation, which can auto-fill the form with previous
|
||||
values (and text should not be grey) */
|
||||
$(document).ready(function() {
|
||||
$(".button-form input.text").each(function(index) {
|
||||
if ($(this).val() == $(this).attr("default")) {
|
||||
$(this).css("color","#ccc");
|
||||
} else {
|
||||
/* This is necessary to handle back-navigation to the page after form was filled */
|
||||
$('input[type="text"]:not(input[name='+this.name+'])',
|
||||
this.parentNode).attr('disabled','true');
|
||||
$('#'+this.name+'-clear').show();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<form class="button-form">
|
||||
<label class="block" for="package">Package name:</label>
|
||||
<input class="text" type="text" id="package" name="package"
|
||||
value="com.example.android"
|
||||
default="com.example.android"
|
||||
onfocus="onInputFocus(this, 'com.example.android')"
|
||||
onblur="onInputBlur(this, 'com.example.android')"
|
||||
onkeyup="return onTextEntered(event, this.parentNode, this)"/>
|
||||
<a id="package-clear" style="display:none" href="#"
|
||||
onclick="return clearLabel('package','com.example.android');">clear</a>
|
||||
<p style="clear:both;margin:0"> <em>or</em></p>
|
||||
<label class="block" style="margin-top:5px" for="publisher">Publisher name:</label>
|
||||
<input class="text" type="text" id="publisher" name="publisher"
|
||||
value="Example, Inc."
|
||||
default="Example, Inc."
|
||||
onfocus="onInputFocus(this, 'Example, Inc.')"
|
||||
onblur="onInputBlur(this, 'Example, Inc.')"
|
||||
onkeyup="return onTextEntered(event, this.parentNode, this)"/>
|
||||
<a id="publisher-clear" style="display:none" href="#"
|
||||
onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
|
||||
<br/><br/>
|
||||
|
||||
<div class="button-row">
|
||||
<input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
|
||||
<label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
|
||||
alt="Get it on Google Play (small)" /></label>
|
||||
|
||||
<input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
|
||||
<label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
|
||||
alt="Get it on Google Play (large)" /></label>
|
||||
</div>
|
||||
|
||||
<div class="button-row">
|
||||
<input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
|
||||
<label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
|
||||
alt="Android app on Google Play (small)" /></label>
|
||||
|
||||
<input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
|
||||
<label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
|
||||
alt="Android app on Google Play (large)" /></label>
|
||||
</div>
|
||||
|
||||
<input type="button" onclick="return buildButton(this.parentNode)" value="Build my badge"
|
||||
style="padding:5px" />
|
||||
<br/>
|
||||
</form>
|
||||
|
||||
<div id="preview" style="display:none">
|
||||
<p>Copy and paste this HTML into your web site:</p>
|
||||
<textarea id="snippet" cols="100" rows="5" onclick="this.select()"
|
||||
style="font-family:monospace;background-color:#efefef;padding:5px;display:none;margin-bottom:1em">
|
||||
</textarea >
|
||||
|
||||
<p>Try it out:</p>
|
||||
<div id="button-preview" style="margin-top:1em"></div>
|
||||
</div>
|
||||
174
docs/html/distribute/googleplay/promote/brand.jd
Normal file
174
docs/html/distribute/googleplay/promote/brand.jd
Normal file
@@ -0,0 +1,174 @@
|
||||
page.title=Brand Assets, Icons, and Guidelines
|
||||
@jd:body
|
||||
|
||||
<p>We encourage you to use the Android and Google Play brands in your
|
||||
promotional materials. You can use the icons and other assets on this page in
|
||||
any way you want, provided that you follow the guidelines described below.</p>
|
||||
|
||||
<h2 id="brand-android">Android Brand</h2>
|
||||
|
||||
<div>
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<img alt="" src="{@docRoot}images/brand/droid.gif">
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>01/ Android Robot</h4>
|
||||
|
||||
<p> Can be used, reproduced, and modified freely in marketing
|
||||
communications. Our standard color value for print is PMS 376C. Our online hex
|
||||
color is <span id= "android-green">#A4C639</span>.</p>
|
||||
|
||||
<p>When using the Android Robot or any modification of it, proper attribution is
|
||||
required under the terms of the Creative Commons Attribution license. For more
|
||||
details on proper attribution, please see the <a
|
||||
href="{@docRoot}license.html#attribution">Content License</a> document. </p>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<div style="clear:both">
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<img alt="" src="{@docRoot}images/brand/logo_android.gif">
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>02/ Android Logo</h4>
|
||||
|
||||
<p>The Android logo may not be used.</p>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<div style="clear:both">
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<img alt="" src="{@docRoot}images/brand/norad.gif">
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>03/ Android Custom Typeface</h4>
|
||||
|
||||
<p>The custom typeface may not be used.</p>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<div style="clear:both">
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<img alt="" src="{@docRoot}images/brand/mediaplayer.gif">
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>04/ Android in Official Names</h4>
|
||||
<p>Any name with 'Android' alone may not be used in a name without permission. Any name
|
||||
with 'Droid' alone may not be used in a name.</p>
|
||||
|
||||
<p>The word 'Android' may be used only as a descriptor, 'for Android'. If used with your
|
||||
logo, 'for Android' needs to be smaller in size than your logo. First instance of this
|
||||
use should be followed by a TM symbol, 'for Android™'.</p>
|
||||
|
||||
<p>If you are not sure you meet these criteria, <a href=
|
||||
"http://services.google.com/permissions/application">please contact us</a>. </p>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<div style="clear:both">
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<img alt="" src="{@docRoot}images/brand/learnmore.gif">
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>05/ Android in Messaging</h4>
|
||||
<p>
|
||||
May be used in text as a descriptor, as long as it is followed by a proper generic term
|
||||
(e.g. "Android™ application"). First instance of this use should be followed by a TM
|
||||
symbol.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="caution"><strong>Note: Any usage of #04 or #05 needs to include footer attribution in your
|
||||
communication:</strong><br /><span style="margin-left:1.5em">
|
||||
"Android is a trademark of Google Inc."</span>
|
||||
</p>
|
||||
|
||||
<h2 id="brand-google_play">Google Play Brand</h2>
|
||||
|
||||
<div style="clear:both">
|
||||
<div style="float:right;width:50%;padding:1.5em;">
|
||||
<p>
|
||||
<img alt="Google Play logo" src="{@docRoot}images/brand/google_play_logo_450.png">
|
||||
</p>
|
||||
<p>
|
||||
<img alt="Get it on Google Play badge, large" src=
|
||||
"/images/brand/get_it_on_play_logo_large.png"><br>
|
||||
Download: <a href="{@docRoot}images/brand/get_it_on_play_logo_small.png">Small</a> | <a href=
|
||||
"/images/brand/get_it_on_play_logo_large.png">Large</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="Android App on Google Play badge, large" src=
|
||||
"/images/brand/android_app_on_play_logo_large.png"><br>
|
||||
Download: <a href="{@docRoot}images/brand/android_app_on_play_logo_small.png">Small</a> |
|
||||
<a href="{@docRoot}images/brand/android_app_on_play_large.png">Large</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div style="width:45%;">
|
||||
<h4>06/ <em>Get it on Google Play</em> Badge
|
||||
</h4>
|
||||
<p>
|
||||
The "Get it on Google Play" and "Android App on Google Play" logos are badges that you
|
||||
can use on your web site and promotional materials, to point to your products on Google
|
||||
Play.
|
||||
</p>
|
||||
<p>
|
||||
The logos are available in two sizes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Large: 60(h) x 172(w)</li>
|
||||
</li>
|
||||
<li>Small 45(h) x 129(w)
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Guidelines for usage:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Never separate the phrase “Get it on Google Play” or "Android App on Google Play"
|
||||
from the Google Play logo, and do not change the color, proportions, spacing or any
|
||||
other aspect of the logo.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
<li>When used online, the badge logo should be used to direct users to:
|
||||
<ul>
|
||||
<li>The Google Play landing page: <br /><span style="margin-left:1em;"><a href=
|
||||
"http://play.google.com/">play.google.com</a></span>
|
||||
</li>
|
||||
<li>The Google Play Apps landing page: <br /><a href="http://play.google.com/store/apps">
|
||||
<span style="margin-left:1em;"> play.google.com/store/apps</a></span>
|
||||
</li>
|
||||
<li>A list of products that include your company name, for example, <br />
|
||||
<span style="margin-left:1em;">http://play.google.com/store/search?q=<em>yourCompanyName</em></span>
|
||||
</li>
|
||||
<li>A list of products published by you, for example,<br />
|
||||
<span style="margin-left:1em;">play.google.com/store/search?q=<em>publisherName</em>M/span>
|
||||
</li>
|
||||
<li>A specific app product details page within Google Play, for example,<br />
|
||||
<span style="margin-left:1em;">play.google.com/store/apps/details?id=<em>packageName</em></span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>When used alongside logos for other application marketplaces, the Google Play logo
|
||||
should be of equal or greater size</li>
|
||||
</ul>
|
||||
|
||||
<p>For details on all the ways that you can link to your product details page in Google Play,
|
||||
see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
|
||||
|
||||
<p>For convenience, if you are using the logos online, you can use the
|
||||
<a href="{@docRoot}distribute/googleplay/promote/badges.html">badge generator</a>
|
||||
to create the appropriate markup and link to your apps.</p>
|
||||
|
||||
<h2>Other Brands</h2>
|
||||
|
||||
<p>Any other brands or icons depicted on this site are <em>not</em> are the property of their
|
||||
repective owners and usage is reserved. You must seek the developer for appropriate permission to use them.</p>
|
||||
43
docs/html/distribute/googleplay/promote/index.jd
Normal file
43
docs/html/distribute/googleplay/promote/index.jd
Normal file
@@ -0,0 +1,43 @@
|
||||
page.title=Promoting Your Apps
|
||||
page.metaDescription=Raise the visibility of your apps in Google Play through deep links and Google Play badges.
|
||||
header.hide=0
|
||||
footer.hide=0
|
||||
@jd:body
|
||||
|
||||
<!--
|
||||
<style>
|
||||
#landing-graphic-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 472px;
|
||||
width: 280px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="landing-graphic-container">
|
||||
<div id="text-overlay">
|
||||
Raise the visibility of your apps with badges and link users to your products on Google Play.
|
||||
<br><br>
|
||||
<a href="{@docRoot}distribute/googleplay/promote/product-pages.html" class="landing-page-link">Your Product Pages</a>
|
||||
</div>
|
||||
|
||||
<a href="{@docRoot}distribute/googleplay/promote/index.html">
|
||||
<img src="{@docRoot}design/media/index_landing_page.png">
|
||||
</a>
|
||||
</div> -->
|
||||
|
||||
<p>After you publish your app, you can bring Android users to your app's product details page by
|
||||
providing links in your social network posts, ad campaigns, app reviews and articles, your
|
||||
web site, and more. </p>
|
||||
|
||||
<p>You can use the resources in this section to create deep links for your online placements.
|
||||
Google Play badges are an especially great way let Android users know that your app is available
|
||||
and link them directly to your download page. With the badge generator, they're also easy to make.</p>
|
||||
|
||||
|
||||
<p style="margin-top:1.5em;margin-bottom:1.5em;"><a href="{@docRoot}distribute/googleplay/promote/linking.html" class="landing-page-link">Linking to Your Products</a></p>
|
||||
|
||||
213
docs/html/distribute/googleplay/promote/linking.jd
Normal file
213
docs/html/distribute/googleplay/promote/linking.jd
Normal file
@@ -0,0 +1,213 @@
|
||||
page.title=Linking to Your Products
|
||||
@jd:body
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<a href="badges.html">
|
||||
<img alt="Get it on Google Play"
|
||||
src="http://www.android.com/images/brand/get_it_on_play_logo_small.png" />
|
||||
</a>
|
||||
<p>For a link that includes the Google Play brand icon, check out the <a href="badges.html">Badges</a> page. </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Google Play provides several link formats that let you bring users to your
|
||||
products in the way you want, from Android apps, web pages, ads, reviews,
|
||||
articles, social media posts, and more.</p>
|
||||
|
||||
<p>The link formats let you:</p>
|
||||
<ul>
|
||||
<li>Link to a specific app's <a href="#OpeningDetails">product details page</a></li>
|
||||
<li>Link to a <a href="#OpeningPublisher">list of all of your apps</a>, or</li>
|
||||
<li>Link to a <a href="#PerformingSearch">search result</a> of your choice</li>
|
||||
<li>Link to a <a href="#OpeningCollection">collection</a> on Google Play</li>
|
||||
</ul>
|
||||
|
||||
<p>If you are linking from an Android app, you can also control whether the link
|
||||
launches the Play Store application or the browser, which takes the user
|
||||
to the Google Play web site.</p>
|
||||
|
||||
<h2 id="OpeningDetails">Linking to a Product Details Page</h2>
|
||||
|
||||
<p>Use the format below to deep-link users directly to a specific app's product
|
||||
details page. At the product details page, users can see the app description,
|
||||
screenshots, reviews and more, and then install it.</p>
|
||||
|
||||
<p>To create the link, you need to know the app's fully qualified <em>package
|
||||
name</em>, which is declared in the app's <a
|
||||
href="{@docRoot}guide/topics/manifest/manifest-element.html#package">manifest
|
||||
file</a>. The package name is also visible in the Developer Console. </p>
|
||||
|
||||
<dl>
|
||||
<dt><strong>From a web site:</strong></dt>
|
||||
<dd>
|
||||
<pre>http://play.google.com/store/apps/details?id=<package_name></pre>
|
||||
</dd>
|
||||
<dt><strong>From an Android app:</strong></dt>
|
||||
<dd>
|
||||
<pre>market://details?id=<package_name></pre>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>Here's an example:</p>
|
||||
|
||||
<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/details?id=com.google.android.apps">http://play.google.com/store/apps/details?id=com.google.android.apps</a></code></p>
|
||||
|
||||
<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
|
||||
|
||||
|
||||
|
||||
<h2 id="OpeningPublisher">Linking to a Product List</h2>
|
||||
|
||||
<p>Use the format below to link users to a list of apps published by you. The
|
||||
product list lets users see all of the apps from a specific publisher, with
|
||||
ratings, editorial badges, and an Install button for each. </p>
|
||||
|
||||
<p>To create the link, you need to know your <em>publisher name</em>, which is
|
||||
available from the Developer Console. </p>
|
||||
|
||||
<dl>
|
||||
<dt><strong>From a web site:</strong></dt>
|
||||
<dd>
|
||||
<pre>http://play.google.com/store/search?q=pub:<publisher_name></pre>
|
||||
</dd>
|
||||
<dt><strong>From an Android app:</strong></dt>
|
||||
<dd>
|
||||
<pre>market://search?q=pub:<publisher_name></pre>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>Here's an example:</p>
|
||||
|
||||
<p style="margin-left:1em;"><code><a href="http://play.google.com/store/search?q=pub:Google Inc.">http://play.google.com/store/search?q=pub:Google Inc.</a></code></p>
|
||||
|
||||
<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
|
||||
|
||||
|
||||
<h2 id="PerformingSearch">Linking to a Search Result</h2>
|
||||
|
||||
<p>Use the format below to link users to a search query result on Google Play.
|
||||
The search result page shows a list of apps (and optionally other content) that
|
||||
match the query, with ratings, badges, and an Install button for each. </p>
|
||||
|
||||
<p>To create the link, you just need a search query string. If you want the
|
||||
query to search outside of the Google Play Apps listings, you can remove the
|
||||
<code>&c=apps</code> part of the link URL.</p>
|
||||
|
||||
<dl>
|
||||
<dt><strong>From a web site:</strong></dt>
|
||||
<dd>
|
||||
<pre>http://play.google.com/store/search?q=<search_query>&c=apps</pre>
|
||||
</dd>
|
||||
<dt><strong>From an Android app:</strong></dt>
|
||||
<dd>
|
||||
<pre>market://search?q=<seach_query>&c=apps</pre>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>Here's an example:</p>
|
||||
|
||||
<p style="margin-left:1em;"><code><a href="http://play.google.com/store/search?q=maps&c=apps">http://play.google.com/store/search?q=maps&c=apps</a></code></p>
|
||||
|
||||
<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
|
||||
|
||||
|
||||
|
||||
<h2 id="OpeningCollection">Linking to a Collection</h2>
|
||||
|
||||
<p>If your app is featured or appears in one of the Google Play Top charts or
|
||||
collections, you can use the format below to link users directly to the
|
||||
collection. The collection shows a ranked list of apps in the collection, with
|
||||
ratings, short descriptions, and an Install button.</p>
|
||||
|
||||
<dl>
|
||||
<dt><strong>From a web site:</strong></dt>
|
||||
<dd>
|
||||
<pre>http://play.google.com/store/apps/collection/<collection_name></pre>
|
||||
</dd>
|
||||
<dt><strong>From an Android app:</strong></dt>
|
||||
<dd>
|
||||
<pre>market://apps/collection/<collection_name></pre>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>Here's an example:</p>
|
||||
|
||||
<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/collection/editors_choice">http://play.google.com/store/apps/collection/editors_choice</a></code></p>
|
||||
|
||||
<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
|
||||
|
||||
<p class="table-caption"><strong>Table 1.</strong> Collections on Google Play</a>.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Collection</th><th>collection_name</th>
|
||||
</tr>
|
||||
<tr><td>Staff Picks (Featured)</td><td>featured</td></tr>
|
||||
<tr><td>Editor's Choice</td><td>editors_choice</td></tr>
|
||||
<tr><td>Top Paid</td><td>topselling_paid</td></tr>
|
||||
<tr><td>Top Free</td><td>topselling_free</td></tr>
|
||||
<tr><td>Top New Free</td><td>topselling_new_free</td></tr>
|
||||
<tr><td>Top New Paid</td><td>topselling_new_paid</td></tr>
|
||||
<tr><td>Top Grossing</td><td>topgrossing</td></tr>
|
||||
<tr><td>Trending</td><td>movers_shakers</td></tr>
|
||||
<tr><td>Best Selling in Games</td><td>topselling_paid_game</td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="android-app">Linking from an Android App</h2>
|
||||
|
||||
<p>There are two general formats for links that are accessible to users on
|
||||
Android devices, The two formats trigger slightly different behaviors on the
|
||||
device:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>market://</code> Launches the Play Store app to load the
|
||||
target page.</li>
|
||||
<li><code>http://</code> Lets the user choose whether to launch the
|
||||
Play Store app or the browser to handle the request. If the browser handles the
|
||||
request, it loads the target page on the Google Play web site.</li>
|
||||
</ul>
|
||||
|
||||
<p>In general, you should use <code>http://</code> format for links on web pages
|
||||
and <code>market://</code> for links in Android apps.</p>
|
||||
|
||||
<p>If you want to link to your products from an Android app, create an {@link
|
||||
android.content.Intent} that opens an Google Play URL, as shown in the example
|
||||
below.</p>
|
||||
|
||||
<pre>
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("market://details?id=com.example.android"));
|
||||
startActivity(intent);
|
||||
</pre>
|
||||
|
||||
|
||||
<h2 id="UriSummary">Summary of URL formats</h2>
|
||||
|
||||
<p>The table below provides a summary of the URIs currently supported by the Google Play (both on
|
||||
the web and in an Android application), as discussed in the previous sections.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>For this result</th>
|
||||
<th>Web page link</th>
|
||||
<th>Android app link</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width:72px;">Show the product details page for a specific app</td>
|
||||
<td><code>http://play.google.com/store/apps/details?id=<package_name></code>
|
||||
<td><code>market://details?id=<package_name></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Show apps by a specific publisher</td>
|
||||
<td><nobr><code>http://play.google.com/store/search?q=pub:<publisher_name></code></nobr></td>
|
||||
<td><nobr><code>market://search?q=pub:<publisher_name></code></nobr></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Search for apps using a general string query.</td>
|
||||
<td><code>http://play.google.com/store/search?q=<query></code></td>
|
||||
<td><code>market://search?q=<query></code></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
4
docs/html/distribute/googleplay/promote/product-pages.jd
Normal file
4
docs/html/distribute/googleplay/promote/product-pages.jd
Normal file
@@ -0,0 +1,4 @@
|
||||
page.title=Your Product Pages
|
||||
@jd:body
|
||||
|
||||
<p>Placeholder...</p>
|
||||
201
docs/html/distribute/googleplay/publish/console.jd
Normal file
201
docs/html/distribute/googleplay/publish/console.jd
Normal file
@@ -0,0 +1,201 @@
|
||||
page.title=The Developer Console
|
||||
@jd:body
|
||||
|
||||
|
||||
<p>Once you've <a
|
||||
href="{@docRoot}distribute/googleplay/publish/register.html">registered</a> and
|
||||
received verification by email, you can sign in to your Google Play Android
|
||||
Developer Console, which will be the home for your app publishing operations and
|
||||
tools on Google Play. This sections below introduce a few of the key areas
|
||||
you'll find in the Developer Console.</p>
|
||||
|
||||
<div style="width:610px;margin-left:">
|
||||
<div style="width:610px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-dc-home.png" style="width:600px;padding:4px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span
|
||||
style="font-weight:500;">Developer Console home page</span>: Gives you a quick
|
||||
overview of your apps, lets you jump to stats, reviews, or product details, or
|
||||
upload a new app. </p>
|
||||
</div>
|
||||
|
||||
<h3 id="profile">Your Developer Profile</h3>
|
||||
|
||||
<div style="width:408px;float:right;margin:1.5em;">
|
||||
<div style="width:410px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-dc-profile.png" style="width:400px;padding:4px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span
|
||||
style="font-weight:500;">Developer profile</span>: Specifies your developer
|
||||
identity and contact information, stores your developer key, and more.</p>
|
||||
</div>
|
||||
|
||||
<p>Your developer profile identifies you to Google Play and to your customers.
|
||||
During registration you can provide information for your profile, but you can go
|
||||
back at any time to edit the information and change your settings. </p>
|
||||
|
||||
<p>Your developer profile contains:</p>
|
||||
<ul>
|
||||
<li>Your developer name — the name you want to show users on your product
|
||||
details page and elsewhere on Google Play.
|
||||
<li>Your developer contact information — how Google can contact you if
|
||||
needed (this information isn't exposed to users.
|
||||
<li>Merchant information, in-app billing information.</li>
|
||||
<li>Your developer public key for licensing and In-app Billing.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="user-accounts">Multiple user accounts</h3>
|
||||
|
||||
<p>If you are working with a team, you can set up multiple user accounts to
|
||||
access different parts of your Developer Console. The first account registered
|
||||
is the <em>account owner</em>, with full access to all parts of the Console. The
|
||||
owner can add <em>user accounts</em> and manage what parts of the Console they
|
||||
have access to. For example, an owner can grant users access to publishing and
|
||||
app configuration, but not access to financial reports. </p>
|
||||
|
||||
<h3 id="merchant">Linking your Merchant Account</h3>
|
||||
|
||||
<p>If you want to sell apps or in-app products, you can link your Google
|
||||
Checkout Merchant account to your developer profile. Google Play uses the linked
|
||||
Checkout account for financial and tax identification and monthly payouts of
|
||||
sales. </p>
|
||||
|
||||
<div style="width:410px;float:right;margin:1.5em;">
|
||||
<div style="width:410px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-dc-details.png" style="width:400px;padding:4px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span
|
||||
style="font-weight:500;">Product details page</span>: Lets you upload your
|
||||
graphic assets, description, support information, and other information to
|
||||
create the product details page for a specific app.</p>
|
||||
</div>
|
||||
|
||||
<h3 id="details">Your product and listing details</h3>
|
||||
|
||||
<p>The Developer Console lets you set up a colorful storefront page for your app
|
||||
called the <em>product details page</em>. Your product details page is the home
|
||||
for your app in Google Play — it's the page users see on their mobile
|
||||
phones or on the web when they want to learn about your app and download it.
|
||||
</p>
|
||||
|
||||
<p>You can upload custom brand assets, screen shots, and videos to highlight
|
||||
what's great about your app, and you can provide a localized description, add
|
||||
notes about the latest version, and more. You can update your store listing at
|
||||
any time, even if you don’t have a new version of your application.</p>
|
||||
|
||||
<h3 id="uploading">Uploading and publishing</h3>
|
||||
|
||||
<p>From the Developer Console you can quickly upload a release-ready APK and
|
||||
publish it when you're ready. The app is a <em>draft</em> until you publish it,
|
||||
at which time Google Play makes your product details page and app available to
|
||||
users. You can unpublish the app at any time.</p>
|
||||
|
||||
<h3 id="controls">Distribution Controls</h3>
|
||||
|
||||
<p>In the Developer Console you can manage what countries and territories the
|
||||
app is distributed to and, for some countries, you can choose what carriers you
|
||||
want to target.</p>
|
||||
|
||||
<p>You can also see the list of devices that your app is currently available to,
|
||||
based on any distribution rules declared in its manifest file.</p>
|
||||
|
||||
<h3 id="profile">Selling and pricing your Products</h3>
|
||||
|
||||
<p>The Developer Console gives you tools to set prices for your apps and in-app
|
||||
products. Your app can either be free to download or priced (charged before
|
||||
download). </p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<p>See <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported locations for distributing applications</a> for a list of countries where you can distribute or sell your app,</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
<li>If you publish your app as free, <span style="font-weight:500;">it must
|
||||
remain free</span>. Free apps can be downloaded by any users in Google
|
||||
Play.</li>
|
||||
<li>If you publish it as priced, you can change it to free, Priced apps can be
|
||||
purchased and downloaded only from .</li>
|
||||
</ul>
|
||||
|
||||
<p>In addition, you can sell in-app products and subscriptions in your app,
|
||||
whether it is free or priced. You can set prices separately for priced apps,
|
||||
in-app products, and subscriptions.</p>
|
||||
|
||||
<p>If you are selling a priced app or in-app products or subscriptions, the
|
||||
Developer Console lets you set prices in a large number of different currencies.
|
||||
When users around the world visit your product details page, they see the price
|
||||
of your app in their own currency. For most countries, the price you set is the
|
||||
final price charged to users, inclusive of taxes. </p>
|
||||
|
||||
<p>To help you manage your prices, the Developer Console provides an autofill
|
||||
capability that uses recent exchange rates to populate the prices in all
|
||||
supported currencies. You can change prices for apps and in-app products at any
|
||||
time, just by saving changes in the Develoer Console.</p>
|
||||
|
||||
<h3>In-app Billing</h3>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>In-app Billing</h2>
|
||||
<p>For details on how to implement In-app Billing, see the
|
||||
<a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</span></a>
|
||||
developer documentation.</p></div></div>
|
||||
|
||||
<p><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a> is a Google Play service that lets you monetize your apps in more ways by selling in-app products and subscriptions. In-app products are one-time purchases, while subscriptions are recurring charges on an monthly or annual basis.</p>
|
||||
|
||||
<p>From the Developer Console you can create product lists for in-app
|
||||
products and subscriptions, set prices, and publish.</p>
|
||||
|
||||
<div style="width:410px;float:right;margin:1.5em;">
|
||||
<div style="width:410px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-dc-reviews.png" style="width:400px;padding:4px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span style="font-weight:500;">User
|
||||
reviews page</span>: Gives you access to user reviews for a specific app.
|
||||
You can filter reviews in a number of ways to locate issues more easily
|
||||
and support your customers more effectively.</p>
|
||||
</div>
|
||||
|
||||
<h3>User reviews and error reports</h3>
|
||||
|
||||
<p>Google Play makes it easy for users to submit reviews of your app for the
|
||||
benefit of other users. The reviews are also extremely important to you, since
|
||||
they give you usability feedback, support requests, and important functionality
|
||||
issues direct from your customers. </p>
|
||||
|
||||
<p>The Developer console also lets you see error reports, with stack trace and
|
||||
other data, submitted automatically from Android devices, for debugging and
|
||||
improving your app.</p>
|
||||
|
||||
<h3>App statistics</h3>
|
||||
|
||||
<p>The Developer Console gives you detailed statistics on the install
|
||||
performance of your app. </p>
|
||||
|
||||
<p>You can view installations of your app measured by unique users, as well as
|
||||
by unique devices. For user installations, you can view active installs, total
|
||||
installs, and daily installs and uninstalls. For devices, you can see active
|
||||
installs as well as daily installs, uninstalls, and upgrades.</p>
|
||||
|
||||
<p>You can zoom into the installation numbers along several dimensions,
|
||||
including Android platform version, device, country, language, app version, and
|
||||
carrier (mobile operator). You can see the installation data for each dimension
|
||||
on a timeline charts.</p>
|
||||
|
||||
<p>At a glance, these charts highlight your app’s installation peaks and
|
||||
longer-term trends, which you can correlate to promotions, app improvements, or
|
||||
other factors. You can even focus in on data inside a dimension by adding
|
||||
specific points (such as individual platform versions or languages) to the
|
||||
timeline.</p>
|
||||
|
||||
<div style="width:610px;margin:1.5em;margin-left:0">
|
||||
<div style="width:610px;border:1px solid #DDD;">
|
||||
<img src="{@docRoot}images/gp-dc-stats.png"
|
||||
style="width:600px;padding:4px;margin-bottom:0em;">
|
||||
</div>
|
||||
<p class="image-caption" style="padding:.5em"><span style="font-weight:500;">App
|
||||
installation statistics page</span>: Shows you a variety of statistics about a
|
||||
specific app's installation performance over time.</p>
|
||||
</div>
|
||||
23
docs/html/distribute/googleplay/publish/index.jd
Normal file
23
docs/html/distribute/googleplay/publish/index.jd
Normal file
@@ -0,0 +1,23 @@
|
||||
page.title=Publishing on Google Play
|
||||
header.hide=1
|
||||
footer.hide=1
|
||||
page.metaDescription=Get started publishing apps on Google Play.
|
||||
|
||||
@jd:body
|
||||
|
||||
<div style="height:413px;padding-top:50px;">
|
||||
<img src="{@docRoot}images/gp-devconsole-home.png" style="margin-top:0px;">
|
||||
</div>
|
||||
|
||||
<div style="width:460px;padding-bottom:40px;margin-left:1.5em;">
|
||||
<p>Upload apps, build your product pages, configure prices and
|
||||
distribution, and publish. You can manage all phases of publishing
|
||||
on Google Play through the Developer Console, from any web browser.</p>
|
||||
|
||||
<p style="margin-top:1.5em;margin-bottom:1.5em;"><a href="{@docRoot}distribute/googleplay/publish/register.html" class="landing-page-link">Get started</a></p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
570
docs/html/distribute/googleplay/publish/preparing.jd
Normal file
570
docs/html/distribute/googleplay/publish/preparing.jd
Normal file
@@ -0,0 +1,570 @@
|
||||
page.title=Publishing Checklist for Google Play
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper"><div id="qv">
|
||||
<h2>Checklist:</h2>
|
||||
<ol>
|
||||
<li><a href="#process">1. Understand the publishing process</a></li>
|
||||
<li><a href="#policies">2. Understand Google Play policies</a></li>
|
||||
<li><a href="#rating">3. Determine your content rating</a></li>
|
||||
<li><a href="#countries">4. Determine country distribution</a></li>
|
||||
<li><a href="#size">5. Confirm the app's overall size</a></li>
|
||||
<li><a href="#compatibility">6. Confirm app compatibility ranges</a></li>
|
||||
<li><a href="#free-priced">7. Decide on free or priced</a></li>
|
||||
<li><a href="#inapp-billing">8. Consider In-app Billing</a></li>
|
||||
<li><a href="#pricing">9. Set prices for your apps</a></li>
|
||||
<li><a href="#localize">10. Start localization</a></li>
|
||||
<li><a href="#localize">11. Prepare promotional graphics</a></li>
|
||||
<li><a href="#apk">12. Build the release-ready APK</a></li>
|
||||
<li><a href="#product-page">13. Complete the product details</a></li>
|
||||
<li><a href="#badges">14. Use Google Play badges and links to your promotional campaigns</a></li>
|
||||
<li><a href="#final-checks">15. Final checks and publishing</a></li>
|
||||
<li><a href="#support">16. Support users after launch</a></li>
|
||||
</ol>
|
||||
</div></div>
|
||||
|
||||
|
||||
<p>Before you publish your app on Google Play and distribute it to users, you
|
||||
need to get the app ready, test it, and prepare your promotional materials. </p>
|
||||
|
||||
<p>This document helps you understand the publishing process and get ready for a
|
||||
successful product launch on Google Play. It summarizes some of the
|
||||
tasks you'll need to complete before publishing your app on Google Play, such as
|
||||
creating a signed, release-ready APK, understanding the requirements of the app,
|
||||
and creating the product page and graphic assets for your app.</p>
|
||||
|
||||
<p>The preparation and publishing tasks are numbered to give you a rough idea of
|
||||
sequence. However, you can handle the tasks in any sequence that works for you
|
||||
or you can skip steps as appropriate.</p>
|
||||
|
||||
<p>As you move toward publishing, a variety of support resources are available to
|
||||
you. Relevant links are provided in each step.</p>
|
||||
|
||||
|
||||
<h2 id="process">1. Understand the publishing process</h2>
|
||||
|
||||
<p>Before you begin the steps in this checklist, you should take a moment to
|
||||
read and understand the overall publishing workflow and become familiar with how
|
||||
the process works. In particular, you or your development team will need to
|
||||
prepare your app for release using a process common to all Android apps.
|
||||
The <a
|
||||
href="{@docRoot}tools/publishing/publishing_overview.html">Publishing
|
||||
Workflow</a> documents provide the details on how publishing works and how to
|
||||
get an APK ready for release. </p>
|
||||
|
||||
<p>Once you are familiar with publishing in general, read this document to
|
||||
understand the issues that you should consider when publishing an app on Google
|
||||
Play. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}tools/publishing/publishing_overview.html">General Publishing Overview</a></strong> — Start here for an overview of publishing options for Android apps.</li>
|
||||
<li><strong><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></strong> — Developer documentation on how to build the signed, release-ready APK. This process is the same for all Android apps. </li>
|
||||
<li><strong><a href="{@docRoot}distribute/googleplay/publish/publishing.html">Publishing on Google Play</a></strong> — Publishing process specific to Android apps being published on Google Play.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="policies">2. Understand Google Play policies and agreements</h2>
|
||||
|
||||
<p>Make sure that you understand and follow the Google Play program policies
|
||||
that you accepted when registering. Google Play actively enforces the policies
|
||||
and any violations can lead to suspension of your app or, for repeated
|
||||
violations, termination of your developer account. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/topic.py?hl=en&topic=2364761&parent=2365624&ctx=topic">Policy and Best Practices
|
||||
</a></strong> — Help Center document describing various content policies and processes.</li>
|
||||
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="rating">3. Determine your app's content rating</h2>
|
||||
|
||||
<p>Google Play requires you to set a content rating for your app, which informs
|
||||
Google Play users of its maturity level. Before you publish, you should confirm
|
||||
what rating level you want to use. The available content rating levels are:</p>
|
||||
|
||||
<ul>
|
||||
<li>Everyone</li>
|
||||
<li>Low maturity</li>
|
||||
<li>Medium maturity</li>
|
||||
<li>High maturity</li>
|
||||
</ul>
|
||||
|
||||
<p>On their Android devices, Android users can set the desired maturity level
|
||||
for browsing. Google Play then filters apps based on the setting, so the content
|
||||
rating you select can affect the app's distribution to users. You can assign (or
|
||||
change) the content rating for your app in the Developer Console, so no changes
|
||||
are required in your app binary.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">Rating your application content for Google Play</a></strong> — Help Center document describing content ratings levels and how to choose the appropriate one for your app.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="countries">4. Determine country distribution</h2>
|
||||
|
||||
<p>Google Play lets you control what countries and territories your app is
|
||||
distributed to. For widest reach and the largest potential customer base, you
|
||||
would normally want to distribute to all available countries and territories.
|
||||
However, because of business needs, app requirements, or launch dependencies,
|
||||
you might want to exclude one or more countries from your distribution. </p>
|
||||
|
||||
<p>It's important to determine the exact country distribution early, because it
|
||||
can affect:</p>
|
||||
<ul>
|
||||
<li>The need for localized resources in the app</li>
|
||||
<li>The need for a localized app description in the Developer Console</li>
|
||||
<li>Legal requirements for the app that may be specific to certain
|
||||
countries</li>
|
||||
<li>Time zone support, local pricing, and so on.</li>
|
||||
</ul>
|
||||
|
||||
<p>With your country targeting in mind, you should assess what
|
||||
your localization needs are, both in your app and in its Google Play listing
|
||||
details, and start the work of localization well in advance of your
|
||||
launch target date.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported locations for distributing applications</a></strong> on Google Play.
|
||||
.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="size">5. Confirm the app's overall size</h2>
|
||||
|
||||
<p>The overall size of your app can affect its design and how you publish it on
|
||||
Google Play. Currently, the maximum size for an APK published on Google Play is
|
||||
<strong>50 MB</strong>. If your app exceeds that size, or if you want to offer a
|
||||
secondary download, you can use <a
|
||||
href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>,
|
||||
which Google Play will host for free on its server infrastructure and
|
||||
automatically handle the download to devices.</p>
|
||||
|
||||
<ul>
|
||||
<li>The maximum size for an APK published on Google Play is 50 MB.</li>
|
||||
<li>You can use up to two (2) APK Expansion Files, each up to 2 GB in size, for
|
||||
each APK.</li>
|
||||
</ul>
|
||||
|
||||
<p>Using APK Expansion files is a convenient, cost-effective method of
|
||||
distributing large apps. However, the use of APK Expansion Files requires some
|
||||
changes in your app binary, so you will need to make those changes before
|
||||
creating your release-ready APK.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a></strong> — Developer documentation describing APK Expansion Files and how to support them in your app.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="compatibility">6. Confirm the app's platform and screen compatibility ranges</h2>
|
||||
|
||||
<p>Before publishing, it's important to make sure that your app is designed to
|
||||
run properly on the Android platform versions and device screen sizes that you
|
||||
want to target.
|
||||
|
||||
<p>From an app-compatibility perspective, Android platform versions are defined
|
||||
by <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a>. You should
|
||||
confirm the minimum version that your app is compatible with (<a
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><minSdkVersion></code></a>),
|
||||
as that will affect its distribution to Android
|
||||
devices once it is published. </p>
|
||||
|
||||
<p>For screen sizes, you should confirm that the app runs properly and looks
|
||||
good on the range of screen sizes and densities that you want to support. You
|
||||
should confirm the minimum screen-size and density support that your app
|
||||
declares (<a
|
||||
href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a>),
|
||||
since that can affect its distribution to
|
||||
Android devices once it is published. </p>
|
||||
|
||||
<p>To get a better understanding of the current device penetration of Android
|
||||
platform versions and screen sizes across all Android devices, see the <a
|
||||
href="{@docRoot}guide/topics/resources/localization.html">Device Dashboard</a>
|
||||
charts.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Device Dashboard</a></strong> — A chart showing global percentages of devices by Android version, screen size, and level of OpenGL ES support.</li>
|
||||
<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Android API Levels</a></strong> — A definition of API Levels and a list of which Android platform versions they are associated with. </li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="free-priced">7. Decide whether your app will be free or priced</h2>
|
||||
|
||||
<p>On Google Play, you can publish apps as free to download or priced. Free apps
|
||||
can be downloaded by any Android user in Google Play.
|
||||
Paid apps can be downloaded only by users who have registered a form of payment
|
||||
in Google Play, such as a credit card or Direct Carrier Billing.</p>
|
||||
|
||||
<p>Deciding whether you app will be free or paid is important because, on Google
|
||||
Play, <strong>free apps must remain free</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Once you publish your app as a free app, you cannot ever change it to being
|
||||
a priced app. However, you can still sell in-app products and
|
||||
subscriptions through Google Play's In-app Billing service.</li>
|
||||
<li>If you publish your app as a priced app, you <em>can</em> change
|
||||
it at any time to being a free app (but cannot then change it back to
|
||||
priced). You can also sell in-app products and subscriptions. </li>
|
||||
</ul>
|
||||
|
||||
<p> If your app is be priced, or if you'll be selling in-app products,
|
||||
you need set up a Checkout Merchant Account before you can publish.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a></strong> — Developer introduction to Google Play In-app Billing.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="inapp-billing">8. Consider using In-app Billing</h2>
|
||||
|
||||
<p>Google Play <a href="{@docRoot}guide/google/play/billing/index.html">In-app
|
||||
Billing</a> lets you sell digital content in your applications. You can use the
|
||||
service to sell a wide range of content, including downloadable content such as
|
||||
media files or photos, and virtual content such as game levels or potions.
|
||||
In-app Billing service lets you sell one-time purchases and subscriptions from
|
||||
inside your app. This can help you to monetize the app over its installed
|
||||
lifetime. </p>
|
||||
|
||||
<p>If your are looking for more ways to monetize your app and build engagement,
|
||||
you should consider In-app Billing. The service has become very popular with
|
||||
both users and developers. To use In-app Billing, you need to make changes to
|
||||
your app binary, so you will need to complete and test your implementation
|
||||
before creating your release-ready APK.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a></strong> — Developer documentation describing In-app Billing and how to support it in your app.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="pricing">9. Set prices for your products</h2>
|
||||
|
||||
<p>If your app is priced or you will sell in-app products, Google Play lets you
|
||||
set prices for your products in a variety of currencies, for users in markets
|
||||
around the world. You can set prices individually in different currencies, so
|
||||
you have the flexibility to adjust your price according to market conditions and
|
||||
exchange rates. </p>
|
||||
|
||||
<p>Before you publish, consider how you will price your products
|
||||
and what your prices will be in various currencies. Later, you can set prices
|
||||
in all available currencies through the Developer Console.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1169947&topic=15867&ctx=topic">Selling Apps in Multiple Currencies
|
||||
</a></strong> — Help Center document describing how pricing works in Google Play.</li>
|
||||
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138412&topic=15867&ctx=topic">Prices and supported currencies
|
||||
</a></strong> — Help Center document listing supported currencies for pricing your apps.</li>
|
||||
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=112622&topic=15867&ctx=topic">Transaction Fees
|
||||
</a></strong> — Help Center document describing transaction fees for priced apps and in-app products.</li>
|
||||
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138000&topic=15867&ctx=topic">Specifying tax rates
|
||||
</a></strong> — Help Center document describing how to set tax rates for different countries. </li>
|
||||
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="localize">10. Start localization</h2>
|
||||
|
||||
<p>With your country targeting in mind, it's a good idea to assess your localization
|
||||
needs and start the work of localizing well in advance of your target
|
||||
launch date.</p>
|
||||
|
||||
<p>There are at least two aspects of localization to consider:</p>
|
||||
|
||||
<ul>
|
||||
<li>Localizing the strings, images, and other resources in your app</li>
|
||||
<li>Localizing you app's store listing details on Google Play</li>
|
||||
</ul>
|
||||
|
||||
<p>To get started localizing your app, work with your development team to extract
|
||||
any resource or coded strings for translation. Also identify images, icons, or
|
||||
other assets that should be language- or locale-specific. Hand these off to
|
||||
a translator.</p>
|
||||
|
||||
<p>To localize your store listing, first create and finalize your app title, description,
|
||||
and promotional text. Collect and send all of these for localization. You can optionally
|
||||
translate the "Recent Changes" text for app updates as well.</p>
|
||||
|
||||
<p>When your translations are complete, move them into your app resources as needed and test
|
||||
that they are loaded properly. Save your app's translated listing details for later,
|
||||
when you upload assets and configure your product details.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Localization</a></strong> — How to supply localized resources in your app.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="graphics">11. Prepare promotional graphics</h2>
|
||||
|
||||
<p>When you publish on Google Play, you can supply a variety of high-quality
|
||||
graphic assets to showcase your app or brand. After you publish, these appear on
|
||||
your product details page, in store listings and search results, and elsewhere.
|
||||
These graphic assets are key parts of a successful product details page that
|
||||
attracts and engages users, so you should consider having a professional produce
|
||||
them for you. Screen shots and videos are also very important, because they show
|
||||
what your app looks like, how it's used or played, and what makes it different.
|
||||
|
||||
<p>All of your graphic assets should be designed so that they are easy to see
|
||||
and highlight your app or brand in a colorful, interesting way. The assets
|
||||
should reference the same logo and icon as users will actually find in the All
|
||||
Apps launcher once they have downloaded the app. Your graphic assets should also
|
||||
fit in well with the graphic assets of other apps published by you, which will
|
||||
be also be displayed to users on your product details page. </p>
|
||||
|
||||
<p>Because these assets are so important, you should get started on them well in
|
||||
advance of your target publishing date. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870">Graphic Assets for your Application
|
||||
</a></strong> — Details about the graphic assets you need to upload before publishing.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="apk">12. Build and upload the release-ready APK</h2>
|
||||
|
||||
<p>When you are satisfied that your app meets your UI, compatibility, and
|
||||
quality requirements, you can build the release-ready version of the app. The
|
||||
release-ready APK is what you you will upload to the Developer Console and
|
||||
distribute to users.
|
||||
|
||||
<p>The process for preparing a release-ready APK is the same for all apps,
|
||||
regardless of how they are distributed. Generally the process includes basic code cleanup
|
||||
and optimization, building and signing with your release key, and final testing.
|
||||
When you are finished preparing your application for release, you'll have a signed
|
||||
APK file that you can upload to the Developer Console for distribution to
|
||||
users. </p>
|
||||
|
||||
<p>For complete details on how to create a release-ready version of your app,
|
||||
read <a href="{@docRoot}tools/publishing/preparing.html">Preparing for
|
||||
Release</a>.</p>
|
||||
|
||||
<p>Once you have the release-ready APK in hand, you can upload it to
|
||||
the Developer Console. If necessary, you can replace the APK with a more
|
||||
recent version before publishing. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></strong> — Essential information for preparing and packaging your app properly for distribution.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="product-page">13. Complete the app's product details</h2>
|
||||
|
||||
<p>On Google Play, your app's product information is shown to users on its
|
||||
product details page, the page that users visit to learn more about your app and
|
||||
the page from which they will decide to purchase or download your app, on their
|
||||
Android devices or on the web.</p>
|
||||
|
||||
<p>Google Play gives you a variety of ways to promote your app and engage with
|
||||
users on your product details page, from colorful graphics, screenshots, and
|
||||
videos to localized descriptions, release details, and links to your other apps.
|
||||
As you prepare to publish your app, make sure that you take advantage of all
|
||||
that your product details page can offer, making your app as compelling as
|
||||
possible to users.</p>
|
||||
|
||||
<p>You should begin planning your product page in advance of your target launch
|
||||
date, arranging for localized description, high-quality graphic assets,
|
||||
screenshots and video, and so on. </p>
|
||||
|
||||
<p>As you get near your target publishing date, you should become familiar with
|
||||
all the fields, options, and assets associated with the product details configuration
|
||||
page in the Developer Console. As you collect the information and assets for the
|
||||
page, make sure that you can enter or upload it to the Developer Console, until
|
||||
the page is complete and ready for publishing. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}distribute/googleplay/promote/product-pages.html">Your Product Page</a></strong> — Tips and details on creating your product details page.</li>
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113475&topic=2365760&ctx=topic">Category types
|
||||
</a></strong> — Help Center document listing available categories for apps.</li>
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870&topic=2365760&ctx=topic">Graphic Assets for your Application
|
||||
</a></strong> — Help Center document describing the various graphics you can add to your product listing.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="badges">14. Use Google Play badges and links in your promotional
|
||||
campaigns</h2>
|
||||
|
||||
<p>Google Play badges give you an officially branded way of promoting your app
|
||||
to Android users. Use the <a
|
||||
href="{@docRoot}distribute/googleplay/promote/badges.html">Google Play Badge
|
||||
generator</a> to quickly create badges to link users to your products from web
|
||||
pages, ads, reviews, and more. You can also use special <a
|
||||
href="{@docRoot}distribute/googleplay/promote/linking.html">link formats</a>
|
||||
to link directly to your product details page, to a list of your products, or to
|
||||
search results.</p>
|
||||
|
||||
<p>To help your app get traction after launch, it's strongly recommended that you support
|
||||
launch with a promotional campaign that announces your product through many channels as
|
||||
possible, in as many countries as possible. For example, you can promote the launch
|
||||
using ad placements, social network or blog posts, video and other media, interviews
|
||||
and reviews, or any other channel available.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="{@docRoot}distribute/googleplay/promote/badges.html">Google Play Badges</a></strong> — Generate a badge to bring users to your app in Google Play.</li>
|
||||
<li><strong><a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a></strong> — Link formats that you can use to bring users to your app in Google Play.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 id="final-checks">15. Final checks and publishing</h2>
|
||||
|
||||
<p>When you think you are ready to publish, sign in to the Developer Console and take a few moments for a few
|
||||
final checks:</p>
|
||||
|
||||
<p>Make sure that: </p>
|
||||
|
||||
<ul>
|
||||
<li>Your developer profile has the correct information and is linked to the proper Google Checkout Merchant account (if you are selling products).</li>
|
||||
<li>You have the right version of the app uploaded.</li>
|
||||
<li>All parts of your Product Details are ready, including all graphic assets, screenshots, video, localized descriptions, and so on. </li>
|
||||
<li>You have set your app's pricing to free or priced.</li>
|
||||
<li>You have set country (and carrier) targeting and priced your products (if appropriate) in buyer currencies</li>
|
||||
<li>"Compatible devices" shows that your app is actually reaching the devices that you are targeting. If not, you should check with your development team on the apps requirements and filtering rules. </li>
|
||||
<li>You have provided the correct link to your web site and the correct support email address.</li>
|
||||
<li>Your app does not violate content policy guidelines.</li>
|
||||
<li>You have acknowledged that your app meets the guidelines for Android content on Google Play and also US export laws. </li>
|
||||
</ul>
|
||||
|
||||
<p>Your app is now ready to publish!</p>
|
||||
|
||||
<p>If you are releasing an update, make sure to read the <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113476&topic=2365760&ctx=topic">requirements for publishing updates</a>. </p>
|
||||
|
||||
<p>When you are ready, click the <strong>Publish</strong> button in the Developer Console. Within a few hours, your app will become available to users and your product page will be appear in Google Play for browsing, searching, or linking from your promotional campaigns.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://www.android.com/us/developer-content-policy.html">Google Play Developer Program Policies</a></strong> — Guidelines for what is acceptable conent in Google Play. Please read and understand the policies before publishing. </li>
|
||||
<li><strong><a href="{@docRoot}distribute/googleplay/promote/linking.html">Updates</a></strong> — Requirements for app updates in Google Play.</li>
|
||||
<li><strong><a href="{@docRoot}support.html">Developer Support</a></strong> — Support resources that you can use to find answers and report issues.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h2 id="support">16. Support users after launch</h2>
|
||||
|
||||
<p>After you publish an app or an app update, it's crucial for you to support
|
||||
your customers. Prompt and courteous support can provide a better experience for
|
||||
users that results in better ratings and more positive reviews for your
|
||||
products. Users are likely to be more engaged with your app and recommend it if
|
||||
you are responsive to their needs and feedback. This is especially true after
|
||||
publishing if you are using a coordinated promotional campaign.</p>
|
||||
|
||||
<p>There are a number of ways that you can keep in touch with users and offer
|
||||
them support. The most fundamental is to provide your <em>support email
|
||||
address</em> on your product details page. Beyond that, you can provide support
|
||||
in any way you choose, such as a forum, mailing list or a Google+ page. The
|
||||
Google Play team does provide user support for downloading, installing and
|
||||
payments issues, but issues that fall outside of these topics will fall under
|
||||
your domain. Examples of issues you can support include: feature requests,
|
||||
questions about using the app and questions about compatibility settings. </p>
|
||||
|
||||
<p>After publishing, plan to: </p>
|
||||
<ul>
|
||||
<li>Check your ratings and reviews frequently on your app's product details
|
||||
page. Watch for recurring issues that could signal bugs or other issues. </li>
|
||||
<li>Be mindful of new Android platform version launches, as compatibility
|
||||
settings for your apps might need to be updated.</li>
|
||||
<li>Put a link to your support resources on your web site and set up any other
|
||||
support such as forums.</li>
|
||||
<li>Provide an appropriate support email address on your product details page
|
||||
and respond to users when they take the time to email you.</li>
|
||||
<li>Beyond the automatic refund window offered by Google Play, be generous with
|
||||
your own refund policy, as satisfied users will be more likely to purchase in
|
||||
the future. </li>
|
||||
<li>Acknowledge and fix issues in your app. It helps to be transparent and
|
||||
list known issues on your product details page proactively. </li>
|
||||
<li>Publish updates as frequently as you are able, without sacrificing quality
|
||||
or annoying users with too-frequent updates. </li>
|
||||
<li>With each update, make sure to provide a summary of what's changed. You can
|
||||
enter this information in the Developer Console. Users will read it and
|
||||
appreciate that you are serious about improving the quality of your app. </li>
|
||||
</ul>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><p>Related resources:</p>
|
||||
<ul style="margin-top:-.5em;">
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113477&topic=2364761&ctx=topic">Supporting your users
|
||||
</a></strong> — Help Center document describing options for supporting users.</li>
|
||||
<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153479">In-app Billing</a></strong> — Help Center document describing how to correctly set up In-app Billing.</li>
|
||||
<li><strong><a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138001">Issuing Refunds</a></strong> — -- Help Center document describing how to issue refunds.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
72
docs/html/distribute/googleplay/publish/register.jd
Normal file
72
docs/html/distribute/googleplay/publish/register.jd
Normal file
@@ -0,0 +1,72 @@
|
||||
page.title=Get Started with Publishing
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>Help topics</h2>
|
||||
<ul>
|
||||
<li><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113468">Developer Registration</a></li>
|
||||
<li><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported Locations for Distributing Apps</a></li>
|
||||
<li><a href="http://support.google.com/googleplay/android-developer/bin/topic.py?hl=en&topic=2364761">Policy and Best Practices</a></li>
|
||||
<li><a href="http://support.google.com/googleplay/android-developer/">Developer Support</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Get Started</h2>
|
||||
<ol>
|
||||
<li><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>You can set up to start publishing on Google Play in only a few minutes. Here's how you do it: </p>
|
||||
|
||||
<ul>
|
||||
<li>Register for a Google Play publisher account</li>
|
||||
<li>If you will sell apps, set up a Google Checkout Merchant Account</li>
|
||||
<li>Explore the Google Play Android Developer Console and learn about the tools for publishing</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>Register for a publisher account</h3>
|
||||
|
||||
<p>The first step is to visit the Google Play Android Developer Console and register for a publisher account.</p>
|
||||
|
||||
<p>Here's what you will do during registration: </p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>Tips</h2>
|
||||
<ul>
|
||||
<li>You need a Google account to register. You can create one during the process. </li>
|
||||
<li>If you are an organization, consider registering a new Google account rather than using a personal account.</li>
|
||||
<li>Review the <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294">developer countries</a> and <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">merchant countries</a> where you can distribute and sell apps.</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
|
||||
|
||||
<ol>
|
||||
<li>Visit the Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>.
|
||||
<li>Enter basic information about your <strong>developer identity</strong> — developer name, email address, and so on. You can modify this information later.</li>
|
||||
<li>Read and accept the <strong>Developer Distribution Agreement</strong> that applies to your country or region. Note that apps and store listings that you publish on Google Play must comply with the Developer Program Policies and US export law,</li>
|
||||
<li>Pay a <strong>$25 USD registration fee</strong> using Google Checkout. If you don't have a Google Checkout account, you can quickly set one up during the process.</li>
|
||||
</ol>
|
||||
|
||||
<p>When your registration is verified, you’ll be notified at the email address you specified during registration. </p>
|
||||
|
||||
<h3>Set up a Google Checkout Merchant account</h3>
|
||||
|
||||
<p>If you want to sell products on Google Play — priced apps, in-app products, or subscriptions — you will also need to set up a Google Checkout <a href="http://checkout.google.com/sell">Merchant Account</a>. You can do that at any time, but make sure to first review the list of <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">merchant countries</a>.</p>
|
||||
|
||||
<p>To set up a Merchant account from the Developer Console:</p>
|
||||
|
||||
<ol>
|
||||
<li><strong>Sign in</strong> to your Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>
|
||||
<li>Click on the "<strong>Edit profile</strong>" link.
|
||||
<li>Select "<strong>Setup a Merchant Account at Google Checkout</strong>".</li>
|
||||
</ol>
|
||||
|
||||
<p>This will take you to the Google Checkout site to sign up as a Merchant; you'll need to have information about your business handy to complete this step.</p>
|
||||
|
||||
<h3>Explore the Developer Console</h3>
|
||||
<p>When your registration is verified, you can sign in to your Android Developer Console, which will be the home for your app publishing operations and tools on Google Play. </p>
|
||||
116
docs/html/distribute/googleplay/strategies/app-quality.jd
Normal file
116
docs/html/distribute/googleplay/strategies/app-quality.jd
Normal file
@@ -0,0 +1,116 @@
|
||||
page.title=Improving App Quality
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>Strategies:</h2>
|
||||
<ul>
|
||||
<li><a href="#listen">Listen to Your Users</a></li>
|
||||
<li><a href="#stability">Improve Stability and Eliminate Bugs</a></li>
|
||||
<li><a href="#responsiveness">Improve UI Responsiveness</a></li>
|
||||
<li><a href="#usability">Improve Usability</a></li>
|
||||
<li><a href="#appearance">Professional Appearance and Aesthetics</a></li>
|
||||
<li><a href="#features">Deliver the Right Set of Features</a></li>
|
||||
<li><a href="#integrate">Integrate with the System and Third-Party Apps</a></li>
|
||||
<li><a href="#details">Pay Attention to Details</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
With thousands of new apps being published in Google Play every week, it's important to look for any available way to get the most visibility and the highest ratings possible. One way of improving your app's visibility in the ecosystem is by deploying well-targeted mobile advertising campaigns and cross-app promotions. Another time-tested method of fueling the impression-install-ranking cycle is simply: <em>improve the product</em>!</p>
|
||||
<p>
|
||||
A better app can go a very long way: a higher quality app will translate to higher user ratings, generally better rankings, more downloads, and higher retention (longer install periods). High-quality apps also have a much higher likelihood of getting some unanticipated positive publicity such as being featured in Google Play or getting social media buzz.</p>
|
||||
<p>
|
||||
The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". The path to improving app quality isn't always well-lit. The term "quality" — along with "polish" and "fit and finish" — aren't always well-defined. Here we'll light the path by looking at some of the key factors in app quality and ways of improving your app along these dimensions.</p>
|
||||
|
||||
<h2 id="listen">Listen to Your Users</h2>
|
||||
<p>
|
||||
Most ways of measuring the "success" of an app are dependent on user behavior. User-related metrics such as number of downloads, daily active installs, retention rates, and so on highlight the importance of users. If you aren't doing so already, it's a good idea to start thinking of your app's quality as it relates to your users.</p>
|
||||
<p>
|
||||
The most obvious way to listen to users is by reading and addressing comments on your app in Google Play. Although the comments aren't always productive or constructive, some will provide valuable insight on aspects of your app that you may not have consciously considered before. It's important to remember that users have the opportunity to change their ratings and comments about an app as much as they'd like.</p>
|
||||
<p>
|
||||
One way to reach users and help them address their concerns is to set up your own support and discussion destination(s). There are some great support tools out there that can put you in touch with your users directly such as <a href="http://groups.google.com">Google Groups</a>, <a href="http://discussions.zoho.com/">Zoho Discussions</a>, <a href="http://getsatisfaction.com">getsatisfaction.com</a> and <a href="http://uservoice.com">uservoice.com</a>. Once you get set up with such a tool, make sure to fill in the support link in your Google Play product details page — users do click through to these.</p>
|
||||
<p>
|
||||
Another way to better listen to your users is by having a public beta or trusted tester program. It's crucial to have some amount of real user testing before releasing something in Google Play. Fortunately, you can distribute your apps to users outside of Google Play via a website; this website can require a login or be publicly accessible — it's entirely up to you. Take advantage of this opportunity by offering your next planned update to some early adopters, before submitting to Google Play. You'll be surprised by how many little, yet impactful, improvements can come out of crowd-sourced, real-user testing.</p>
|
||||
|
||||
|
||||
<h2 id="stability">Improve Stability and Eliminate Bugs</h2>
|
||||
|
||||
<p>
|
||||
The effect of overall app stability of ratings and user satisfaction is very well-known and there are many tools and techniques for testing and profiling your app on different devices and user scenarios.</p>
|
||||
<p>
|
||||
One noteworthy and yet relatively underused tool for catching stability issues such as crashes is the <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> (Monkey). Monkey will send random UI events to your app's activities, allowing you to trigger user flows that can uncover stability problems.</p>
|
||||
<p>
|
||||
Also, with the Google error-reporting features built into most Android devices, users now have a way to report application crashes to developers. The error reports show up in aggregate in the Google Play Developer Console. Make sure to read these reports often and act on them appropriately.</p>
|
||||
<p>
|
||||
Last, keep an external bug and feature request tracker and let users know how to find it. This will enable them to engage with the app at a closer level, by following features and bugs that affect them. User frustration with app problems can be effectively managed with diligent issue tracking and communication. Some of the community support tools listed above offer issue tracking features, and if your project is open source, most popular repository hosting sites such as <a href="http://code.google.com/hosting">Google Code</a> and <a href="https://github.com/">GitHub</a> will offer this as well.</p>
|
||||
|
||||
<h2 id="responsiveness">Improve UI Responsiveness</h2>
|
||||
<p>
|
||||
One sure-fire way to lose your users is to give them a slow, unresponsive UI. Research has shown that <a href="http://googleresearch.blogspot.com/2009/06/speed-matters.html">speed matters</a>... for any interface, be it desktop, web, or mobile. In fact, the importance of speed is amplified on mobile devices since users often need their information on the go and in a hurry.</p>
|
||||
<p>
|
||||
You can improve your apps's UI responsiveness by moving long-running operations off the main thread to worker threads. Android offers built-in debugging facilities such as StrictMode for analyzing your app's performance and activities on the main thread. You can see more recommendations in <a href="http://www.youtube.com/watch?v=c4znvD-7VDA">Writing Zippy Android Apps</a>, a developer session from Google I/O 2010,</p>
|
||||
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>More resources</h2>
|
||||
<ul>
|
||||
<li><a href="{@docRoot}design/index.html">Android Design</a></li>
|
||||
<li><a href="{@docRoot}guide/practices/performance.html">Designing for Performance</a></li>
|
||||
<li><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a>
|
||||
<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for seamlessness</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<p>
|
||||
A great way to improve UI performance is to minimize the complexity of your layouts. If you open up <a href="{@docRoot}tools/help/hierarchy-viewer.html">hierarchyviewer</a> and see that your layouts are more than 5 levels deep, it may be time to simplify your layout. Consider refactoring those deeply nested LinearLayouts into RelativeLayout. The impact of View objects is cumulative — each one costs about 1 to 2 KB of memory, so large view hierarchies can be a recipe for disaster, causing frequent VM garbage collection passes which block the main (UI) thread. You can learn more in <a href="http://www.youtube.com/watch?v=wDBM6wVEO70">World of ListView</a>, another session at Google I/O.</p>
|
||||
<p>
|
||||
Lastly, pointed out in the blog post <a href="http://android-developers.blogspot.com/2010/10/traceview-war-story.html">Traceview War Story</a>, tools like <a href="{@docRoot}tools/traceview.html">traceview</code> and <a href="{@docRoot}tools/ddms.html">ddms</a> can be your best friends in improving your app by profiling method calls and monitoring VM memory allocations, respectively.</p>
|
||||
|
||||
|
||||
<h2 id="usability">Improve Usability</h2>
|
||||
<p>
|
||||
In usability and in app design too, you should listen carefully to your users. Ask a handful of real Android device users (friends, family, etc.) to try out your app and observe them as they interact with it. Look for cases where they get confused, are unsure of how to proceed, or are surprised by certain behaviors. Minimize these cases by rethinking some of the interactions in your app, perhaps working in some of the <a href="http://www.youtube.com/watch?v=M1ZBjlCRfz0">user interface patterns</a> the Android UI team discussed at Google I/O.</p>
|
||||
<p>
|
||||
In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>More resources</h2>
|
||||
<ul>
|
||||
As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="{@docRoot}design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
|
||||
<p>
|
||||
Another way to incrementally improve usability, based on real-world data, is to implement <a href="http://code.google.com/mobile/analytics/docs/">Analytics</a> throughout your app to log usage of particular sections. Consider demoting infrequently used sections to the overflow menu in the <a href="{@docRoot}design/patterns/actionbar.html">Action bar</a>, or removing them altogether. For often-used sections and UI elements, make sure they're immediately obvious and easily accessible in your app's UI so that users can get to them quickly.</p>
|
||||
<p>
|
||||
Lastly, usability is an extensive and well-documented subject, with close ties to interface design, cognitive science, and other disciplines.</p>
|
||||
|
||||
<h2 id="appearance">Professional Appearance and Aesthetics</h2>
|
||||
<p>
|
||||
There's no substitute for a real user interface designer — ideally one who's well-versed in mobile and Android, and ideally handy with both interaction and visual design. One popular venue to post openings for designers is <a href="http://jobs.smashingmagazine.com">jobs.smashingmagazine.com</a>, and leveraging social connections on Twitter and LinkedIn can surface great talent.</p>
|
||||
<p>
|
||||
If you don't have the luxury of working with a UI designer, there are some ways in which you can improve your app's appearance yourself. First, get familiar with Adobe Photoshop, Adobe Fireworks, or some other raster image editing tool. Mastering the art of the pixel in these apps takes time, but honing this skill can help build polish across your interface designs. Also, master the resources framework by studying <a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res;h=a3562fe1af94134486a8a899f02a9c2f7986c8dd;hb=master">the framework UI</a> assets and layouts and reading through the new <a href="{@docRoot}guide/components/resources/available-resources.html">resources documentation</a>. Techniques such as 9-patches and resource directory qualifiers are somewhat unique to Android, and are crucial in building flexible yet aesthetic UIs.</p>
|
||||
<p>
|
||||
Before you get too far in designing your app and writing the code, make sure to visit the Android Design site and learn about the vision, the building blocks, and the tools of designing beautiful and inspiring user interfaces.</p>
|
||||
|
||||
<h2 id="features">Deliver the Right Set of Features</h2>
|
||||
<p>
|
||||
Having the <em>right</em> set of features in your app is important. It's often easy to fall into the trap of feature-creep, building as much functionality into your app as possible. Providing instant gratification by immediately showing the most important or relevant information is crucial on mobile devices. Providing too much information can be as frustrating (or even more so) than not providing enough of it.</p>
|
||||
<p>
|
||||
Again, listen to your users by collecting and responding to feature requests. Be careful, though, to take feature requests with a grain of salt. Requests can be very useful in aggregate, to get a sense of what kinds of functionality you should be working on, but not every feature request needs to be implemented.</p>
|
||||
|
||||
<h2 id="integrate">Integrate with the System and Third-Party apps</h2>
|
||||
<p>
|
||||
A great way to deliver a delightful user experience is to integrate tightly with the operating system. Features like <a href="{@docRoot}guide/topics/appwidgets/index.html">Home screen widgets</a>, <a href={@docRoot}design/patterns/notifications.html">rich notifications</a>, <a href="{@docRoot}guide/topics/search/index.html">global search integration</a>, and {@link android.widget.QuickContactBadge Quick Contacts} are fairly low-hanging fruit in this regard. </p>
|
||||
|
||||
<p>For some app categories, basic features like home screen widgets are par for the course. Not including them is a sure-fire way to tarnish an otherwise positive user experience. Some apps can achieve even tighter OS integration with Android's contacts, accounts, and sync APIs. </p>
|
||||
<p>
|
||||
Third-party integrations can provide even more user delight and give the user a feeling of device cohesiveness. It's also a really nice way of adding functionality to your app without writing any extra code (by leveraging other apps' functionalities). For example, if you're creating a camera app, you can allow users to edit their photos in <a href=" http://mobile.photoshop.com/android/">Photoshop Express</a> before saving them to their collection, if they have that third-party application installed. More information on this subject is available in the class, <a href="{@docRoot}training/basics/intents/index.html">Interacting with Other Apps</a>.</p>
|
||||
|
||||
<h2 id="details">Pay Attention to Details</h2>
|
||||
<p>
|
||||
One particular detail to pay close attention to is your app's icon quality and consistency. Make sure your app icons (especially your launcher icon) are crisp and pixel-perfect at all resolutions, and follow the <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">icon guidelines</a> as much as possible. If you're having trouble or don't have the resources to design the icons yourself, consider using the new <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android Asset Studio</a> tool to generate a set.</p>
|
||||
4
docs/html/distribute/googleplay/strategies/featuring.jd
Normal file
4
docs/html/distribute/googleplay/strategies/featuring.jd
Normal file
@@ -0,0 +1,4 @@
|
||||
page.title=Preparing for Featuring
|
||||
@jd:body
|
||||
|
||||
<p>Placeholder...</p>
|
||||
33
docs/html/distribute/googleplay/strategies/index.jd
Normal file
33
docs/html/distribute/googleplay/strategies/index.jd
Normal file
@@ -0,0 +1,33 @@
|
||||
page.title=Success Strategies
|
||||
page.metaDescription=
|
||||
header.hide=1
|
||||
footer.hide=1
|
||||
|
||||
@jd:body
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
#landing-graphic-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#text-overlay {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 472px;
|
||||
width: 280px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="landing-graphic-container">
|
||||
<div id="text-overlay">
|
||||
Strategies for building ratings, improving reviews, monetizing, and more.
|
||||
<br><br>
|
||||
<a href="/distribute/googleplay/promote/product-pages.html" class="landing-page-link">Preparing for Featuring</a>
|
||||
</div>
|
||||
|
||||
<a href="{@docRoot}distribute/googleplay/promote/index.html">
|
||||
<img src="{@docRoot}design/media/index_landing_page.png">
|
||||
</a>
|
||||
</div>
|
||||
39
docs/html/distribute/index.jd
Normal file
39
docs/html/distribute/index.jd
Normal file
@@ -0,0 +1,39 @@
|
||||
page.title=Distribute Apps
|
||||
header.hide=1
|
||||
|
||||
@jd:body
|
||||
|
||||
|
||||
|
||||
<div class="marquee">
|
||||
|
||||
<div continer>
|
||||
|
||||
<div class="madin-img" style="position:absolute;margin-left:42px;margin-top:76px;">
|
||||
<img src="/images/home/google-play.png">
|
||||
</div>
|
||||
<div class="copy" style="position:relative;left:480px;width:360;">
|
||||
<h1>Introducing Google Play</h1>
|
||||
<p>The most visited store in the world for Android apps. Cloud-connected and always synced, it's never been easier for users to find and download your apps.</p>
|
||||
|
||||
<p><a class="landing-page-link" href="http://youtu.be/g5SzWc8-X0M">Watch a video</a></p>
|
||||
</div> </div>
|
||||
</div>
|
||||
<div class="distribute-features col-13" style="clear:both;margin-top:246px;">
|
||||
<ul>
|
||||
<li><h5>Growth Engine</h5>
|
||||
A billion downloads a month and growing. Get your apps in front of millions of users at Google's scale.<br />
|
||||
<a href="{@docRoot}distribute/googleplay/about/visibility.html">Read More ›</a>
|
||||
<li><h5>Build Your Business</h5> Sell your app in over 130 countries. Flexible monetization options with in-app purchase, subscriptions, and more. <br />
|
||||
<a href="{@docRoot}distribute/googleplay/about/monetizing.html">Read More ›</a></li>
|
||||
<li class="last"><h5>Distribution Control</h5> Deliver your apps to the users you want, on the devices you want, on <em>your</em> schedule. <br />
|
||||
<a href="{@docRoot}distribute/googleplay/about/distribution.html">Read More ›</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
107
docs/html/distribute/open.jd
Normal file
107
docs/html/distribute/open.jd
Normal file
@@ -0,0 +1,107 @@
|
||||
page.title=Open Distribution
|
||||
@jd:body
|
||||
|
||||
<p>As an open platform, Android offers choice. You
|
||||
distribute your Android apps to users in any way you want, using any
|
||||
distribution approach or combination of approaches that meets your needs.
|
||||
From publishing in an app marketplace to serving your apps from a web site or
|
||||
emailing them directly users, you are never locked into any
|
||||
particular distribution platform.</p>
|
||||
|
||||
<p>The process for building and packaging your app for distribution is the same,
|
||||
regardless of how you will distribute your app. This saves you time and lets you
|
||||
automate parts of the process as needed. You can read <a
|
||||
href="{@docRoot}tools/publishing/preparing.html">Preparing
|
||||
for Release</a> for more information.</p>
|
||||
|
||||
<p>The sections below highlight some of the alternatives for distributing
|
||||
your apps to users.</p>
|
||||
|
||||
<h2 id="publishing-marketplace">Distributing through an App Marketplace</h2>
|
||||
|
||||
<p>Usually, to reach the broadest possible audience, you would distribute your
|
||||
apps through a marketplace, such as Google Play.</p>
|
||||
|
||||
<p>Google Play is the premier marketplace for Android apps and is particularly
|
||||
useful if you want to distribute your applications to a large global audience.
|
||||
However, you can distribute your apps through any app marketplace you want or
|
||||
you can use multiple marketplaces.</p>
|
||||
|
||||
<h2 id="publishing-email">Distributing your application through email</h2>
|
||||
|
||||
<div class="figure" style="width:246px">
|
||||
<img src="{@docRoot}images/publishing/publishing_via_email.png"
|
||||
alt="Screenshot showing the graphical user interface users see when you send them an app"
|
||||
style="width:240px;" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 1.</strong> Users can simply click <strong>Install</strong> when you send them
|
||||
an application via email.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>The easiest and quickest way to release your application is to send it to users through
|
||||
email. To do this, you prepare your application for release and then attach it to an email
|
||||
and send it to a user. When users open your email message on their Android-powered device,
|
||||
the Android system will recognize the APK and display an <strong>Install Now</strong>
|
||||
button in the email message (see figure 1). Users can install your application by touching the
|
||||
button.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button
|
||||
shown in Figure 1 appears only if users have configured their device to allow
|
||||
installation from <a href="#unknown-sources">unknown sources</a> and have opened your
|
||||
email with the native Gmail application.</p>
|
||||
|
||||
<p>Distributing applications through email is convenient if you are sending your application to
|
||||
only a few trusted users, but it provides few protections from piracy and unauthorized
|
||||
distribution; that is, anyone you send your application to can simply forward it to someone else.</p>
|
||||
|
||||
<h2 id="publishing-website">Distributing through a web site</h2>
|
||||
|
||||
<p>If you do not want to release your app on a marketplace like Google Play, you
|
||||
can make the app available for download on your own website or server, including
|
||||
on a private or enterprise server. To do this, you must first prepare your
|
||||
application for release in the normal way. Then all you need to do is host the
|
||||
release-ready APK file on your website and provide a download link to users.
|
||||
</p>
|
||||
|
||||
<p>When users browse to the download link from their Android-powered devices,
|
||||
the file is downloaded and Android system automatically starts installing it on
|
||||
the device. However, the installation process will start automatically only if
|
||||
users have configured their Settings to allow the installation of apps from
|
||||
<a href="#unknown-sources">unknown sources</a>.</p>
|
||||
|
||||
<p>Although it is relatively easy to release your application on your own
|
||||
website, it can be inefficient. For example, if you want to monetize your
|
||||
application you will have to process and track all financial transactions
|
||||
yourself and you will not be able to use Google Play's <a
|
||||
href="{@docRoot}guide/google/play/billing/index.html">In-app Billing service</a>
|
||||
to sell in-app products. In addition, you will not be able to use the <a
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Licensing service</a> to
|
||||
help prevent unauthorized installation and use of your application.</p>
|
||||
|
||||
|
||||
<h2 id="unknown-sources">User Opt-In for Apps from Unknown Sources</h2>
|
||||
|
||||
<div class="figure" style="width:246px;margin-top:0;">
|
||||
<img src="{@docRoot}images/publishing/publishing_unknown_sources_sm.png"
|
||||
alt="Screenshot showing the setting for accepting download and install of
|
||||
apps from unknown sources." style="width:240px;" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 2.</strong> Users must enable the <strong>Unknown sources</strong>
|
||||
setting before they can install apps not downloaded from Google Play.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>Android protects users from inadvertent download and install of apps from
|
||||
locations other than Google Play (which is trusted). It blocks such installs
|
||||
until the user opts-in <strong>Unknown sources</strong> in
|
||||
Settings <strong>></strong> Security, shown in Figure 2. To allow
|
||||
the installation of applications from other sources, users need to enable the
|
||||
Unknown sources setting on their devices, and they need to make this
|
||||
configuration change <em>before</em> they download your application to their
|
||||
devices.</p>
|
||||
|
||||
<p class="note">Note that some network providers do not allow users to install
|
||||
applications from unknown sources.</p>
|
||||
|
||||
|
||||
BIN
docs/html/favicon-a.ico
Normal file
BIN
docs/html/favicon-a.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 318 B |
@@ -4,7 +4,7 @@ page.title=Intents List: Invoking Google Applications on Android Devices
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
For more information about intents, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>.
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ page.title=Glossary
|
||||
SDK. It provides tools to browse the device, copy tools on the device, and
|
||||
forward ports for debugging. If you are developing in Eclipse using the
|
||||
ADT Plugin, adb is integrated into your development environment. See
|
||||
<a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>
|
||||
<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>
|
||||
for more information. </dd>
|
||||
|
||||
<dt id="application">Application</dt>
|
||||
@@ -91,7 +91,7 @@ page.title=Glossary
|
||||
with the SDK. It provides screen capture, log dump, and process
|
||||
examination capabilities. If you are developing in Eclipse using the ADT
|
||||
Plugin, DDMS is integrated into your development environment. See <a
|
||||
href="{@docRoot}guide/developing/debugging/ddms.html">Using DDMS</a> to learn more about the program.</dd>
|
||||
href="{@docRoot}tools/debugging/ddms.html">Using DDMS</a> to learn more about the program.</dd>
|
||||
|
||||
<dt id="dialog">Dialog</dt> <dd> A floating window that that acts as a lightweight
|
||||
form. A dialog can have button controls only and is intended to perform a
|
||||
@@ -131,7 +131,7 @@ page.title=Glossary
|
||||
is responsible for resolving the best-available receiver for each Intent,
|
||||
based on the criteria supplied in the Intent and the Intent Filters
|
||||
defined by other applications. For more information, see <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and
|
||||
Intent Filters</a>.
|
||||
<p>Related: <a href="#intentfilter">Intent Filter</a>, <a
|
||||
href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd>
|
||||
@@ -145,7 +145,7 @@ page.title=Glossary
|
||||
available intent filters in all applications and passes the Intent to the
|
||||
application/activity that best matches the Intent and criteria. For more
|
||||
information, see <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and
|
||||
Intent Filters</a>.
|
||||
<p>Related: <a href="#intent">Intent</a>, <a
|
||||
href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd>
|
||||
|
||||
@@ -174,7 +174,7 @@ external storage, it can never receive this broadcast.</dd>
|
||||
<dt>Copy Protection</dt>
|
||||
<dd>Your application cannot be installed to a device's SD card if it uses Google Play's
|
||||
Copy Protection feature. However, if you use Google Play's
|
||||
<a href="{@docRoot}guide/market/licensing.html">Application Licensing</a> instead, your
|
||||
<a href="{@docRoot}guide/google/play/licensing.html">Application Licensing</a> instead, your
|
||||
application <em>can</em> be installed to internal or external storage, including SD cards.</dd>
|
||||
</dl>
|
||||
|
||||
@@ -198,7 +198,7 @@ applications that should allow installation on external storage, because games d
|
||||
provide additional services when inactive. When external storage becomes unavailable and a game
|
||||
process is killed, there should be no visible effect when the storage becomes available again and
|
||||
the user restarts the game (assuming that the game properly saved its state during the normal
|
||||
<a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>).</p>
|
||||
<a href="{@docRoot}guide/components/activities.html#Lifecycle">Activity lifecycle</a>).</p>
|
||||
|
||||
<p>If your application requires several megabytes for the APK file, you should
|
||||
carefully consider whether to enable the application to install on the external storage so that
|
||||
|
||||
@@ -268,9 +268,9 @@ no dither applied for 24-bit.
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (Low quality)</th>
|
||||
<th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (High quality)</th>
|
||||
<th style="background-color:#f3f3f3;font-weight:normal"><acronym title="High definition">HD</a> (Not available on all devices)</th>
|
||||
<th><acronym title="Standard definition">SD</a> (Low quality)</th>
|
||||
<th><acronym title="Standard definition">SD</a> (High quality)</th>
|
||||
<th><acronym title="High definition">HD</a> (Not available on all devices)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -40,8 +40,7 @@ page.title=Activities
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}resources/tutorials/hello-world.html">Hello World Tutorial</a></li>
|
||||
<li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
|
||||
<li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
|
||||
Stack</a></li>
|
||||
</ol>
|
||||
|
||||
@@ -65,7 +64,7 @@ in a stack (the "back stack"). When a new activity starts, it is pushed onto the
|
||||
takes user focus. The back stack abides to the basic "last in, first out" stack mechanism,
|
||||
so, when the user is done with the current activity and presses the <em>Back</em> button, it
|
||||
is popped from the stack (and destroyed) and the previous activity resumes. (The back stack is
|
||||
discussed more in the <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks
|
||||
discussed more in the <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks
|
||||
and Back Stack</a> document.)</p>
|
||||
|
||||
<p>When an activity is stopped because a new activity starts, it is notified of this change in state
|
||||
@@ -224,7 +223,7 @@ href="{@docRoot}guide/topics/manifest/data-element.html">{@code
|
||||
respond.</p>
|
||||
|
||||
<p>For more information about how your activities can respond to intents, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
|
||||
document.</p>
|
||||
|
||||
|
||||
@@ -329,7 +328,7 @@ the <a
|
||||
href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
|
||||
|
||||
<p>For more information about using intents, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
|
||||
Filters</a> document.</p>
|
||||
|
||||
|
||||
@@ -602,7 +601,7 @@ from the time {@link android.app.Activity#onPause onPause()} returns to the time
|
||||
definition in table 1 might still be killed by the system—but that would happen only in
|
||||
extreme circumstances when there is no other recourse. When an activity might be killed is
|
||||
discussed more in the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
|
||||
href="{@docRoot}guide/components/processes-and-threads.html">Processes and
|
||||
Threading</a> document.</p>
|
||||
|
||||
|
||||
@@ -772,6 +771,6 @@ android.app.Activity#onStop onStop()}.</p>
|
||||
|
||||
<p>For more information about how Android maintains a history of activities and
|
||||
enables user multitasking, continue with the <b><a
|
||||
href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
|
||||
href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
|
||||
Stack</a></b> document.</p>
|
||||
-->
|
||||
@@ -42,7 +42,7 @@ perform interprocess communication</li>
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
|
||||
<li><a href="{@docRoot}guide/components/services.html">Services</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
@@ -54,7 +54,7 @@ application component and does not run in the background indefinitely.</p>
|
||||
|
||||
<p>This document shows you how to create a bound service, including how to bind
|
||||
to the service from other application components. However, you should also refer to the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> document for additional
|
||||
href="{@docRoot}guide/components/services.html">Services</a> document for additional
|
||||
information about services in general, such as how to deliver notifications from a service, set
|
||||
the service to run in the foreground, and more.</p>
|
||||
|
||||
@@ -71,7 +71,7 @@ clients can use to interact with the service.</p>
|
||||
<div class="sidebox">
|
||||
<h3>Binding to a Started Service</h3>
|
||||
|
||||
<p>As discussed in the <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>
|
||||
<p>As discussed in the <a href="{@docRoot}guide/components/services.html">Services</a>
|
||||
document, you can create a service that is both started and bound. That is, the service can be
|
||||
started by calling {@link android.content.Context#startService startService()}, which allows the
|
||||
service to run indefinitely, and also allow a client to bind to the service by calling {@link
|
||||
@@ -170,7 +170,7 @@ can then extend within your service.</p>
|
||||
create a bound service, because it may require multithreading capabilities and
|
||||
can result in a more complicated implementation. As such, AIDL is not suitable for most applications
|
||||
and this document does not discuss how to use it for your service. If you're certain that you need
|
||||
to use AIDL directly, see the <a href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a>
|
||||
to use AIDL directly, see the <a href="{@docRoot}tools/aidl.html">AIDL</a>
|
||||
document.</p>
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ service, which must then handle multi-threading.</p>
|
||||
<p>For most applications, the service doesn't need to perform multi-threading, so using a {@link
|
||||
android.os.Messenger} allows the service to handle one call at a time. If it's important
|
||||
that your service be multi-threaded, then you should use <a
|
||||
href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a> to define your interface.</p>
|
||||
href="{@docRoot}tools/aidl.html">AIDL</a> to define your interface.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -625,7 +625,7 @@ multiple activities in your application bind to the same service and there is a
|
||||
two of those activities, the service may be destroyed and recreated as the current activity unbinds
|
||||
(during pause) before the next one binds (during resume). (This activity transition for how
|
||||
activities coordinate their lifecycles is described in the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#CoordinatingActivities">Activities</a>
|
||||
href="{@docRoot}guide/components/activities.html#CoordinatingActivities">Activities</a>
|
||||
document.)</p>
|
||||
</ul>
|
||||
|
||||
@@ -668,7 +668,7 @@ onRebind()} returns void, but the client still receives the {@link android.os.IB
|
||||
Below, figure 1 illustrates the logic for this kind of lifecycle.</p>
|
||||
|
||||
<p>For more information about the lifecycle of an started service, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html#Lifecycle">Services</a> document.</p>
|
||||
href="{@docRoot}guide/components/services.html#Lifecycle">Services</a> document.</p>
|
||||
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ you can reuse in different activities).</p>
|
||||
affected by the host activity's lifecycle. For example, when the activity is paused, so are all
|
||||
fragments in it, and when the activity is destroyed, so are all fragments. However, while an
|
||||
activity is running (it is in the <em>resumed</em> <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">lifecycle state</a>), you can
|
||||
href="{@docRoot}guide/components/activities.html#Lifecycle">lifecycle state</a>), you can
|
||||
manipulate each fragment independently, such as add or remove them. When you perform such a
|
||||
fragment transaction, you can also add it to a back stack that's managed by the
|
||||
activity—each back stack entry in the activity is a record of the fragment transaction that
|
||||
@@ -499,7 +499,7 @@ usually not necessary unless the transaction is a dependency for jobs in other t
|
||||
|
||||
<p class="caution"><strong>Caution:</strong> You can commit a transaction using {@link
|
||||
android.app.FragmentTransaction#commit commit()} only prior to the activity <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">saving its
|
||||
href="{@docRoot}guide/components/activities.html#SavingActivityState">saving its
|
||||
state</a> (when the user leaves the activity). If you attempt to commit after that point, an
|
||||
exception will be thrown. This is because the state after the commit can be lost if the activity
|
||||
needs to be restored. For situations in which its okay that you lose the commit, use {@link
|
||||
@@ -690,14 +690,14 @@ either {@link android.app.Fragment#onCreate onCreate()}, {@link
|
||||
android.app.Fragment#onCreateView onCreateView()}, or {@link
|
||||
android.app.Fragment#onActivityCreated onActivityCreated()}. For more information about saving
|
||||
state, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
|
||||
href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
|
||||
document.</p>
|
||||
|
||||
<p>The most significant difference in lifecycle between an activity and a fragment is how one is
|
||||
stored in its respective back stack. An activity is placed into a back stack of activities
|
||||
that's managed by the system when it's stopped, by default (so that the user can navigate back
|
||||
to it with the <em>Back</em> button, as discussed in <a
|
||||
href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>).
|
||||
href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>).
|
||||
However, a fragment is placed into a back stack managed by the host activity only when you
|
||||
explicitly request that the instance be saved by calling {@link
|
||||
android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} during a transaction that
|
||||
@@ -705,7 +705,7 @@ removes the fragment.</p>
|
||||
|
||||
<p>Otherwise, managing the fragment lifecycle is very similar to managing the activity
|
||||
lifecycle. So, the same practices for <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">managing the activity
|
||||
href="{@docRoot}guide/components/activities.html#Lifecycle">managing the activity
|
||||
lifecycle</a> also apply to fragments. What you also need to understand, though, is how the life
|
||||
of the activity affects the life of the fragment.</p>
|
||||
|
||||
@@ -123,7 +123,7 @@ activities (if the email application allows it). For example, a camera applicati
|
||||
activity in the email application that composes new mail, in order for the user to share a picture.
|
||||
|
||||
<p>An activity is implemented as a subclass of {@link android.app.Activity} and you can learn more
|
||||
about it in the <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
|
||||
about it in the <a href="{@docRoot}guide/components/activities.html">Activities</a>
|
||||
developer guide.</p>
|
||||
</dd>
|
||||
|
||||
@@ -138,7 +138,7 @@ blocking user interaction with an activity. Another component, such as an activi
|
||||
service and let it run or bind to it in order to interact with it.
|
||||
|
||||
<p>A service is implemented as a subclass of {@link android.app.Service} and you can learn more
|
||||
about it in the <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer
|
||||
about it in the <a href="{@docRoot}guide/components/services.html">Services</a> developer
|
||||
guide.</p>
|
||||
</dd>
|
||||
|
||||
@@ -262,11 +262,11 @@ android.content.ContentProvider#query query()} on a {@link android.content.Conte
|
||||
</ul>
|
||||
|
||||
<p>For more information about using intents, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and
|
||||
Intent Filters</a> document. More information about activating specific components is also provided
|
||||
in the following documents: <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>, <a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>, {@link
|
||||
href="{@docRoot}guide/components/activities.html">Activities</a>, <a
|
||||
href="{@docRoot}guide/components/services.html">Services</a>, {@link
|
||||
android.content.BroadcastReceiver} and <a
|
||||
href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p>
|
||||
|
||||
@@ -283,7 +283,7 @@ such as:</p>
|
||||
<ul>
|
||||
<li>Identify any user permissions the application requires, such as Internet access or
|
||||
read-access to the user's contacts.</li>
|
||||
<li>Declare the minimum <a href="{@docRoot}guide/appendix/api-levels.html">API Level</a>
|
||||
<li>Declare the minimum <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a>
|
||||
required by the application, based on which APIs the application uses.</li>
|
||||
<li>Declare hardware and software features used or required by the application, such as a camera,
|
||||
bluetooth services, or a multitouch screen.</li>
|
||||
@@ -380,7 +380,7 @@ activity and launches it when you invoke the intent with {@link android.app.Acti
|
||||
startActivity()}.</p>
|
||||
|
||||
<p>For more about creating intent filters, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a> document.
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> document.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -396,7 +396,7 @@ them, but external services such as Google Play do read them in order to provide
|
||||
for users when they search for applications from their device.</p>
|
||||
|
||||
<p>For example, if your application requires a camera and uses APIs introduced in Android 2.1 (<a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Level</a> 7), you should declare these as
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7), you should declare these as
|
||||
requirements in your manifest file. That way, devices that do <em>not</em> have a camera and have an
|
||||
Android version <em>lower</em> than 2.1 cannot install your application from Google Play.</p>
|
||||
|
||||
@@ -450,7 +450,7 @@ element.</dd>
|
||||
such as Android 1.6 or Android 2.3. Each successive version often includes additional APIs not
|
||||
available in the previous version. In order to indicate which set of APIs are available, each
|
||||
platform version specifies an <a
|
||||
href="{@docRoot}guide/appendix/api-levels.html">API Level</a> (for example, Android 1.0 is API Level
|
||||
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> (for example, Android 1.0 is API Level
|
||||
1 and Android 2.3 is API Level 9). If you use any APIs that were added to the platform after
|
||||
version 1.0, you should declare the minimum API Level in which those APIs were introduced using the
|
||||
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
|
||||
@@ -463,7 +463,7 @@ applications are available on each device. As such, your application should be a
|
||||
devices that meet all your application requirements.</p>
|
||||
|
||||
<p>For more information about how Google Play filters applications based on these (and other)
|
||||
requirements, see the <a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>
|
||||
requirements, see the <a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>
|
||||
document.</p>
|
||||
|
||||
|
||||
@@ -514,5 +514,5 @@ href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> dev
|
||||
|
||||
<p>For a close look at implementing activities—the components your users use to
|
||||
interact with your application—continue with the <b><a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a></b> document.</p>
|
||||
href="{@docRoot}guide/components/activities.html">Activities</a></b> document.</p>
|
||||
-->
|
||||
56
docs/html/guide/components/index.jd
Normal file
56
docs/html/guide/components/index.jd
Normal file
@@ -0,0 +1,56 @@
|
||||
page.title=App Components
|
||||
page.landing=true
|
||||
page.landing.intro=Android's application framework lets you create extremely rich and innovative apps using a set of reusable components. This section explains how Android apps work and how you use components to build them.
|
||||
page.landing.image=images/develop/app_components.png
|
||||
|
||||
@jd:body
|
||||
|
||||
<div class="landing-docs">
|
||||
|
||||
<div class="col-6">
|
||||
<h3>Blog Articles</h3>
|
||||
|
||||
<a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
|
||||
<h4>Using DialogFragments</h4>
|
||||
<p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p>
|
||||
</a>
|
||||
|
||||
<a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
|
||||
<h4>Fragments For All</h4>
|
||||
<p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
|
||||
<h4>Multithreading for Performance</h4>
|
||||
<p>A good practice in creating responsive applications is to make sure your main UI thread
|
||||
does the minimum amount of work. Any potentially long task that may hang your application should be
|
||||
handled in a different thread.</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
<h3>Training</h3>
|
||||
|
||||
<a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
|
||||
<h4>Managing the Activity Lifecycle</h4>
|
||||
<p>This class explains important lifecycle callback methods that each Activity
|
||||
instance receives and how you can use them so your activity does what the user expects and does not consume system
|
||||
resources when your activity doesn't need them.</p>
|
||||
</a>
|
||||
|
||||
<a href="http://developer.android.com/training/basics/fragments/index.html">
|
||||
<h4>Building a Dynamic UI with Fragments</h4>
|
||||
<p>This class shows you how to create a dynamic user experience with fragments and optimize
|
||||
your app's user experience for devices with different screen sizes, all while continuing to support
|
||||
devices running versions as old as Android 1.6.</p>
|
||||
</a>
|
||||
|
||||
<a href="http://developer.android.com/training/sharing/index.html">
|
||||
<h4>Sharing Content</h4>
|
||||
<p>This class covers some common ways you can send and receive content between
|
||||
applications using Intent APIs and the ActionProvider object.</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -30,12 +30,11 @@ down the user interface</li>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>When an application component starts and the process that should host that thread is not already
|
||||
<p>When an application component starts and the application does not have any other components
|
||||
running, the Android system starts a new Linux process for the application with a single thread of
|
||||
execution. By default, all components of the same application run in the same process and thread
|
||||
(called the "main" thread). If an application component starts and there already exists a process
|
||||
for that application (because another component from the application exists or Android has been
|
||||
able to retain its previous process cached in the background), then the component is
|
||||
for that application (because another component from the application exists), then the component is
|
||||
started within that process and uses the same thread of execution. However, you can arrange for
|
||||
different components in your application to run in separate processes, and you can create additional
|
||||
threads for any process.</p>
|
||||
@@ -87,10 +86,7 @@ components running in the process and the state of those components. Processes
|
||||
importance are eliminated first, then those with the next lowest importance, and so on, as necessary
|
||||
to recover system resources.</p>
|
||||
|
||||
<p>The exact mapping of processes to importance and the management of these processes is
|
||||
an implementation detail of the platform that changes over time. Broadly speaking, there
|
||||
are five levels in the current implementation that are of most relevance to application
|
||||
developers. The following list presents these different
|
||||
<p>There are five levels in the importance hierarchy. The following list presents the different
|
||||
types of processes in order of importance (the first process is <em>most important</em> and is
|
||||
<em>killed last</em>):</p>
|
||||
|
||||
@@ -104,15 +100,18 @@ types of processes in order of importance (the first process is <em>most importa
|
||||
android.app.Activity}'s {@link android.app.Activity#onResume onResume()} method has been
|
||||
called).</li>
|
||||
|
||||
<li>It hosts a {@link android.app.Service} that's bound to the activity that the user is
|
||||
interacting with.</li>
|
||||
|
||||
<li>It hosts a {@link android.app.Service} that's running "in the foreground"—the
|
||||
service has called {@link android.app.Service#startForeground startForeground()}.
|
||||
|
||||
<li>It hosts a {@link android.app.Service} that's executing one of its lifecycle
|
||||
callbacks ({@link android.app.Service#onCreate onCreate()}, {@link android.app.Service#onStart
|
||||
onStart()}, or {@link android.app.Service#onDestroy onDestroy()}).</li>
|
||||
|
||||
<li>It hosts a {@link android.content.BroadcastReceiver} that's executing its {@link
|
||||
android.content.BroadcastReceiver#onReceive onReceive()} method.</li>
|
||||
|
||||
<li>Another foreground process has a dependency on this one: either bound
|
||||
to a Service in this process, or using a Content Provider of the process.</li>
|
||||
</ul>
|
||||
|
||||
<p>Generally, only a few foreground processes exist at any given time. They are killed only as
|
||||
@@ -131,79 +130,43 @@ visible to the user (its {@link android.app.Activity#onPause onPause()} method h
|
||||
This might occur, for example, if the foreground activity started a dialog, which allows the
|
||||
previous activity to be seen behind it.</li>
|
||||
|
||||
<li>Another visible process has a dependency on this one: either bound
|
||||
to a Service in this process, or using a Content Provider of the process.</li>
|
||||
<li>It hosts a {@link android.app.Service} that's bound to a visible (or foreground)
|
||||
activity.</li>
|
||||
</ul>
|
||||
|
||||
<p>A visible process is considered extremely important and will not be killed unless doing so
|
||||
is required to keep all foreground processes running. </p>
|
||||
</li>
|
||||
|
||||
<li><b>Perceptible process</b>
|
||||
<p>A process that doesn't have any foreground or visible components, but is still
|
||||
doing something that is directly perceptible by the user. A classic example of such
|
||||
a process would be one doing background music playback. The main way applications
|
||||
get into this state is through {@link android.app.Service#startForeground} or because
|
||||
another perceptible process has a dependency on one of its services or content
|
||||
providers. In addition, as of {@link android.os.Build.VERSION_CODES#HONEYCOMB},
|
||||
processes can go into this state when {@link android.app.Activity#onStop
|
||||
Activity.onStop()} is executing, allowing the process to continue executing
|
||||
critical code after no longer being visible to the user but before going
|
||||
fully into the background.</p>
|
||||
|
||||
<p>Like visible processes, a perceptible process is considered extremely important
|
||||
and will not be killed unless doing so is required to keep all foreground and
|
||||
visible processes running. </p>
|
||||
</li>
|
||||
|
||||
<li><b>Service process</b>
|
||||
<p>A process that is running a service that has been started with the {@link
|
||||
android.content.Context#startService startService()} method and does not fall into any of the
|
||||
android.content.Context#startService startService()} method and does not fall into either of the two
|
||||
higher categories. Although service processes are not directly tied to anything the user sees, they
|
||||
are generally doing things that the user cares about (such as downloading a file the user has requested),
|
||||
so the system keeps them running unless there's not enough memory to retain them along with all
|
||||
foreground and visible processes. </p>
|
||||
|
||||
<p>Even though Android tries to keep these processes running, it is considered normal
|
||||
operation for them to temporarily be killed to support the needs of more important
|
||||
processes. For example, if the user opens a very heavy-weight web page that needs
|
||||
most of the device's RAM, background services may be temporarily killed to satisfy
|
||||
those needs. Services in these processes thus must be prepared to deal gracefully
|
||||
with being killed while doing their work and later restarted.</p>
|
||||
|
||||
<p>In recent implementations of Android, there are actually a number of sub-divisions
|
||||
in this area for processes that Android considers more important to the user and so
|
||||
would like to try harder to keep around. For example, the process hosting the current
|
||||
home app is generally kept in this area so that the user will not see long delays in
|
||||
returning home because that process has been killed.</p>
|
||||
are generally doing things that the user cares about (such as playing music in the background or
|
||||
downloading data on the network), so the system keeps them running unless there's not enough memory
|
||||
to retain them along with all foreground and visible processes. </p>
|
||||
</li>
|
||||
|
||||
<li><b>Background (cached) process</b>
|
||||
<p>The final importance level is for processes that are not of current significance.
|
||||
This is basically any process that does not fall into one of the previous levels.
|
||||
These processes have no direct impact on the user experience, and the system can kill
|
||||
them at any time to reclaim memory for the other more important processes.
|
||||
This includes everything from processes holding running activity objects that are not currently
|
||||
visible to the user (the activity's {@link android.app.Activity#onStop onStop()}
|
||||
method has been called) to processes that have no active code at all but may be
|
||||
useful to keep around in case they are needed in the near future.</p>
|
||||
|
||||
<p>Usually there are many background processes being maintained, so they are kept
|
||||
in an LRU list to allow older processes to be killed before more recent ones. This
|
||||
helps reduce the frequency that new processes need to be creating, facilitating things
|
||||
like more rapid switching between the applications the user has recently visited.
|
||||
However, processes in this state must deal correctly with being killed and later
|
||||
restarted when needed. For example, if an activity implements its lifecycle methods
|
||||
<li><b>Background process</b>
|
||||
<p>A process holding an activity that's not currently visible to the user (the activity's
|
||||
{@link android.app.Activity#onStop onStop()} method has been called). These processes have no direct
|
||||
impact on the user experience, and the system can kill them at any time to reclaim memory for a
|
||||
foreground,
|
||||
visible, or service process. Usually there are many background processes running, so they are kept
|
||||
in an LRU (least recently used) list to ensure that the process with the activity that was most
|
||||
recently seen by the user is the last to be killed. If an activity implements its lifecycle methods
|
||||
correctly, and saves its current state, killing its process will not have a visible effect on
|
||||
the user experience, because when the user navigates back to the activity, the activity restores
|
||||
all of its visible state. See the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
|
||||
href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
|
||||
document for information about saving and restoring state.</p>
|
||||
</li>
|
||||
|
||||
<p>Android may also employ other additional policies for killing background processes. For
|
||||
example, there are typically restrictions on a maximum number of such processes to
|
||||
keep around, and limits on the amount of time they can spend holding wake locks
|
||||
or consuming CPU power until they will be removed.</p>
|
||||
<li><b>Empty process</b>
|
||||
<p>A process that doesn't hold any active application components. The only reason to keep this
|
||||
kind of process alive is for caching purposes, to improve startup time the next time a component
|
||||
needs to run in it. The system often kills these processes in order to balance overall system
|
||||
resources between process caches and the underlying kernel caches.</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
@@ -213,48 +176,23 @@ components currently active in the process. For example, if a process hosts a s
|
||||
activity, the process is ranked as a visible process, not a service process.</p>
|
||||
|
||||
<p>In addition, a process's ranking might be increased because other processes are dependent on
|
||||
it—a process that is serving another process can not generally be ranked lower than the process it is
|
||||
it—a process that is serving another process can never be ranked lower than the process it is
|
||||
serving. For example, if a content provider in process A is serving a client in process B, or if a
|
||||
service in process A has been bound to by a client in process B, process A is always considered at least
|
||||
service in process A is bound to a component in process B, process A is always considered at least
|
||||
as important as process B.</p>
|
||||
|
||||
<p>Because a process running a service is ranked higher than a process with background activities,
|
||||
an activity that initiates a long-running operation may sometimes start a <a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html">service</a> for that operation, rather than
|
||||
simply create a worker thread—but only when the operation is a specific task that needs
|
||||
to be accomplished regardless of whether the user returns to the application.
|
||||
an activity that initiates a long-running operation might do well to start a <a
|
||||
href="{@docRoot}guide/components/services.html">service</a> for that operation, rather than
|
||||
simply create a worker thread—particularly if the operation will likely outlast the activity.
|
||||
For example, an activity that's uploading a picture to a web site should start a service to perform
|
||||
the upload so that the upload can continue in the background even if the user leaves the activity.
|
||||
Using a service guarantees that the operation will have at least "service process" priority,
|
||||
regardless of what happens to the activity. This is not however an approach that should always
|
||||
be used. It would not be appropriate when simply downloading the data for a web page, since
|
||||
that can easily be restarted later if the user returns to the web browser. Allowing
|
||||
such a process to be in the background (instead of running a service) gives Android better
|
||||
information about how to manage that process in relation to others.
|
||||
regardless of what happens to the activity. This is the same reason that broadcast receivers should
|
||||
employ services rather than simply put time-consuming operations in a thread.</p>
|
||||
|
||||
<p>For a similar reason, broadcast receivers will often employ services rather than
|
||||
simply put time-consuming operations in a thread.</p>
|
||||
|
||||
<p>Some command line tools are available to help you understand how Android is managing
|
||||
its processes. The most common command is <code>adb shell dumpsys activity</code>
|
||||
which provides a summary of various key state, including at the end a list of the
|
||||
process states, one per line (plus an optional second line for any key dependency
|
||||
on that process), ordered from higher importance to lowest. The exact
|
||||
contents of these lines has changed across different versions of Android, but the
|
||||
typical state for one process in the list would be:</p>
|
||||
<pre>
|
||||
Proc # 2: adj=prcp /F trm= 0 848:com.google.android.inputmethod.latin/u0a32 (service)
|
||||
com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME<=Proc{417:system/1000}
|
||||
</pre>
|
||||
|
||||
<p>This is a perceptible process (adj=prcp) that is running with the foreground
|
||||
scheduling class (/F), and has not recently been told to trim any memory
|
||||
(trm= 0). Its process id is 848; its name is com.google.android.inputmethod.latin;
|
||||
its Linux uid is u0a32 (10032), and the key state contributing to its current
|
||||
importance level is a service.</p>
|
||||
|
||||
<p>The second line provides the name of the service that is important, because another
|
||||
process has a dependency on it (here the system process).</p>
|
||||
|
||||
<h2 id="Threads">Threads</h2>
|
||||
|
||||
@@ -283,7 +221,7 @@ database queries will block the whole UI. When the thread is blocked, no events
|
||||
including drawing events. From the user's perspective, the
|
||||
application appears to hang. Even worse, if the UI thread is blocked for more than a few seconds
|
||||
(about 5 seconds currently) the user is presented with the infamous "<a
|
||||
href="http://developer.android.com/guide/practices/design/responsiveness.html">application not
|
||||
href="http://developer.android.com/guide/practices/responsiveness.html">application not
|
||||
responding</a>" (ANR) dialog. The user might then decide to quit your application and uninstall it
|
||||
if they are unhappy.</p>
|
||||
|
||||
@@ -436,7 +374,7 @@ href="http://code.google.com/p/shelves/">Shelves</a> sample application.</p>
|
||||
therefore must be written to be thread-safe. </p>
|
||||
|
||||
<p>This is primarily true for methods that can be called remotely—such as methods in a <a
|
||||
href="{@docRoot}guide/topics/fundamentals/bound-services.html">bound service</a>. When a call on a
|
||||
href="{@docRoot}guide/components/bound-services.html">bound service</a>. When a call on a
|
||||
method implemented in an {@link android.os.IBinder} originates in the same process in which the
|
||||
{@link android.os.IBinder IBinder} is running, the method is executed in the caller's thread.
|
||||
However, when the call originates in another process, the method is executed in a thread chosen from
|
||||
@@ -474,7 +412,7 @@ transactions, so you can focus on defining and implementing the RPC programming
|
||||
|
||||
<p>To perform IPC, your application must bind to a service, using {@link
|
||||
android.content.Context#bindService bindService()}. For more information, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer guide.</p>
|
||||
href="{@docRoot}guide/components/services.html">Services</a> developer guide.</p>
|
||||
|
||||
|
||||
<!--
|
||||
@@ -482,5 +420,5 @@ href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer
|
||||
|
||||
<p>For information about how to perform work in the background for an indefinite period of time
|
||||
(without a user interface), continue with the <b><a
|
||||
href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></b> document.</p>
|
||||
href="{@docRoot}guide/components/services.html">Services</a></b> document.</p>
|
||||
-->
|
||||
@@ -58,7 +58,7 @@ perform interprocess communication</li>
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a></li>
|
||||
<li><a href="{@docRoot}guide/components/bound-services.html">Bound Services</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -128,7 +128,7 @@ a thread in {@link android.app.Activity#onCreate onCreate()}, start running it i
|
||||
android.app.Activity#onStart onStart()}, then stop it in {@link android.app.Activity#onStop
|
||||
onStop()}. Also consider using {@link android.os.AsyncTask} or {@link android.os.HandlerThread},
|
||||
instead of the traditional {@link java.lang.Thread} class. See the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes and
|
||||
href="{@docRoot}guide/components/processes-and-threads.html#Threads">Processes and
|
||||
Threading</a> document for more information about threads.</p>
|
||||
<p>Remember that if you do use a service, it still runs in your application's main thread by
|
||||
default, so you should still create a new thread within the service if it performs intensive or
|
||||
@@ -190,7 +190,7 @@ by the system. If the system kills your service, it restarts it as soon as resou
|
||||
available again (though this also depends on the value you return from {@link
|
||||
android.app.Service#onStartCommand onStartCommand()}, as discussed later). For more information
|
||||
about when the system might destroy a service, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and Threading</a>
|
||||
href="{@docRoot}guide/components/processes-and-threads.html">Processes and Threading</a>
|
||||
document.</p>
|
||||
|
||||
<p>In the following sections, you'll see how you can create each type of service and how to use
|
||||
@@ -252,7 +252,7 @@ attribute and set it to {@code "false"}. This is effective even if your service
|
||||
filters.</p>
|
||||
|
||||
<p>For more information about creating intent filters for your service, see the <a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
|
||||
document.</p>
|
||||
|
||||
|
||||
@@ -643,7 +643,7 @@ there are no clients bound to the service, the system destroys the service.</p>
|
||||
<p>There are multiple ways to implement a bound service and the implementation is more
|
||||
complicated than a started service, so the bound service discussion appears in a separate
|
||||
document about <a
|
||||
href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a>.</p>
|
||||
href="{@docRoot}guide/components/bound-services.html">Bound Services</a>.</p>
|
||||
|
||||
|
||||
|
||||
@@ -857,10 +857,10 @@ can still receive a call to {@link android.app.Service#onBind onBind()} (when a
|
||||
{@link android.content.Context#bindService bindService()}).</p>
|
||||
|
||||
<p>For more information about creating a service that provides binding, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a> document,
|
||||
href="{@docRoot}guide/components/bound-services.html">Bound Services</a> document,
|
||||
which includes more information about the {@link android.app.Service#onRebind onRebind()}
|
||||
callback method in the section about <a
|
||||
href="{@docRoot}guide/topics/fundamentals/bound-services.html#Lifecycle">Managing the Lifecycle of
|
||||
href="{@docRoot}guide/components/bound-services.html#Lifecycle">Managing the Lifecycle of
|
||||
a Bound Service</a>.</p>
|
||||
|
||||
|
||||
@@ -29,14 +29,13 @@ to perform other tasks without losing their work</li>
|
||||
|
||||
<h2>Articles</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}resources/articles/multitasking-android-way.html">Multitasking the Android Way</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/2010/04/multitasking-android-way.html">Multitasking the Android Way</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}design/patterns/navigation.html">Android Design:
|
||||
Navigation</a></li>
|
||||
<li><a href="{@docRoot}videos/index.html#v=fL6gSd4ugSI">Application Lifecycle video</a></li>
|
||||
<li><a
|
||||
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>} manifest
|
||||
element</a></li>
|
||||
@@ -46,7 +45,7 @@ element</a></li>
|
||||
|
||||
|
||||
<p>An application usually contains multiple <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html">activities</a>. Each activity
|
||||
href="{@docRoot}guide/components/activities.html">activities</a>. Each activity
|
||||
should be designed around a specific kind of action the user can perform and can start other
|
||||
activities. For example, an email application might have one activity to show a list of new email.
|
||||
When the user selects an email, a new activity opens to view that email.</p>
|
||||
@@ -210,7 +209,7 @@ android.app.Activity#onSaveInstanceState onSaveInstanceState()} callback
|
||||
methods in your activity.</p>
|
||||
|
||||
<p>For more information about how to save your activity state, see the <a
|
||||
href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
|
||||
href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
|
||||
document.</p>
|
||||
|
||||
|
||||
@@ -591,6 +590,6 @@ href="#Clearing">Clearing the stack</a>).</p>
|
||||
<p>For more information about how to use intents to
|
||||
activate other application components and publish the intents to which your components
|
||||
respond, continue with the <b><a
|
||||
href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent
|
||||
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
|
||||
Filters</a></b> document.</p>
|
||||
-->
|
||||
@@ -1,10 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/projects/projects-eclipse.html">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>You should be redirected. Please <a
|
||||
href="http://developer.android.com/guide/developing/projects/projects-eclipse.html">click here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,10 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/projects/projects-cmdline.html">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>You should be redirected. Please <a
|
||||
href="http://developer.android.com/guide/developing/projects/projects-cmdline.html">click here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,36 +0,0 @@
|
||||
page.title=Testing
|
||||
@jd:body
|
||||
<p>
|
||||
Android includes powerful tools for setting up and running test applications.
|
||||
Whether you are working in Eclipse with ADT or working from the command line, these tools
|
||||
help you set up and run your tests within an emulator or the device you are targeting.
|
||||
The documents listed below explain how to work with the tools in your development environment.
|
||||
</p>
|
||||
<p>
|
||||
If you aren't yet familiar with the Android testing framework, please read the topic
|
||||
<a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>
|
||||
before you get started.
|
||||
For a step-by-step introduction to Android testing, try the <a
|
||||
href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello, Testing</a>
|
||||
tutorial, which introduces basic testing concepts and procedures.
|
||||
For a more advanced tutorial, try <a
|
||||
href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>,
|
||||
which guides you through a more complex testing scenario.
|
||||
</p>
|
||||
<dl>
|
||||
<dt><a href="testing_eclipse.html">Testing from Eclipse, with ADT</a></dt>
|
||||
<dd>
|
||||
The ADT plugin lets you quickly set up and manage test projects directly in
|
||||
the Eclipse UI. Once you have written your tests, you can build and run them and
|
||||
then see the results in the Eclipse JUnit view. You can also use the SDK command-line
|
||||
tools to execute your tests if needed.
|
||||
</dd>
|
||||
<dt><a href="testing_otheride.html">Testing from Other IDEs</a></dt>
|
||||
<dd>
|
||||
The SDK command-line tools provide the same capabilities as the ADT plugin. You can
|
||||
use them to set up and manage test projects, build your test application,
|
||||
run your tests, and see the results. You use
|
||||
the <code>android</code> tool to create and manage test projects, the Ant build system
|
||||
to compile them, and the <code>adb</code> tool to install and run them.
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1,10 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/building/index.html#detailed-build">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>You should be redirected. Please <a
|
||||
href="http://developer.android.com/guide/developing/building/index.html#detailed-build">click here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
97
docs/html/guide/google/index.jd
Normal file
97
docs/html/guide/google/index.jd
Normal file
@@ -0,0 +1,97 @@
|
||||
page.title=Google Services
|
||||
footer.hide=1
|
||||
@jd:body
|
||||
|
||||
|
||||
<p>Google offers a variety of services that help you build new revenue streams, enhance your app's capabilities, manage distribution and payloads, and track usage and installs. Many of the services use static libraries that you download through the Android SDK Manager and build into your app. Others are configurable directly from Google Play Android Developer Console.</p>
|
||||
|
||||
<p>The sections below highlight some of the Google Services and link you to more information about how to use them in your Android app. </p>
|
||||
|
||||
|
||||
<h2 id="monetization">Monetize Your App</h2>
|
||||
|
||||
<div class="vspace size-1"> </div>
|
||||
<div class="layout-content-row">
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>In-App Billing</h4>
|
||||
<p>Keep your users engaged by offering in-app purchases and subscriptions directly in your app.
|
||||
</p>
|
||||
<a href="{@docRoot}guide/google/play/billing/index.html">Learn more »</a>
|
||||
</div>
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>Google AdMob Ads</h4>
|
||||
<p>Generate more revenue from your app by
|
||||
displaying ads from multiple ad networks.</p>
|
||||
<a href="https://developers.google.com/mobile-ads-sdk/docs/android/fundamentals">Learn more »</a>
|
||||
</div>
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>Application Licensing</h4>
|
||||
<p>Protect your revenue streams and integrate policies for usage into your app.</p>
|
||||
<a href="{@docRoot}guide/google/play/licensing/index.html">Learn more »</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 id="integration">Manage App Distribution</h2>
|
||||
|
||||
<div class="vspace size-1"> </div>
|
||||
|
||||
<div class="layout-content-row">
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
|
||||
<h4>Google Play Filters</h4>
|
||||
<p>Make sure your app gets to the right users by
|
||||
declaring the hardware and software features needed by your app.</p>
|
||||
<a href="{@docRoot}guide/google/play/filters.html">Learn more »</a>
|
||||
</div>
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>Multiple APK Support</h4>
|
||||
<p>Distribute different APKs based on a variety of properties such as platform version, screen size, and GLES texture compression support.</p>
|
||||
<a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Learn more »</a>
|
||||
</div>
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
|
||||
<h4>APK Expansion files</h4>
|
||||
<p>Take load off of your servers and utilize APK expansion files
|
||||
to deliver up to 4 GB of assets for your Android app, free.</p>
|
||||
|
||||
<a href="{@docRoot}guide/google/play/expansion-files.html">Learn more »</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 id="integration">Enhance Your App's Capabilities</h2>
|
||||
|
||||
<div class="vspace size-1"> </div>
|
||||
|
||||
<div class="layout-content-row">
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>Android Cloud-to-Device Messaging </h4>
|
||||
<p>Notify your apps of events with push messages that are lightweight
|
||||
and battery-saving.</p>
|
||||
<a href="https://developers.google.com/android/c2dm/">Learn more »</a>
|
||||
</div>
|
||||
|
||||
<div class="layout-content-col span-4">
|
||||
<h4>Google Maps</h4>
|
||||
<p> The Google Maps library for Android lets you add powerful mapping and geo-location capabilities to your app.</p>
|
||||
<a href="https://developers.google.com/maps/documentation/android/">Learn more »</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<h2 id="integration">Track Performance with Analytics</h2>
|
||||
<p>Google Analytics gives you powerful insights into how users find your apps
|
||||
and how they use them. <br />Start integrating analytics to measure
|
||||
your app's success.</p>
|
||||
|
||||
|
||||
<div style="margin-bottom:1.5em;"><a href="https://developers.google.com/analytics/devguides/collection/android/">Learn more »</a></div>
|
||||
|
||||
12
docs/html/guide/google/play/billing/billing_about.html
Normal file
12
docs/html/guide/google/play/billing/billing_about.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh"
|
||||
content="0;url=http://developer.android.com/guide/google/play/billing/index.html">
|
||||
<title>Redirecting...</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>You should be redirected. Please <a
|
||||
href="http://developer.android.com/guide/google/play/billing/index.html">click
|
||||
here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -15,20 +15,20 @@ parent.link=index.html
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -39,13 +39,13 @@ few administrative tasks, including setting up and maintaining your product list
|
||||
site, registering test accounts, and handling refunds when necessary.</p>
|
||||
|
||||
<p>You must have a Google Play publisher account to register test accounts. And you must have a
|
||||
Google Checkout merchant account to create a product list and issue refunds to your users. If you
|
||||
Google Wallet merchant account to create a product list and issue refunds to your users. If you
|
||||
already have a publisher account on Google Play, you can use your existing account. You do not
|
||||
need to register for a new account to support in-app billing. If you do not have a publisher
|
||||
account, you can register as a Google Play developer and set up a publisher account at the
|
||||
Google Play <a href="http://play.google.com/apps/publish">publisher site</a>. If you do not have a
|
||||
Google Checkout merchant account, you can register for one at the <a
|
||||
href="http://checkout.google.com">Google Checkout site</a>.</p>
|
||||
Google Wallet merchant account, you can register for one at the <a
|
||||
href="http://checkout.google.com">Google Wallet site</a>.</p>
|
||||
|
||||
<h2 id="billing-list-setup">Creating a Product List</h2>
|
||||
|
||||
@@ -56,7 +56,7 @@ items that are listed in another application's product list.</p>
|
||||
|
||||
<p>You can access an application's product list by clicking the <strong>In-App Products</strong>
|
||||
link that appears under each of the applications that are listed for your publisher account (see
|
||||
figure 1). The <strong>In-App Products</strong> link appears only if you have a Google Checkout
|
||||
figure 1). The <strong>In-App Products</strong> link appears only if you have a Google Wallet
|
||||
merchant account and an application's manifest includes the <code>com.android.vending.BILLING</code>
|
||||
permission.</p>
|
||||
|
||||
@@ -66,7 +66,8 @@ permission.</p>
|
||||
<strong>In-App Products</strong> link.
|
||||
</p>
|
||||
|
||||
<p>A product list contains information about the items you are selling, such as a product id,
|
||||
<p>A product list specifies items you are selling in an application — in-app products,
|
||||
subscriptions, or a combination of both. For each item, the product list contains information such as a product id,
|
||||
product description, and price (see figure 2). The product list stores only metadata about the items
|
||||
you are selling in your application. It does not store any digital content. You are responsible for
|
||||
storing and delivering the digital content that you sell in your applications.</p>
|
||||
@@ -77,17 +78,17 @@ storing and delivering the digital content that you sell in your applications.</
|
||||
</p>
|
||||
|
||||
<p>You can create a product list for any published application or any draft application that's been
|
||||
uploaded and saved to the Google Play site. However, you must have a Google Checkout merchant
|
||||
uploaded and saved to the Google Play site. However, you must have a Google Wallet merchant
|
||||
account and the application's manifest must include the <code>com.android.vending.BILLING</code>
|
||||
permission. If an application's manifest does not include this permission, you will be able to edit
|
||||
existing items in the product list but you will not be able to add new items to the list. For more
|
||||
information about this permission, see
|
||||
<a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-permission">Updating Your
|
||||
<a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-permission">Updating Your
|
||||
Application's Manifest</a>.</p>
|
||||
|
||||
<p>In addition, an application package can have only one product list. If you create a product
|
||||
list for an application, and you use the <a
|
||||
href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APK feature</a> to distribute
|
||||
href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute
|
||||
more than one APK for that application, the product list applies to all APK versions that are
|
||||
associated with the application listing. You cannot create individual product lists for each APK if
|
||||
you are using the multiple APK feature.</p>
|
||||
@@ -99,6 +100,8 @@ application has only a few in-app items or you are adding only a few items to a
|
||||
product list for testing purposes. The CSV file method is useful if your application has a large
|
||||
number of in-app items.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
|
||||
|
||||
<h3 id="billing-form-add">Adding items one at a time to a product list</h3>
|
||||
|
||||
<p>To add an item to a product list using the In-app Products UI, follow these steps:</p>
|
||||
@@ -129,8 +132,8 @@ number of in-app items.</p>
|
||||
a product ID.</p>
|
||||
</li>
|
||||
<li><strong>Purchase Type</strong>
|
||||
<p>The purchase type can be <strong>Managed per user account</strong> or <strong>
|
||||
Unmanaged</strong>. You can never change an item's purchase type after you set it. For more
|
||||
<p>The purchase type can be <strong>Managed per user account</strong>, <strong>Unmanaged</strong>,
|
||||
or <strong>Subscription</strong>. You can never change an item's purchase type after you set it. For more
|
||||
information, see <a href="#billing-purchase-type">Choosing a purchase type</a> later in this
|
||||
document.</p>
|
||||
</li>
|
||||
@@ -140,7 +143,7 @@ number of in-app items.</p>
|
||||
<strong>Published</strong> and the item's application must be published on Google Play.</p>
|
||||
<p class="note"><strong>Note:</strong> This is not true for test accounts. An item is visible to
|
||||
a test account if the application is not published and the item is published. See <a
|
||||
href="{@docRoot}guide/market/billing/billing_testing.html#billing-testing-real">Testing In-app
|
||||
href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-real">Testing In-app
|
||||
Billing</a> for more information.</p>
|
||||
</li>
|
||||
<li><strong>Language</strong>
|
||||
@@ -171,6 +174,7 @@ number of in-app items.</p>
|
||||
<p>To specify prices in other currencies, you can manually enter the price for each
|
||||
currency or you can click <strong>Auto Fill</strong> and let Google Play do a one-time
|
||||
conversion from your home currency to the currencies you are targeting (see figure 4).</p>
|
||||
<p>For subscription items, note that you can not change the item's price once you have published it. </p>
|
||||
</li>
|
||||
</ul>
|
||||
<img src="{@docRoot}images/billing_list_form_2.png" height="1226" id="figure4" />
|
||||
@@ -193,7 +197,16 @@ or modify product IDs after you save them.</p>
|
||||
<p>To add a batch of items to a product list using a CSV file, you first need to create your CSV
|
||||
file. The data values that you specify in the CSV file represent the same data values you specify
|
||||
manually through the In-app Products UI (see <a href="#billing-form-add">Adding items one at a time
|
||||
to a product list</a>). The CSV file uses commas (,) and semi-colons (;) to separate data values.
|
||||
to a product list</a>).
|
||||
|
||||
<p>If you are importing and exporting CSV files with in-app products, please
|
||||
keep tax-inclusive pricing in mind. If you use auto-fill, you can provide a
|
||||
tax-exclusive default price and tax-inclusive prices will be auto-filled. If you
|
||||
do not use auto-fill, prices you provide must include tax.</p>
|
||||
|
||||
<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
|
||||
|
||||
The CSV file uses commas (,) and semi-colons (;) to separate data values.
|
||||
Commas are used to separate primary data values, and semi-colons are used to separate subvalues. For
|
||||
example, the syntax for the CSV file is as follows:</p>
|
||||
|
||||
@@ -419,17 +432,17 @@ times.</p>
|
||||
|
||||
<p>In-app billing does not allow users to send a refund request to Google Play. Refunds for
|
||||
in-app purchases must be directed to you (the application developer). You can then process the
|
||||
refund through your Google Checkout merchant account. When you do this, Google Play receives a
|
||||
refund notification from Google Checkout, and Google Play sends a refund message to your
|
||||
refund through your Google Wallet merchant account. When you do this, Google Play receives a
|
||||
refund notification from Google Wallet, and Google Play sends a refund message to your
|
||||
application. For more information, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
|
||||
IN_APP_NOTIFY messages</a> and <a
|
||||
href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
|
||||
Pricing</a>.</p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> You cannot use the Google Checkout API to issue
|
||||
<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to issue
|
||||
refunds or cancel in-app billing transactions. You must do this manually through your Google
|
||||
Checkout merchant account. However, you can use the Google Checkout API to retrieve order
|
||||
Wallet merchant account. However, you can use the Google Wallet API to retrieve order
|
||||
information.</p>
|
||||
|
||||
<h2 id="billing-testing-setup">Setting Up Test Accounts</h2>
|
||||
@@ -11,20 +11,20 @@ parent.link=index.html
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@ sure to encrypt the content and use a device-specific encryption key.</p>
|
||||
<p>You should obfuscate your in-app billing code so it is difficult for an attacker to reverse
|
||||
engineer security protocols and other application components. At a minimum, we recommend that you
|
||||
run an obfuscation tool like <a
|
||||
href="http://developer.android.com/guide/developing/tools/proguard.html">Proguard</a> on your
|
||||
href="http://developer.android.com/tools/proguard.html">Proguard</a> on your
|
||||
code.</p>
|
||||
<p>In addition to running an obfuscation program, we recommend that you use the following techniques
|
||||
to obfuscate your in-app billing code.</p>
|
||||
@@ -21,15 +21,15 @@ parent.link=index.html
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -41,8 +41,8 @@ you implement in-app billing by stepping through the primary implementation task
|
||||
billing sample application as an example.</p>
|
||||
|
||||
<p>Before you implement in-app billing in your own application, be sure that you read <a
|
||||
href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app Billing</a> and <a
|
||||
href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>. These
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app Billing</a> and <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>. These
|
||||
documents provide background information that will make it easier for you to implement in-app
|
||||
billing.</p>
|
||||
|
||||
@@ -214,7 +214,7 @@ following:</p>
|
||||
</li>
|
||||
<li><strong>Build the sample application in release mode and sign it.</strong>
|
||||
<p>To learn how to build and sign applications, see <a
|
||||
href="{@docRoot}guide/developing/building/index.html">Building and Running</a>.</p>
|
||||
href="{@docRoot}tools/building/index.html">Building and Running</a>.</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
@@ -238,11 +238,11 @@ how to do this.</p>
|
||||
your product list so that <code>sword_001</code> has a purchase type of "Managed per user
|
||||
account" and <code>potion_001</code> has a purchase type of "Unmanaged" so you can see how these
|
||||
two purchase types behave. To learn how to set up a product list, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-list-setup">Creating a Product
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">Creating a Product
|
||||
List</a>.</p>
|
||||
<p class="note"><strong>Note:</strong> You must publish the items in your product
|
||||
list (<code>sword_001</code> and <code>potion_001</code>) even though you are not publishing the
|
||||
sample application. Also, you must have a Google Checkout Merchant account to add items to the
|
||||
sample application. Also, you must have a Google Wallet Merchant account to add items to the
|
||||
sample application's product list.</p>
|
||||
</li>
|
||||
</ol>
|
||||
@@ -255,10 +255,10 @@ onto a device to run it. To run the sample application, do the following:</p>
|
||||
<ol>
|
||||
<li><strong>Make sure you have at least one test account registered under your Google Play
|
||||
publisher account.</strong>
|
||||
<p>You cannot purchase items from yourself (Google Checkout prohibits this), so you need to
|
||||
<p>You cannot purchase items from yourself (Google Wallet prohibits this), so you need to
|
||||
create at least one test account that you can use to purchase items in the sample application.
|
||||
To learn how to set up a test account, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_testing.html#billing-testing-setup">Setting up Test
|
||||
href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-setup">Setting up Test
|
||||
Accounts</a>.</p>
|
||||
</li>
|
||||
<li><strong>Verify that your device is running a supported version of the Google Play
|
||||
@@ -274,12 +274,12 @@ onto a device to run it. To run the sample application, do the following:</p>
|
||||
<p>Even though you uploaded the application to Google Play, the application is not published,
|
||||
so you cannot download it from Google Play to a device. Instead, you must install the
|
||||
application onto your device. To learn how to install an application onto a device, see <a
|
||||
href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
device</a>.</p>
|
||||
</li>
|
||||
<li><strong>Make one of your test accounts the primary account on your device.</strong>
|
||||
<p>The primary account on your device must be one of the <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a>
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
|
||||
that you registered on the Google Play publisher site. If the primary account on your device is not a
|
||||
test account, you must do a factory reset of the device and then sign in with one of your test
|
||||
accounts. To perform a factory reset, do the following:</p>
|
||||
@@ -294,7 +294,7 @@ onto a device to run it. To run the sample application, do the following:</p>
|
||||
</li>
|
||||
<li><strong>Run the application and purchase the sword or the potion.</strong>
|
||||
<p>When you use a test account to purchase items, the test account is billed through Google
|
||||
Checkout and your Google Checkout Merchant account receives a payout for the purchase.
|
||||
Wallet and your Google Wallet Merchant account receives a payout for the purchase.
|
||||
Therefore, you may want to refund purchases that are made with test accounts, otherwise the
|
||||
purchases will show up as actual payouts to your merchant account.</p>
|
||||
</ol>
|
||||
@@ -466,7 +466,7 @@ indicates the item being purchased, and another identifies your application. The
|
||||
code. However, this is not the complete purchase response; the complete response is delivered with
|
||||
an asynchronous broadcast intent. For more information about the various Bundle keys that are
|
||||
supported by the <code>MarketBillingService</code>, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-interface">In-app Billing
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
|
||||
Service Interface</a>.</p>
|
||||
|
||||
<p>You can use the <code>sendBillingRequest()</code> method to send five types of billing requests.
|
||||
@@ -475,14 +475,14 @@ key can have the following five values:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>CHECK_BILLING_SUPPORTED</code>—verifies that the Google Play application
|
||||
supports in-app billing.</li>
|
||||
supports in-app billing and the version of the In-app Billing API available.</li>
|
||||
<li><code>REQUEST_PURCHASE</code>—sends a purchase request for an in-app item.</li>
|
||||
<li><code>GET_PURCHASE_INFORMATION</code>—retrieves transaction information for a purchase
|
||||
or refund.</li>
|
||||
<li><code>CONFIRM_NOTIFICATIONS</code>—acknowledges that you received the transaction
|
||||
information for a purchase or refund.</li>
|
||||
<li><code>RESTORE_TRANSACTIONS</code>—retrieves a user's transaction history for <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">managed
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
|
||||
purchases</a>.</li>
|
||||
</ul>
|
||||
|
||||
@@ -511,8 +511,8 @@ application's main thread.</p>
|
||||
<h4>Verifying that in-app billing is supported (CHECK_BILLING_SUPPPORTED)</h4>
|
||||
|
||||
<p>The following code sample shows how to verify whether the Google Play application supports
|
||||
in-app billing. In the sample, <code>mService</code> is an instance of the
|
||||
<code>MarketBillingService</code> interface.</p>
|
||||
in-app billing and confirm what version of the API it supports. In the sample, <code>mService</code>
|
||||
is an instance of the <code>MarketBillingService</code> interface.</p>
|
||||
|
||||
<pre>
|
||||
/**
|
||||
@@ -523,13 +523,19 @@ in-app billing. In the sample, <code>mService</code> is an instance of the
|
||||
// Do something with this response.
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
|
||||
three keys that are required for all requests: <code>BILLING_REQUEST</code>,
|
||||
<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The request returns a synchronous {@link
|
||||
<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. If you are offering subscriptions in
|
||||
your app, set the API_VERSION key to a value of "2", to confirm that In-app Billing v2 is
|
||||
available. For an examnple, see
|
||||
<a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#version">Subscriptions</a>.</p>
|
||||
|
||||
<p>The <code>CHECK_BILLING_SUPPORTED</code> request returns a synchronous {@link
|
||||
android.os.Bundle} response, which contains only a single key: <code>RESPONSE_CODE</code>. The
|
||||
<code>RESPONSE_CODE</code> key can have the following values:</p>
|
||||
<ul>
|
||||
<li><code>RESULT_OK</code>—in-app billing is supported.</li>
|
||||
<li><code>RESULT_OK</code>—the spedified version of in-app billing is supported.</li>
|
||||
<li><code>RESULT_BILLING_UNAVAILABLE</code>—in-app billing is not available because the API
|
||||
version you specified is not recognized or the user is not eligible to make in-app purchases (for
|
||||
example, the user resides in a country that prohibits in-app purchases).</li>
|
||||
@@ -571,7 +577,7 @@ Help topic.</p>
|
||||
<p>You must specify four keys in the request {@link android.os.Bundle}. The following code sample
|
||||
shows how to set these keys and make a purchase request for a single in-app item. In the sample,
|
||||
<code>mProductId</code> is the Google Play product ID of an in-app item (which is listed in the
|
||||
application's <a href="{@docRoot}guide/market/billing/billing_admin.html#billing-list-setup">product
|
||||
application's <a href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">product
|
||||
list</a>), and <code>mService</code> is an instance of the <code>MarketBillingService</code>
|
||||
interface.</p>
|
||||
|
||||
@@ -581,6 +587,8 @@ interface.</p>
|
||||
*/
|
||||
Bundle request = makeRequestBundle("REQUEST_PURCHASE");
|
||||
request.putString(ITEM_ID, mProductId);
|
||||
// Request is for a standard in-app product
|
||||
request.putString(ITEM_TYPE, "inapp");
|
||||
// Note that the developer payload is optional.
|
||||
if (mDeveloperPayload != null) {
|
||||
request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
|
||||
@@ -664,7 +672,7 @@ use to retrieve the transaction details for the <code>REQUEST_PURCHASE</code> re
|
||||
|
||||
<p class="note"><strong>Note:</strong> The Google Play application also sends
|
||||
an <code>IN_APP_NOTIFY</code> for refunds. For more information, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
|
||||
IN_APP_NOTIFY messages</a>.</p>
|
||||
|
||||
<p>Because the purchase process is not instantaneous and can take several seconds (or more), you
|
||||
@@ -847,7 +855,7 @@ android.content.BroadcastReceiver}. To see an example of how you can send and re
|
||||
messages, see the <code>BillingReceiver.java</code> and <code>BillingService.java</code> files in
|
||||
the sample application. You can use these samples as a basis for your own implementation. However,
|
||||
if you use any of the code from the sample application, be sure you follow the guidelines in <a
|
||||
href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>.</p>
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
|
||||
|
||||
<h2 id="billing-broadcast-receiver">Creating a BroadcastReceiver</h2>
|
||||
|
||||
@@ -860,19 +868,19 @@ android.content.BroadcastReceiver} that can handle the following intents:</p>
|
||||
<p>This broadcast intent contains a Google Play response code, and is sent after you make an
|
||||
in-app billing request. For more information about the response codes that are sent with this
|
||||
response, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-codes">Google Play Response
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Google Play Response
|
||||
Codes for In-app Billing</a>.</p>
|
||||
</li>
|
||||
<li>com.android.vending.billing.IN_APP_NOTIFY
|
||||
<p>This response indicates that a purchase has changed state, which means a purchase succeeded,
|
||||
was canceled, or was refunded. For more information about notification messages, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
Broadcast Intents</a></p>
|
||||
</li>
|
||||
<li>com.android.vending.billing.PURCHASE_STATE_CHANGED
|
||||
<p>This broadcast intent contains detailed information about one or more transactions. For more
|
||||
information about purchase state messages, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
Broadcast Intents</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -981,7 +989,7 @@ local service (discussed in the next section). The <code>BillingReceiver.java</c
|
||||
sample application shows you how to do this. You can use this sample as a basis for your own {@link
|
||||
android.content.BroadcastReceiver}. However, if you use any of the code from the sample application,
|
||||
be sure you follow the guidelines that are discussed in <a
|
||||
href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design </a>.</p>
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design </a>.</p>
|
||||
|
||||
<h2 id="billing-signatures">Verifying Signatures and Nonces</h2>
|
||||
|
||||
@@ -1020,7 +1028,7 @@ code shows some simple methods you can use to do this.</p>
|
||||
<code>PURCHASE_STATE_CHANGED</code> broadcast intent. The <code>Security.java</code> file in the
|
||||
sample application shows you how to do this. If you use this file as a basis for your own security
|
||||
implementation, be sure to follow the guidelines in <a
|
||||
href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a> and
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a> and
|
||||
obfuscate your code.</p>
|
||||
|
||||
<p>You will need to use your Google Play public key to perform the signature verification. The
|
||||
@@ -1067,7 +1075,7 @@ sample application provides an example database (PurchaseDatabase.java); however
|
||||
database has been simplified for clarity and does not exhibit the security best practices that we
|
||||
recommend. If you have a remote server, we recommend that you store purchase information on your
|
||||
server instead of in a local database on a device. For more information about security best
|
||||
practices, see <a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
practices, see <a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a>.</p>
|
||||
|
||||
<p class="note"><strong>Note</strong>: If you store any purchase information on a device, be sure to
|
||||
@@ -7,6 +7,7 @@ parent.link=index.html
|
||||
<div id="qv">
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#billing-types">Product and Purchase Types</a></li>
|
||||
<li><a href="#billing-arch">In-app Billing Architecture</a></li>
|
||||
<li><a href="#billing-msgs">In-app Billing Messages</a></li>
|
||||
<ol>
|
||||
@@ -20,19 +21,19 @@ parent.link=index.html
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -47,15 +48,57 @@ order number, the order date and time, and the price paid. At no point does your
|
||||
handle any financial transactions; that role is provided by Google Play's in-app billing
|
||||
service.</p>
|
||||
|
||||
<h2 id="billing-types">Product and Purchase Types</h2>
|
||||
|
||||
<p>In-app Billing supports different product types and purchase types to give you flexibility in how you monetize your app. In all cases, you define your products using the Google Play Developer Console, including product type, purchase type, SKU, price, description, and so on. For more information, see <a href="billing_admin.html">Administering In-app Billing</a>.</p>
|
||||
|
||||
<h3 id="producttypes">Product Types</h3>
|
||||
|
||||
<p>With In-app Billing, you can sell two types of products — <em>in-app products</em> and <em>subscriptions</em>. The billing characteristics of the two types are very different, but the In-app Billing API lets you handle the two product types in your app using the same communication model, data structures, and user interactions, as described later in this document.</p>
|
||||
|
||||
<ul>
|
||||
<li><em>In-app products</em> — Items that a user would purchase one-at-a-time. For example, typical in-app products would let users purchase digital content, unlock functionality in an app, pay for one-time charges, or add almost anything to the application experience. Unlike with priced applications, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly.
|
||||
|
||||
<p>In-app products can be sold using either the "managed per user account" or "unmanaged" purchase type. In-app products are always explicitly associated with one and only one app. That is, one app cannot purchase an in-app product published for another app, even if they are from the same developer. In-app products are supported in all versions of In-app Billing.</p></li>
|
||||
|
||||
<li><em>Subscriptions</em> — Items that are sold with a developer-specified, recurring billing interval. When a user purchases a subscription, Google Play and its payment processor automatically bill the user's account at the specified interval and price, charging the amount to the original payment method. Once the user purchases a subscription, Google Play continues billing the account indefinitely, without requiring approval or action from the user. The user can cancel the subscription at any time.
|
||||
|
||||
<p>Subscriptions can only be sold using the "managed per user account" purchase type. As with in-app products, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly. For more information about subscriptions and how to sell them in your apps, see the <a href="billing-subscriptions.html">Subscriptions</a> document.</p></li>
|
||||
</ul>
|
||||
|
||||
<h3 id="purchasetypes">Purchase Types</h3>
|
||||
|
||||
<p>In-app Billing offers two purchase types that you can use when selling in-app products, "managed per user account" and "unmanaged". The purchase type controls how Google Play handles and tracks purchases for the products. </p>
|
||||
|
||||
<ul>
|
||||
<li><em>Managed per user account</em> — Items that can be purchased only once per user account on Google Play. When a user purchases an item that uses the "managed per user account" purchase type, Google Play permanently stores the transaction information for each item on a per-user basis. This enables you to later query Google Play to restore the state of the items a specific user has purchased. If a user attempts to purchase a managed item that has already been purchased, Google Play prevents the user from purchasing the item again and displays an "Item already purchased" error.
|
||||
|
||||
<p>The "managed per user account" purchase type is useful if you are selling items such as game levels or application features. These items are not transient and usually need to be restored whenever a user reinstalls your application, wipes the data on their device, or installs your application on a new device.</p>
|
||||
|
||||
<li><em>Unmanaged</em> — Items that do not have their transaction information stored on Google Play. This means that you cannot later query Google Play to retrieve transaction information for those items. For "unmanaged" purchases, you are responsible for managing the transaction information. Also, Google Play does not attempt to prevent the user from purchasing an item multiple times if it uses the "unmanaged" purchase type. It's up to you to control how many times an unmanaged item can be purchased.</p>
|
||||
|
||||
<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or magic spells. These items are consumed within your application and are usually purchased multiple times.</p></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="billing-arch">In-app Billing Architecture</h2>
|
||||
|
||||
<p>In-app billing uses an asynchronous message loop to convey billing requests and billing responses
|
||||
between your application and the Google Play server. In practice, your application never directly
|
||||
communicates with the Google Play server (see figure 1). Instead, your application sends billing
|
||||
requests to the Google Play application over interprocess communication (IPC) and receives
|
||||
purchase responses from the Google Play application in the form of asynchronous broadcast
|
||||
intents. Your application does not manage any network connections between itself and the Google
|
||||
Play server or use any special APIs from the Android platform.</p>
|
||||
<p>Your app accesses the In-app Billing service using an API that is exposed by
|
||||
the Google Play app installed on the device. The Google Play app then uses an
|
||||
asynchronous message loop to convey billing requests and responses between your
|
||||
application and the Google Play server. In practice, your application never
|
||||
directly communicates with the Google Play server (see figure 1). Instead, your
|
||||
application sends billing requests to the Google Play application over
|
||||
interprocess communication (IPC) and receives purchase responses from the Google
|
||||
Play application in the form of asynchronous broadcast intents. Your application
|
||||
does not manage any network connections between itself and the Google Play
|
||||
server or use any special APIs from the Android platform.</p>
|
||||
|
||||
<div class="figure" style="width:440px">
|
||||
<img src="{@docRoot}images/billing_arch.png" alt="" height="582" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 1.</strong> Your application sends and receives billing messages through the
|
||||
Google Play application, which handles all communication with the Google Play server.</p>
|
||||
</div>
|
||||
|
||||
<p>Some in-app billing implementations may also use a private remote server to deliver content or
|
||||
validate transactions, but a remote server is not required to implement in-app billing. A remote
|
||||
@@ -66,13 +109,6 @@ verification. Although you can handle all security-related tasks in your applica
|
||||
those tasks on a remote server is recommended because it helps make your application less vulnerable
|
||||
to security attacks.</p>
|
||||
|
||||
<div class="figure" style="width:440px">
|
||||
<img src="{@docRoot}images/billing_arch.png" alt="" height="582" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 1.</strong> Your application sends and receives billing messages through the
|
||||
Google Play application, which handles all communication with the Google Play server.</p>
|
||||
</div>
|
||||
|
||||
<p>A typical in-app billing implementation relies on three components:</p>
|
||||
<ul>
|
||||
<li>A {@link android.app.Service} (named <code>BillingService</code> in the sample application),
|
||||
@@ -118,17 +154,17 @@ messaging that takes place between your application and the Google Play applicat
|
||||
<p>Your application sends in-app billing requests by invoking a single IPC method
|
||||
(<code>sendBillingRequest()</code>), which is exposed by the <code>MarketBillingService</code>
|
||||
interface. This interface is defined in an <a
|
||||
href="{@docRoot}guide/developing/tools/aidl.html">Android Interface Definition Language</a> file
|
||||
href="{@docRoot}tools/aidl.html">Android Interface Definition Language</a> file
|
||||
(<code>IMarketBillingService.aidl</code>). You can <a
|
||||
href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">download</a> this AIDL
|
||||
href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">download</a> this AIDL
|
||||
file with the in-app billing sample application.</p>
|
||||
|
||||
<p>The <code>sendBillingRequest()</code> method has a single {@link android.os.Bundle} parameter.
|
||||
The Bundle that you deliver must include several key-value pairs that specify various parameters for
|
||||
the request, such as the type of billing request you are making, the item that is being purchased,
|
||||
and the application that is making the request. For more information about the Bundle keys that are
|
||||
sent with a request, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-interface">In-app Billing
|
||||
the request, such as the type of billing request you are making, the item that is being purchased and
|
||||
its type, and the application that is making the request. For more information about the Bundle keys
|
||||
that are sent with a request, see <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
|
||||
Service Interface</a>.
|
||||
|
||||
<p>One of the most important keys that every request Bundle must have is the
|
||||
@@ -162,8 +198,10 @@ requests:</p>
|
||||
</li>
|
||||
<li><code>RESTORE_TRANSACTIONS</code>
|
||||
<p>This request retrieves a user's transaction status for <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">managed
|
||||
purchases</a>. You should send this request only when you need to retrieve a user's transaction
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
|
||||
purchases</a> and <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">subscriptions</a>.
|
||||
You should send this request only when you need to retrieve a user's transaction
|
||||
status, which is usually only when your application is reinstalled or installed for the first
|
||||
time on a device.</p>
|
||||
</li>
|
||||
@@ -202,7 +240,7 @@ include the following:</p>
|
||||
request. This response is <em>not</em> used to report any purchase state changes (such as refund
|
||||
or purchase information). For more information about the response codes that are sent with this
|
||||
response, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-codes">Server Response Codes
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Server Response Codes
|
||||
for In-app Billing</a>.</p>
|
||||
</li>
|
||||
<li><code>com.android.vending.billing.IN_APP_NOTIFY</code>
|
||||
@@ -223,22 +261,22 @@ include the following:</p>
|
||||
|
||||
<p>The JSON string that is returned with the <code>PURCHASE_STATE_CHANGED</code> intent provides
|
||||
your application with the details of one or more billing transactions. An example of this JSON
|
||||
string is shown below:</p>
|
||||
<pre class="no-pretty-print" style="color:black">
|
||||
{ "nonce" : 1836535032137741465,
|
||||
string for a subscription item is shown below:</p>
|
||||
<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
|
||||
"orders" :
|
||||
{ "notificationId" : "android.test.purchased",
|
||||
"orderId" : "transactionId.android.test.purchased",
|
||||
"packageName" : "com.example.dungeons",
|
||||
"productId" : "android.test.purchased",
|
||||
"developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
|
||||
"purchaseTime" : 1290114783411,
|
||||
"purchaseState" : 0 }
|
||||
[{ "notificationId" : "android.test.purchased",
|
||||
"orderId" : "transactionId.android.test.purchased",
|
||||
"packageName" : "com.example.dungeons",
|
||||
"productId" : "android.test.purchased",
|
||||
"developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
|
||||
"purchaseTime" : 1290114783411,
|
||||
"purchaseState" : 0,
|
||||
"purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>For more information about the fields in this JSON string, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
|
||||
Broadcast Intents</a>.</p>
|
||||
|
||||
<h3 id="billing-message-sequence">Messaging sequence</h3>
|
||||
@@ -396,11 +434,11 @@ application can handle this message the same way it handles the response from an
|
||||
application-initiated <code>REQUEST_PURCHASE</code> message, so that ultimately your application
|
||||
receives a <code>PURCHASE_STATE_CHANGED</code> broadcast intent message that includes information
|
||||
about the item that has been purchased. This applies only to items that have their <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">purchase type</a> set
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">purchase type</a> set
|
||||
to "managed per user account."</p>
|
||||
|
||||
<p>In the second case, your application can receive an <code>IN_APP_NOTIFY</code> broadcast intent
|
||||
when Google Play receives a refund notification from Google Checkout. In this case, Google
|
||||
when Google Play receives a refund notification from Google Wallet. In this case, Google
|
||||
Play sends an <code>IN_APP_NOTIFY</code> message to your application. Your application can handle
|
||||
this message the same way it handles responses from an application-initiated
|
||||
<code>REQUEST_PURCHASE</code> message so that ultimately your application receives a
|
||||
@@ -409,9 +447,9 @@ refunded. The refund information is included in the JSON string that accompanies
|
||||
<code>PURCHASE_STATE_CHANGED</code> broadcast intent. Also, the <code>purchaseState</code> field in
|
||||
the JSON string is set to 2.</p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> You cannot use the Google Checkout API to
|
||||
<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to
|
||||
issue refunds or cancel in-app billing transactions. You must do this manually through your
|
||||
Google Checkout merchant account. However, you can use the Google Checkout API to retrieve order
|
||||
Google Wallet merchant account. However, you can use the Google Wallet API to retrieve order
|
||||
information.</p>
|
||||
|
||||
<h2 id="billing-security">Security Controls</h2>
|
||||
@@ -439,7 +477,7 @@ application. When your application receives the JSON string, you need to verify
|
||||
the signature of the JSON string.</p>
|
||||
|
||||
<p>For more information about best practices for security and design, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>.</p>
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
|
||||
|
||||
<h2 id="billing-limitations">In-app Billing Requirements and Limitations</h2>
|
||||
|
||||
@@ -449,10 +487,10 @@ limitations.</p>
|
||||
<ul>
|
||||
<li>In-app billing can be implemented only in applications that you publish through Google
|
||||
Play.</li>
|
||||
<li>You must have a Google Checkout Merchant account to use Google Play In-app Billing.</li>
|
||||
<li>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
|
||||
the MyApps application. If your device is running any other version of Android, in-app billing
|
||||
requires version 2.3.4 (or higher) of the Google Play application.</li>
|
||||
<li>You must have a Google Wallet Merchant account to use Google Play In-app Billing.</li>
|
||||
<li>In-app billing requires version 2.3.4 (or higher) of the Android Market application.
|
||||
To support subscriptions, version 3.5 or higher of the Google Play app is required. On devices
|
||||
running Android 3.0, version 5.0.12 (or higher) of the MyApps application is required.</li>
|
||||
<li>An application can use in-app billing only if the device is running Android 1.6 (API level 4)
|
||||
or higher.</li>
|
||||
<li>You can use in-app billing to sell only digital content. You cannot use in-app billing to sell
|
||||
@@ -465,5 +503,5 @@ limitations.</p>
|
||||
</ul>
|
||||
|
||||
<p>For more information about in-app billing requirements, see <a
|
||||
href="http://market.android.com/support/bin/answer.py?answer=1153481">In-App Billing Availability
|
||||
and Policies</a>.</p>
|
||||
href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153481">In-App
|
||||
Billing Availability and Policies</a>.</p>
|
||||
@@ -10,24 +10,25 @@ parent.link=index.html
|
||||
<li><a href="#billing-codes">Server Response Codes for In-app Billing</a></li>
|
||||
<li><a href="#billing-interface">In-app Billing Service Interface</a></li>
|
||||
<li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
|
||||
|
||||
<li><a href="#other-intents">Other Broadcast Intents</a></li>
|
||||
<li><a href="#billing-versions">In-app Billing API Versions</a></li>
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -39,9 +40,11 @@ parent.link=index.html
|
||||
<li><a href="#billing-codes">Google Play Server Response Codes for In-app Billing</a></li>
|
||||
<li><a href="#billing-interface">In-app Billing Interface Parameters</a></li>
|
||||
<li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
|
||||
<li><a href="#other-intents">Other Intents</a></li>
|
||||
<li><a href="#billing-versions">In-app Billing API Versions</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="billing-codes">Google Play Server Response Codes for In-app Billing</h2>
|
||||
<h2 id="billing-codes">Server Response Codes for In-app Billing</h2>
|
||||
|
||||
<p>The following table lists all of the server response codes that are sent from Google Play to
|
||||
your application. Google Play sends these response codes asynchronously as
|
||||
@@ -102,7 +105,7 @@ codes returned by Google Play.</p>
|
||||
<td><code>RESULT_ERROR</code></td>
|
||||
<td>6</td>
|
||||
<td>Indicates an unexpected server error. For example, this error is triggered if you try to
|
||||
purchase an item from yourself, which is not allowed by Google Checkout.</td>
|
||||
purchase an item from yourself, which is not allowed by Google Wallet.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -111,7 +114,7 @@ purchase an item from yourself, which is not allowed by Google Checkout.</td>
|
||||
<p>The following section describes the interface for Google Play's in-app billing service. The
|
||||
interface is defined in the <code>IMarketBillingService.aidl</code> file, which is included with the
|
||||
in-app billing <a
|
||||
href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">sample
|
||||
href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
|
||||
application</a>.</p>
|
||||
<p>The interface consists of a single request method <code>sendBillingRequest()</code>. This method
|
||||
takes a single {@link android.os.Bundle} parameter. The Bundle parameter includes several key-value
|
||||
@@ -142,10 +145,13 @@ pairs, which are summarized in table 2.</p>
|
||||
<tr>
|
||||
<td><code>API_VERSION</code></td>
|
||||
<td><code>int</code></td>
|
||||
<td>1</td>
|
||||
<td> <ul>
|
||||
<li><code>"2"</code> [<a href="#version_2">details</a>]</li>
|
||||
<li><code>"1"</code> [<a href="#version_1">details</a>]</li>
|
||||
</ul></td>
|
||||
<td>Yes</td>
|
||||
<td>The version of Google Play's in-app billing service you are using. The current version is
|
||||
1.</td>
|
||||
<td>The version of Google Play's in-app billing service you want to use. The current version is
|
||||
2.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PACKAGE_NAME</code></td>
|
||||
@@ -227,7 +233,7 @@ pairs, which are summarized in table 2.</p>
|
||||
</li>
|
||||
<li><code>RESTORE_TRANSACTIONS</code>
|
||||
<p>This request retrieves a user's transaction status for managed purchases (see <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">Choosing a
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">Choosing a
|
||||
Purchase Type</a> for more information). You should send this message only when you need to
|
||||
retrieve a user's transaction status, which is usually only when your application is reinstalled
|
||||
or installed for the first time on a device.</p>
|
||||
@@ -298,7 +304,7 @@ each in-app billing request type.</p>
|
||||
Play application. These broadcast intents inform your application about in-app billing actions
|
||||
that have occurred. Your application must implement a {@link android.content.BroadcastReceiver} to
|
||||
receive these broadcast intents, such as the <code>BillingReceiver</code> that's shown in the in-app
|
||||
billing <a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">sample
|
||||
billing <a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
|
||||
application</a>.</p>
|
||||
|
||||
<h4>com.android.vending.billing.RESPONSE_CODE</h4>
|
||||
@@ -388,7 +394,7 @@ a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>orderId</td>
|
||||
<td>A unique order identifier for the transaction. This corresponds to the Google Checkout Order
|
||||
<td>A unique order identifier for the transaction. This corresponds to the Google Wallet Order
|
||||
ID.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -407,8 +413,15 @@ a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
|
||||
|
||||
<tr>
|
||||
<td>purchaseState</td>
|
||||
<td>The purchase state of the order. Possible values are 0 (purchased), 1 (canceled), or 2
|
||||
(refunded).</td>
|
||||
<td>The purchase state of the order. Possible values are 0 (purchased), 1 (canceled), 2
|
||||
(refunded), or 3 (expired, for subscription purchases only).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>purchaseToken</td>
|
||||
<td>A token that uniquely identifies a subscription purchase for a given item and user pair.
|
||||
You can use the token to specify the subscription when querying for subscription validity.
|
||||
|
||||
<p><br><em>Supported only in In-app Billing API version 2 and higher.</em></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>developerPayload</td>
|
||||
@@ -416,3 +429,63 @@ a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
|
||||
specify a value for this field when you make a <code>REQUEST_PURCHASE</code> request.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!--<h2 id="other-intents">Other Intents</h2>
|
||||
|
||||
<p>The following Intents related to In-app Billing may be useful in your
|
||||
implemention. </p> -->
|
||||
|
||||
<h2 id="http-api">HTTP API for verification and cancelation</h2>
|
||||
|
||||
<p>Google Play offers an HTTP-based API that you can use to remotely query the
|
||||
validity of a specific subscription at any time or cancel a subscription. The
|
||||
API is designed to be used from your backend servers as a way of securely
|
||||
managing subscriptions, as well as extending and integrating subscriptions with
|
||||
other services. See <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#play-dev-api">
|
||||
Google Play Android Developer API</a> for more information.</p>
|
||||
|
||||
<h2 id="billing-versions">In-app Billing API Versions</h2>
|
||||
|
||||
<p>The In-app Billing API is versioned, with each version offering
|
||||
additional features to your app. At run time, your app can query the Google Play app to determine
|
||||
what version of the API it supports and what features are available. Typically, the Google Play app
|
||||
will be updated and will support the latest version of the API. For a summary of versions see
|
||||
<a href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-versions">In-app Billing
|
||||
API Versions</a>.</p>
|
||||
|
||||
<p>The sections below list the supported versions of the In-app Billing API.
|
||||
Versions are specified in the <code>API_VERSION</code> key of the Bundle object
|
||||
passed in the <code>sendBillingRequest()</code>, which is defined in the defined
|
||||
in the <code>IMarketBillingService.aidl</code> file, which is included with the
|
||||
in-app billing <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
|
||||
sample application</a>. For more information, see <a
|
||||
href="#billing-interface">In-app Billing Service Interface</a>.</p>
|
||||
<h3 id="version_2">In-app Billing version 2</h3>
|
||||
|
||||
<p><em>May 2012</em></p>
|
||||
|
||||
<ul>
|
||||
<li>Adds support for subscriptions.
|
||||
<ul>
|
||||
<li>Adds a new supported string value, "2", for the <code>API_VERSION</code> key
|
||||
of the Bundle object passed in the <code>sendBillingRequest()</code>.</li>
|
||||
<li>Adds a new JSON field, <code>purchaseToken</code>, to the
|
||||
<code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
|
||||
intent. </li>
|
||||
<li>Adds a new <code>purchaseState</code> value, <code>3</code> (expired), to the
|
||||
<code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
|
||||
intent. The value indicates that a subscription has expired and is no longer valid.</li>
|
||||
<li>Requires Google Play (Play Store) version 3.5 or higher.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="version_1">In-app Billing version 1</h3>
|
||||
|
||||
<p><em>March 2011</em></p>
|
||||
|
||||
<ul>
|
||||
<li>Initial release.</li>
|
||||
<li>Requires Google Play/Android Market 2.3.4 or higher.</li>
|
||||
</ul>
|
||||
|
||||
859
docs/html/guide/google/play/billing/billing_subscriptions.jd
Executable file
859
docs/html/guide/google/play/billing/billing_subscriptions.jd
Executable file
@@ -0,0 +1,859 @@
|
||||
page.title=Subscriptions
|
||||
parent.title=In-app Billing
|
||||
parent.link=index.html
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#overview">Overview of Subscriptions</a>
|
||||
<!--<ol>
|
||||
<li><a href="#publishing">Subscription publishing and unpublishing</a></li>
|
||||
<li><a href="#pricing">Subscription pricing</a></li>
|
||||
<li><a href="#user-billing">User billing</a></li>
|
||||
<li><a href="#cancellation">Subscription cancellation</a></li>
|
||||
<li><a href="#uninstallation">App uninstallation</a></li>
|
||||
<li><a href="#refunds">Refunds</a></li>
|
||||
<li><a href="#payment">Payment processing and policies</a></li>
|
||||
<li><a href="#requirements">System requirements for subscriptions</a></li>
|
||||
<li><a href="#compatibility">Compatibility considerations</a></li>
|
||||
</ol> -->
|
||||
</li>
|
||||
<li><a href="#implementing">Implementing Subscriptions</a>
|
||||
<!-- <ol>
|
||||
<li><a href="#sample">Sample application</a></li>
|
||||
<li><a href="#model">Application model</a></li>
|
||||
<li><a href="#token">Purchase token</a></li>
|
||||
<li><a href="#version">Checking the In-app Billing API version</a></li>
|
||||
<li><a href="purchase">Requesting purchase of a subscription</a></li>
|
||||
<li><a href="#restore">Restoring transactions</a></li>
|
||||
<li><a href="#validity">Checking subscription validity</a></li>
|
||||
<li><a href="#viewstatus">Launching your product page to let the user cancel or view status</a></li>
|
||||
<li><a href="#purchase-state-changes">Recurring billing and changes in purchase state</a></li>
|
||||
<li><a href="modifying">Modifying your app for subscriptions</a></li>
|
||||
</ol> -->
|
||||
</li>
|
||||
<li><a href="#administering">Administering Subscriptions</a></li>
|
||||
|
||||
<li><a href="#play-dev-api">Google Play Android Developer API</a>
|
||||
<!-- <ol>
|
||||
<li><a href="#using">Using the API</a></li>
|
||||
<li><a href="#quota">Quota</a></li>
|
||||
<li><a href="#auth">Authorization</a></li>
|
||||
<li><a href="#practices">Using the API efficiently</a></li>
|
||||
</ol> -->
|
||||
</li>
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Subscriptions let you sell content, services, or features in your app with
|
||||
automated, recurring billing. Adding support for subscriptions is
|
||||
straightforward and you can easily adapt an existing In-app Billing
|
||||
implementation to sell subscriptions. </p>
|
||||
|
||||
<p>If you have already implemented In-app Billing for one-time purchase
|
||||
products, you will find that you can add support for subscriptions with minimal
|
||||
impact on your code. If you are new to In-app Billing, you can implement
|
||||
subscriptions using the standard communication model, data structures, and user
|
||||
interactions as for other in-app products.subscriptions. Because the
|
||||
implementation of subscriptions follows the same path as for other in-app
|
||||
products, details are provided outside of this document, starting with the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
|
||||
Overview</a>. </p>
|
||||
|
||||
<p>This document is focused on highlighting implementation details that are
|
||||
specific to subscriptions, along with some strategies for the associated billing
|
||||
and business models.</p>
|
||||
|
||||
<h2 id="overview">Overview of Subscriptions</h2>
|
||||
|
||||
<p>A <em>subscription</em> is a new product type offered in In-app Billing that lets you
|
||||
sell content, services, or features to users from inside your app with recurring
|
||||
monthly or annual billing. You can sell subscriptions to almost any type of
|
||||
digital content, from any type of app or game.</p>
|
||||
|
||||
<p>As with other in-app products, you configure and publish subscriptions using
|
||||
the Developer Console and then sell them from inside apps installed on an
|
||||
Android-powered devices. In the Developer console, you create subscription
|
||||
products and add them to a product list, setting a price for each, choosing a
|
||||
billing interval of monthly or annually, and then publishing. In your apps, it’s
|
||||
straightforward to add support for subscription purchases. The implementation
|
||||
extends the standard In-app Billing API to support a new product type but uses
|
||||
the same communication model, data structures, and user interactions as for
|
||||
other in-app products.</p>
|
||||
|
||||
<p>When users purchase subscriptions in your apps, Google Play handles all
|
||||
checkout details so your apps never have to directly process any financial
|
||||
transactions. Google Play processes all payments for subscriptions through
|
||||
Google Wallet, just as it does for standard in-app products and app purchases.
|
||||
This ensures a consistent and familiar purchase flow for your users.</p>
|
||||
|
||||
<img src="{@docRoot}images/billing_subscription_flow.png" style="border:4px solid ddd;">
|
||||
|
||||
|
||||
<p>After users have purchase subscriptions, they can view the subscriptions and
|
||||
cancel them, if necessary, from the My Apps screen in the Play Store app or
|
||||
from the app's product details page in the Play Store app.</p>
|
||||
|
||||
<!--<img src="{@docRoot}images/billing_subscription_cancel.png" style="border:4px solid ddd;">-->
|
||||
|
||||
<p>Once users have purchased a subscription through In-app Billing, you can
|
||||
easily give them extended access to additional content on your web site (or
|
||||
other service) through the use of a server-side API provided for In-app Billing.
|
||||
The server-side API lets you validate the status of a subscription when users
|
||||
sign into your other services. For more information about the API, see <a
|
||||
href="#play-dev-api">Google Play Android Developer API</a>, below. </p>
|
||||
|
||||
<p>You can also build on your existing external subscriber base from inside your
|
||||
Android apps. If you sell subscriptions on a web site, for example, you can add
|
||||
your own business logic to your Android app to determine whether the user has
|
||||
already purchased a subscription elsewhere, then allow access to your content if
|
||||
so or offer a subscription purchase from Google Play if not.</p>
|
||||
|
||||
<p>With the flexibility of In-app Billing, you can even implement your own
|
||||
solution for sharing subscriptions across as many different apps or products as
|
||||
you want. For example, you could sell a subscription that gives a subscriber
|
||||
access to an entire collection of apps, games, or other content for a monthly or
|
||||
annual fee. To implement this solution, you could add your own business logic to
|
||||
your app to determine whether the user has already purchased a given
|
||||
subscription and if so, allow access to your content. </p>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>Subscriptions at a glance</h2>
|
||||
<ul>
|
||||
<li>Subscriptions let you sell products with automated, recurring billing</li>
|
||||
<li>You can set up subscriptions with either monthly or annual billing</li>
|
||||
<li>You can sell multiple subscription items in an app with various billing
|
||||
intervals or prices, such as for promotions</li>
|
||||
<li>Users purchase your subscriptions from inside your apps, rather than
|
||||
directly from Google Play</li>
|
||||
<li>Users manage their purchased subscriptions from the My Apps screen in
|
||||
the Play Store app</li>
|
||||
<li>Google Play uses the original form of payment for recurring billing</li>
|
||||
<li>If a user cancels a subscription, Google Play considers the subscription valid
|
||||
until the end of the current billing cycle. The user continues to enjoy the content
|
||||
for the rest of the cycle and is not granted a refund.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>In general the same basic policies and terms apply to subscriptions as to
|
||||
standard in-app products, however there are some differences. For complete
|
||||
information about the current policies and terms, please read the <a
|
||||
href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en
|
||||
&answer=140504">policies document</a>.</p>
|
||||
|
||||
|
||||
<h3 id="publishing">Subscription publishing and unpublishing</h3>
|
||||
|
||||
<p>To sell a subscription in an app, you use the tools in the Developer Console
|
||||
to set up a product list for the app and then create and configure a new
|
||||
subscription. In the subscription, you set the price and billing interval and
|
||||
define a subscription ID, title, and description. When you are ready, you can
|
||||
then publish the subscription in the app product list.</p>
|
||||
|
||||
<p>In the product list, you can add subscriptions, in-app products, or both. You
|
||||
can add multiple subscriptions that give access to different content or
|
||||
services, or you can add multiple subscriptions that give access to the same
|
||||
content but for different intervals or different prices, such as for a
|
||||
promotion. For example, a news outlet might decide to offer both monthly and
|
||||
annual subscriptions to the same content, with annual having a discount. You can
|
||||
also offer in-app purchase equivalents for subscription products, to ensure that
|
||||
your content is available to users of older devices that do not support
|
||||
subscriptions.</p>
|
||||
|
||||
<p>After you add a subscription or in-app product to the product list, you must
|
||||
publish the product before Google Play can make it available for purchase. Note
|
||||
that you must also publish the app itself before Google Play will make the
|
||||
products available for purchase inside the app. </p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> At this time, the capability to
|
||||
unpublish a subscription is not available. Support for unpublishing a
|
||||
subscription is coming to the Developer Console in the weeks ahead, so this is a
|
||||
temporary limitation. In the short term, instead of unpublishing,
|
||||
you can remove the subscription product from the product list offered in your
|
||||
app to prevent users from seeing or purchasing it.</p>
|
||||
|
||||
<h3 id="pricing">Subscription pricing</h3>
|
||||
|
||||
<p>When you create a subscription in the Developer Console, you can set a price
|
||||
for it in any available currencies. Each subscription must have a non-zero
|
||||
price. You can price multiple subscriptions for the same content differently
|
||||
— for example you could offer a discount on an annual subscription
|
||||
relative to the monthly equivalent. </p>
|
||||
|
||||
<p class="caution"><strong>Important:</strong> At this time, once you publish a
|
||||
subscription product, you cannot change its price in any currency. Support for
|
||||
changing the price of published subscriptions is coming to the Developer Console
|
||||
in the weeks ahead. In the short term, you can work around this limitation by
|
||||
publishing a new subscription product ID at a new price, then offer it in your
|
||||
app instead of the original product. Users who have already purchased will
|
||||
continue to be charged at the original price, but new users will be charged at
|
||||
the new price.</p>
|
||||
|
||||
<h3 id="user-billing">User billing</h3>
|
||||
|
||||
<p>You can sell subscription products with automated recurring billing at
|
||||
either of two intervals:</p>
|
||||
|
||||
<ul>
|
||||
<li>Monthly — Google Play bills the customer’s Google Wallet account at
|
||||
the time of purchase and monthly subsequent to the purchase date (exact billing
|
||||
intervals can vary slightly over time)</li>
|
||||
<li>Annually — Google Play bills the customer's Google Wallet account at
|
||||
the time of purchase and again on the same date in subsequent years.</li>
|
||||
</ul>
|
||||
|
||||
<p>Billing continues indefinitely at the interval and price specified for the
|
||||
subscription. At each subscription renewal, Google Play charges the user account
|
||||
automatically, then notifies the user of the charges afterward by email. Billing
|
||||
cycles will always match subscription cycles, based on the purchase date.</p>
|
||||
|
||||
<p>Over the life of a subscription, the form of payment billed remains the same
|
||||
— Google Play always bills the same form of payment (such as credit card,
|
||||
Direct Carrier Billing) that was originally used to purchase the
|
||||
subscription.</p>
|
||||
|
||||
<p>When the subscription payment is approved by Google Wallet, Google Play
|
||||
provides a purchase token back to the purchasing app through the In-app Billing
|
||||
API. For details, see <a href="#token">Purchase token</a>, below. Your apps can
|
||||
store the token locally or pass it to your backend servers, which can then use
|
||||
it to validate or cancel the subscription remotely using the <a
|
||||
href="#play-dev-api">Google Play Android Developer API</a>.</p>
|
||||
|
||||
<p>In the case of billing errors, such as could happen if the customer’s credit
|
||||
card becomes invalid, Google Play notifies your app of the change in purchase
|
||||
state.</p>
|
||||
|
||||
<p>As a best practice, we recommend that your app includes business logic to
|
||||
notify your backend servers of subscription purchases, tokens, and any billing
|
||||
errors that may occur. Your backend servers can use the server-side API to query
|
||||
and update your records and follow up with customers directly, if needed.</p>
|
||||
|
||||
<h3 id="cancellation">Subscription cancellation</h3>
|
||||
|
||||
<p>Users can view the status of all of their subscriptions and cancel them if
|
||||
necessary from the My Apps screen in the Play Store app. Currently, the In-app
|
||||
Billing API does not provide support for canceling subscriptions direct from
|
||||
inside the purchasing app, although your app can broadcast an Intent to launch
|
||||
the Play Store app directly to the My Apps screen.</p>
|
||||
|
||||
<p>When the user cancels a subscription, Google Play does not offer a refund for
|
||||
the current billing cycle. Instead, it allows the user to have access to the
|
||||
cancelled subscription until the end of the current billing cycle, at which time
|
||||
it terminates the subscription. For example, if a user purchases a monthly
|
||||
subscription and cancels it on the 15th day of the cycle, Google Play will
|
||||
consider the subscription valid until the end of the 30th day (or other day,
|
||||
depending on the month).</p>
|
||||
|
||||
<p>In some cases, the user may contact you directly to request cancellation of a
|
||||
subscription. In this and similar cases, you can use the server-side API to
|
||||
query and directly cancel the user’s subscription from your servers.
|
||||
|
||||
<p class="caution"><strong>Important:</strong> In all cases, you must continue
|
||||
to offer the content that your subscribers have purchased through their
|
||||
subscriptions, for as long any users are able to access it. That is, you must
|
||||
not remove any subscriber’s content while any user still has an active
|
||||
subscription to it, even if that subscription will terminate at the end of the
|
||||
current billing cycle. Removing content that a subscriber is entitled to access
|
||||
will result in penalties. Please see the <a
|
||||
href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies document</a> for more information. </p>
|
||||
|
||||
<h3 id="uninstall">App uninstallation</h3>
|
||||
|
||||
<p>When the user uninstalls an app that includes purchased subscriptions, the Play Store app will notify the user that there are active subscriptions. If the user chooses to continue with the uninstalltion, the app is removed and the subscriptions remain active and recurring billing continues. The user can return to cancel the associated subscriptions at any time in the My Apps screen of the Play Store app. If the user chooses to cancel the uninstallation, the app and subscriptions remain as they were.</p>
|
||||
|
||||
<h3 id="refunds">Refunds</h3>
|
||||
|
||||
<p>As with other in-app products, Google Play does not provide a refund window
|
||||
for subscription purchases. For example, users who purchase an app can ask for a
|
||||
refund from Google Play within a 15-minute window. With subscriptions, Google
|
||||
Play does not provide a refund window, so users will need to contact you
|
||||
directly to request a refund.
|
||||
|
||||
<p>If you receive requests for refunds, you can use the server-side API to
|
||||
cancel the subscription or verify that it is already cancelled. However, keep in
|
||||
mind that Google Play considers cancelled subscriptions valid until the end of
|
||||
their current billing cycles, so even if you grant a refund and cancel the
|
||||
subscription, the user will still have access to the content.
|
||||
|
||||
<p class="note"><strong>Note:</strong> Partial refunds for canceled
|
||||
subscriptions are not available at this time.</p>
|
||||
|
||||
<h3 id="payment">Payment processing and policies</h3>
|
||||
|
||||
<p>In general, the terms of Google Play allow you to sell in-app subscriptions
|
||||
only through the standard payment processor, Google Wallet. For purchases of any
|
||||
subscription products, just as for other in-app products and apps, the
|
||||
transaction fee for subscriptions, just as for other in-app purchases, is the
|
||||
same as the transaction fee for application purchases (30%).</p>
|
||||
|
||||
<p>Apps published on Google Play that are selling subscriptions must use In-app
|
||||
Billing to handle the transaction and may not provide links to a purchase flow
|
||||
outside of the app and Google Play (such as to a web site).</p>
|
||||
|
||||
<p>For complete details about terms and policies, see the <a
|
||||
href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies
|
||||
document</a>.</p>
|
||||
|
||||
<h3 id="requirements">System requirements for subscriptions</h3>
|
||||
|
||||
<p>In-app purchases of subscriptions are supported only on devices that meet
|
||||
these minimum requirements:</p>
|
||||
|
||||
<ul>
|
||||
<li>Must run Android 2.2 or higher</li>
|
||||
<li>Google Play Store app, version 3.5 or higher, must be installed</li>
|
||||
</ul>
|
||||
|
||||
<p>Google Play 3.5 and later versions include support for the In-app Billing
|
||||
v2 API or higher, which is needed to support handling of subscription
|
||||
products.</p>
|
||||
|
||||
<h3 id="compatibility">Compatibility considerations</h3>
|
||||
|
||||
<p>As noted in the previous section, support for subscriptions is available only
|
||||
on devices that meet the system requirements. Not all devices will receive or
|
||||
install Google Play 3.5, so not all users who install your apps will have access
|
||||
to the In-app Billing API and subscriptions.</p>
|
||||
|
||||
<p>If you are targeting older devices that run Android 2.1 or earlier, we
|
||||
recommend that you offer those users an alternative way buy the content that is
|
||||
available through subscriptions. For example, you could create standard in-app
|
||||
products (one-time purchases) that give access to similar content as your
|
||||
subscriptions, possibly for a longer interval such as a year. </p>
|
||||
|
||||
|
||||
<h2 id="implementing">Implementing Subscriptions</h2>
|
||||
|
||||
<p>Subscriptions are a standard In-app Billing product type. If you have already
|
||||
implemented In-app Billing for one-time purchase products, you will find that
|
||||
adding support for subscriptions is straightforward, with minimal impact on your
|
||||
code. If you are new to In-app Billing, you can implement subscriptions using
|
||||
the standard communication model, data structures, and user interactions as for
|
||||
other in-app products.subscriptions. </p>
|
||||
|
||||
<p>The full implementation details for In-app Billing are provided outside of
|
||||
this document, starting with the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
|
||||
Overview</a>. This document is focused on highlighting implementation details
|
||||
that are specific to subscriptions, along with some strategies for the
|
||||
associated billing and business models.</p>
|
||||
|
||||
|
||||
<h3 id="sample">Sample application</h3>
|
||||
|
||||
<p>To help you get started with your In-app Billing implementation and
|
||||
subscriptions, an updated version of the In-app Billing sample app is available.
|
||||
You can download the sample app from the Android SDK repository using the
|
||||
Android SDK Manager. For details, see <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
|
||||
Downloading the Sample Application</a>.</p>
|
||||
|
||||
<h3 id="model">Application model</h3>
|
||||
|
||||
<p>With subscriptions, your app uses the standard In-app Billing application
|
||||
model, sending billing requests to the Play Store application over interprocess
|
||||
communication (IPC) and receiving purchase responses from the Play Store app in
|
||||
the form of asynchronous broadcast intents. Your application does not manage any
|
||||
network connections between itself and the Google Play server or use any special
|
||||
APIs from the Android platform.</p>
|
||||
|
||||
<p>Your app also uses the standard In-app Billing components — a billing
|
||||
Service for sending requests, a BroadcastReceiver for receiving the responses,
|
||||
and a security component for verifying that the response was sent by Google
|
||||
Play. Also recommended are a response Handler for processing notifications,
|
||||
errors, and status messages, and an observer for sending callbacks to your
|
||||
application as needed. All of these components and their interactions are
|
||||
described in full in the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
|
||||
Overview</a> and related documents.</p>
|
||||
|
||||
<p>To initiate different types of billing communication with Google Play, your
|
||||
app will use the standard set of in-app billing requests and receive the same
|
||||
responses. Inside the requests and responses are two new fields described below.
|
||||
</p>
|
||||
|
||||
<h3 id="token">Purchase token</h3>
|
||||
|
||||
<p>Central to the end-to-end architecture for subscriptions is the purchase
|
||||
token, a string value that uniquely identifies (and associates) a user ID and a
|
||||
subscription ID. Google Play generates the purchase token when the user
|
||||
completes the purchase of a subscription product (and payment is approved by
|
||||
Google Wallet) and then sends it to the purchasing app on the device through the
|
||||
In-app Billing API. </p>
|
||||
|
||||
<p>At the conclusion of a <code>PURCHASE_REQUEST</code> message flow, your app
|
||||
can retrieve the purchase token and other transaction details by initiating a
|
||||
<code>GET_PURCHASE_INFORMATION</code> request. The Bundle returned by the call
|
||||
contains an JSON array of order objects. In the order corresponding to the
|
||||
subscription purchase, the token is available in the <code>purchaseToken</code>
|
||||
field. </p>
|
||||
|
||||
<p>An example of a JSON order object that includes a subscription purchase token
|
||||
is shown below. </p>
|
||||
|
||||
<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
|
||||
"orders" :
|
||||
[{ "notificationId" : "android.test.purchased",
|
||||
"orderId" : "transactionId.android.test.purchased",
|
||||
"packageName" : "com.example.dungeons",
|
||||
"productId" : "android.test.purchased",
|
||||
"developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
|
||||
"purchaseTime" : 1290114783411,
|
||||
"purchaseState" : 0,
|
||||
"purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>After receiving a purchase token, your apps can store the token locally or
|
||||
pass it to your backend servers, which can then use it to query the billing
|
||||
status or cancel the subscription remotely. If your app will store the token
|
||||
locally, please read the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a> document for best practices for maintaining the security of your
|
||||
data.</p>
|
||||
|
||||
<h3 id="version">Checking the In-app Billing API version</h3>
|
||||
|
||||
<p>Subscriptions support is available only in versions of Google Play that
|
||||
support the In-app Billing v2 API (Google Play 3.5 and higher). For your app,
|
||||
an essential first step at launch is to check whether the version of Google Play
|
||||
installed on the device supports the In-app Billing v2 API and
|
||||
subscriptions.</p>
|
||||
|
||||
<p>To do this, create a CHECK_BILLING_SUPPORTED request Bundle that includes the
|
||||
required key-value pairs, together with</p>
|
||||
|
||||
<ul>
|
||||
<li>The <code>API_VERSION</code> key, assigning a value of 2.</li>
|
||||
<li>The <code>BILLING_REQUEST_ITEM_TYPE</code> key, assigning a value of “subs”</li>
|
||||
</ul>
|
||||
|
||||
<p>Send the request using <code>sendBillingRequest(Bundle)</code> and receive
|
||||
the response Bundle. You can extract the response from the
|
||||
<code>BILLING_RESPONSE_RESPONSE_CODE</code> key of the response. RESULT_OK
|
||||
indicates that subscriptions are supported.</p>
|
||||
|
||||
<p>The sample app declares constants for the accepted
|
||||
<code>BILLING_REQUEST_ITEM_TYPE</code> values (from Consts.java):</p>
|
||||
|
||||
<pre class="pretty-print"> // These are the types supported in the IAB v2
|
||||
public static final String ITEM_TYPE_INAPP = "inapp";
|
||||
public static final String ITEM_TYPE_SUBSCRIPTION = "subs";
|
||||
</pre>
|
||||
|
||||
<p>It sets up a convenience method for building the request bundle (from BillingService.java):</p>
|
||||
|
||||
<pre class="pretty-print"> protected Bundle makeRequestBundle(String method) {
|
||||
Bundle request = new Bundle();
|
||||
request.putString(Consts.BILLING_REQUEST_METHOD, method);
|
||||
request.putInt(Consts.BILLING_REQUEST_<code>API_VERSION</code>, 2);
|
||||
request.putString(Consts.BILLING_REQUEST_PACKAGE_NAME, getPackageName());
|
||||
return request;
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Here’s an example of how to test support for In-App Billing v2 and subscriptions
|
||||
(from BillingService.java):</p>
|
||||
|
||||
<pre class="pretty-print"> /**
|
||||
* Wrapper class that checks if in-app billing is supported.
|
||||
*/
|
||||
class CheckBillingSupported extends BillingRequest {
|
||||
public String mProductType = null;
|
||||
public CheckBillingSupported() {
|
||||
// This object is never created as a side effect of starting this
|
||||
// service so we pass -1 as the startId to indicate that we should
|
||||
// not stop this service after executing this request.
|
||||
super(-1);
|
||||
}
|
||||
|
||||
public CheckBillingSupported(String type) {
|
||||
super(-1);
|
||||
mProductType = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected long run() throws RemoteException {
|
||||
Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
|
||||
if (mProductType != null) {
|
||||
request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
|
||||
}
|
||||
Bundle response = mService.sendBillingRequest(request);
|
||||
int responseCode = response.getInt(Consts.<code>BILLING_RESPONSE_RESPONSE_CODE</code>);
|
||||
if (Consts.DEBUG) {
|
||||
Log.i(TAG, "CheckBillingSupported response code: " +
|
||||
ResponseCode.valueOf(responseCode));
|
||||
}
|
||||
boolean billingSupported = (responseCode == ResponseCode.RESULT_OK.ordinal());
|
||||
ResponseHandler.checkBillingSupportedResponse(billingSupported, mProductType);
|
||||
return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h3 id="purchase">Requesting a subscription purchase</h3>
|
||||
|
||||
<p>Once you’ve checked the API version as described above and determined that
|
||||
subscriptions are supported, you can present subscription products to the user
|
||||
for purchase. When the user has selected a subscription product and initiated a
|
||||
purchase, your app handles the purchase just as it would for other in-app
|
||||
products — by sending a REQUEST_PURCHASE request. You can then launch
|
||||
Google Play to display the checkout user interface and handle the financial
|
||||
transaction..
|
||||
|
||||
<p>The REQUEST_PURCHASE includes a Bundle containing the item details, as
|
||||
described in the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
|
||||
Overview</a>. For a subscription, the Bundle must also specify:</p>
|
||||
|
||||
<ul>
|
||||
<li>The <code>ITEM_ID</code> key, with a value that specifies a valid, published
|
||||
subscription product.</li>
|
||||
<li>The <code>ITEM_TYPE</code> key, with a value of “subs”
|
||||
(<code>ITEM_TYPE_SUBSCRIPTION</code> in the sample app). If the request does not
|
||||
specify the subscription's <code>ITEM_TYPE</code>, Google Play attempts to
|
||||
handle the request as a standard in-app purchase (one-time purchase).</li>
|
||||
</ul>
|
||||
|
||||
<p>Google Play synchronously returns a response bundle that includes
|
||||
<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and
|
||||
<code>REQUEST_ID</code>. Your app uses the <code>PURCHASE_INTENT</code> to
|
||||
launch the checkout UI and the message flow proceeds exactly as described in <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
|
||||
sequence">Messaging sequence</a>.</p>
|
||||
|
||||
<p>Here’s how the sample app initiates a purchase for a subscription, where
|
||||
<code>mProductType</code> is <code>ITEM_TYPE_SUBSCRIPTION</code> (from
|
||||
BillingService.java).</p>
|
||||
|
||||
<pre class="pretty-print"> /**
|
||||
* Wrapper class that requests a purchase.
|
||||
*/
|
||||
class RequestPurchase extends BillingRequest {
|
||||
public final String mProductId;
|
||||
public final String mDeveloperPayload;
|
||||
public final String mProductType;
|
||||
|
||||
. . .
|
||||
|
||||
@Override
|
||||
protected long run() throws RemoteException {
|
||||
Bundle request = makeRequestBundle("REQUEST_PURCHASE");
|
||||
request.putString(Consts.BILLING_REQUEST_ITEM_ID, mProductId);
|
||||
request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
|
||||
// Note that the developer payload is optional.
|
||||
if (mDeveloperPayload != null) {
|
||||
request.putString(Consts.BILLING_REQUEST_DEVELOPER_PAYLOAD, mDeveloperPayload);
|
||||
}
|
||||
Bundle response = mService.sendBillingRequest(request);
|
||||
PendingIntent pendingIntent
|
||||
= response.getParcelable(Consts.BILLING_RESPONSE_PURCHASE_INTENT);
|
||||
if (pendingIntent == null) {
|
||||
Log.e(TAG, "Error with requestPurchase");
|
||||
return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
|
||||
}
|
||||
|
||||
Intent intent = new Intent();
|
||||
ResponseHandler.buyPageIntentResponse(pendingIntent, intent);
|
||||
return response.getLong(Consts.BILLING_RESPONSE_REQUEST_ID,
|
||||
Consts.BILLING_RESPONSE_INVALID_REQUEST_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void responseCodeReceived(ResponseCode responseCode) {
|
||||
ResponseHandler.responseCodeReceived(BillingService.this, this, responseCode);
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h3 id="restoring">Restoring transactions</h3>
|
||||
|
||||
<p>Subscriptions always use the <em>managed by user account</em> purchase type,
|
||||
so that you can restore a record of subscription transactions on the device when
|
||||
needed. When a user installs your app onto a new device, or when the user
|
||||
uninstalls/reinstalls the app on the original device, your app should restore
|
||||
the subscriptions that the user has purchased.</p>
|
||||
|
||||
<p>The process for restoring subscriptions transactions is the same as described
|
||||
in <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
|
||||
sequence">Messaging sequence</a>. Your app sends a
|
||||
<code>RESTORE_TRANSACTIONS</code> request to Google Play. Google Play sends two
|
||||
broadcast intents as asynchronous responses — a <code>RESPONSE_CODE</code>
|
||||
intent and a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
|
||||
|
||||
<p>The <code>PURCHASE_STATE_CHANGED</code> intent contains a notification ID
|
||||
that your app can use to retrieve the purchase details, including the purchase
|
||||
token, by sending a standard <code>GET_PURCHASE_INFORMATION</code> request. The
|
||||
<code>Bundle</code> returned in the call includes an JSON array of order objects
|
||||
corresponding to subscription (and in-app product) purchases that you can
|
||||
restore locally.</p>
|
||||
|
||||
<p>Your app can store the restored purchase state and other transaction details
|
||||
in the way that best meets your needs. Your app can use it later to check the
|
||||
subscription validity, although please read the <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a> document for best practices for maintaining the security of your
|
||||
data.</p>
|
||||
|
||||
<h3 id="validity">Checking subscription validity</h3>
|
||||
|
||||
<p>Subscriptions are time-bound purchases that require successful billing
|
||||
recurrences over time to remain valid. Your app should check the validity of
|
||||
purchased subscriptions at launch or prior to granting access to subscriber
|
||||
content.</p>
|
||||
|
||||
<p>With In-app Billing, you validate a subscription by keeping track of its
|
||||
purchase state, such as purchased or cancelled, and then checking the state
|
||||
whenever needed. Google Play provides two ways to let you know when the purchase
|
||||
state of a subscription changes:</p>
|
||||
|
||||
<ul>
|
||||
<li><em>In-app Billing Notifications</em>. Google Play pushes a notification
|
||||
to your app whenever the purchase state of a subscription changes. Your app can
|
||||
store the most recent purchase state for a given purchase token and then check
|
||||
that state at run time, as needed.</li>
|
||||
<li><em>Google Play Android Developer API</em>. You can use this HTTP-based
|
||||
API to poll Google Play for the current purchase state of a subscription. You
|
||||
can store the purchased state for each <code>purchaseToken</code> on your
|
||||
backend servers. For more information, see <a href="#play-dev-api">Google Play
|
||||
Android Developer API</a>, below.</li>
|
||||
</ul>
|
||||
|
||||
<p>For most use-cases, especially those where backend servers are already keeping
|
||||
track of subscribed users, implementing a combination of both methods is the
|
||||
recommended approach. A typical implementation might work like this:</p>
|
||||
|
||||
<ul>
|
||||
<li>When the user successfully purchases a new subscription, your app notifies a
|
||||
backend server, which stores the purchase token, user name, and other
|
||||
information in a secure location.</li>
|
||||
<li>Since your app cannot know the expiration date, your server can poll Google
|
||||
Play to get the expiration and store it with the purchase token and other
|
||||
data.</li>
|
||||
<li>Because your server now knows the expiration date, it does not need to poll
|
||||
Google Play again until after the expiration date, at which time it can confirm
|
||||
that the subscription was not cancelled.</li>
|
||||
<li>On the client side, your app can continue to update the server whenever the
|
||||
purchase state changes, storing the state locally.</li>
|
||||
</ul>
|
||||
|
||||
<p>If you are using both notifications and the Google Play Android Developer API to validate subscriptions, we recommend the following:</p>
|
||||
|
||||
<ul>
|
||||
<li>If your app wants to check validity but you can’t reach your server (or
|
||||
you don’t have a server), use the latest purchase state received by
|
||||
notification.</li>
|
||||
<li>If you have a server and it’s reachable, always give preference to the
|
||||
purchase state obtained from your server over the state received in
|
||||
notifications.</li>
|
||||
</ul>
|
||||
|
||||
<p>If necessary, you can also use a <code>RESTORE_TRANSACTIONS</code> request to retrieve a record of all managed and in-app products purchased by the user, which you can then store locally. However, using <code>RESTORE_TRANSACTIONS</code> on a regular basis is not recommended because of performance impacts.</p>
|
||||
|
||||
<p>Regardless of the approach you choose, your app should check subscriptions
|
||||
and validity at launch, such as prior to accessing subscriber content, game
|
||||
levels, and so on.</p>
|
||||
|
||||
<p class="table-caption"><strong>Table 1.</strong> Summary of purchaseState
|
||||
values for subscription purchases, as received with a
|
||||
<code>PURCHASE_STATE_CHANGED</code> intent.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>State</th><th>purchaseState Value</th><th>Comments</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Purchased successfully</td><td><code>0</code></td><td>Sent at original purchase only (not at recurring billing cycles).</td></tr>
|
||||
<td>Cancelled</td><td><code>1</code></td><td>Sent at original purchase only if the purchase has failed for some reason. </td></tr>
|
||||
<td>Refunded</td><td><code>2</code></td><td>The purchase was refunded.</code></td></tr>
|
||||
<td>Subscription expired</td><td><code>3</code></td><td>Sent if a subscription expires because of non-payment or user cancelation.</td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h3 id="viewstatus">Launching your product page to let the user cancel or view subscriptions</h3>
|
||||
|
||||
<p>In-app Billing does not currently provide an API to let users directly view or cancel
|
||||
subscriptions from within the purchasing app. Instead, users can launch the Play
|
||||
Store app on their devices and go to the My Apps screen to manage subscriptions. In My Apps,
|
||||
users can see a list of their subscriptions organized by application. Tapping one of the
|
||||
subscriptions loads the app's product page, from which users can see active subscriptions
|
||||
and billing status and cancel subscriptions as needed.</p>
|
||||
|
||||
<p>To make it easier for users to find and manage their subscriptions from inside your app,
|
||||
we recommend that you offer a "View My Subscriptions" or "Manage Subscriptions" option in
|
||||
your UI that directly loads your app's product page in the Play Store app.</p>
|
||||
|
||||
<p>To do this, create an intent with the <a
|
||||
href="{@docRoot}reference/android/content/Intent.html#ACTION_VIEW">ACTION_VIEW</a>
|
||||
action and include the <code>market://</code> URI (rather than the <code>http://</code>
|
||||
URI) of your app's details page. Here’s an example:</p>
|
||||
|
||||
<pre style="pretty-print">Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("market://details?id=com.example.app"));
|
||||
startActivity(intent);</pre>
|
||||
|
||||
<p>For more information, see
|
||||
<a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>.</p>
|
||||
|
||||
<h3 id="purchase-state-changes">Recurring billing and changes in purchase state</h3>
|
||||
|
||||
<p>Google Play notifies your app when the user completes the purchase of a
|
||||
subscription, but the purchase state does not change over time, provided that
|
||||
recurring billing takes place successfully. Google Play does not notify your app
|
||||
of a purchase state change <em>until the subscription expires because of
|
||||
non-payment or user cancellation</em>. </p>
|
||||
|
||||
<p>Over the life of a subscription, your app does not need to initiate any
|
||||
recurring billing events — those are all handled by Google Play and they
|
||||
are transparent to your application if billing is successful.</p>
|
||||
|
||||
<h3 id="modifying">Modifying your app for subscriptions</h3>
|
||||
|
||||
<p>For subscriptions, you make the same types of modifications to your app as
|
||||
are described in <a
|
||||
href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-implement">
|
||||
Modifying your Application Code</a>.</p>
|
||||
|
||||
<p>Note that, in your UI that lets users view and select subscriptions for
|
||||
purchase, you should add logic to check for purchased subscriptions and validate
|
||||
them. Your UI should not present subscriptions if the user has already purchased
|
||||
them.</p>
|
||||
|
||||
<h2 id="administering">Administering Subscriptions</h2>
|
||||
|
||||
<p>To create and manage subscriptions, you use the tools in the Developer
|
||||
Console, just as for other in-app products.</p>
|
||||
|
||||
<p>At the Developer Console, you can configure these attributes for each
|
||||
subscription product:</p>
|
||||
|
||||
<ul>
|
||||
<li>Purchase Type: always set to “subscription”</li>
|
||||
<li>Subscription ID: An identifier for the subscription</li>
|
||||
<li>Publishing State: Unpublished/Published</li>
|
||||
<li>Language: The default language for displaying the subscription</li>
|
||||
<li>Title: The title of the subscription product</li>
|
||||
<li>Description: Details that tell the user about the subscription</li>
|
||||
<li>Price: USD price of subscription per recurrence</li>
|
||||
<li>Recurrence: monthly or yearly</li>
|
||||
<li>Additional currency pricing (can be auto-filled)</li>
|
||||
</ul>
|
||||
|
||||
<p>For details, please see <a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
|
||||
In-app Billing</a>.</p>
|
||||
|
||||
|
||||
<h2 id="play-dev-api">Google Play Android Developer API</h2>
|
||||
|
||||
<p>Google Play offers an HTTP-based API that you can use to remotely query the
|
||||
validity of a specific subscription at any time or cancel a subscription. The
|
||||
API is designed to be used from your backend servers as a way of securely
|
||||
managing subscriptions, as well as extending and integrating subscriptions with
|
||||
other services.</p>
|
||||
|
||||
<h3 id="using">Using the API</h3>
|
||||
|
||||
<p>To use the API, you must first register a project at the <a
|
||||
href="https://code.google.com/apis/console">Google APIs Console</a> and receive
|
||||
a Client ID and shared secret that your app will present when calling the
|
||||
Google Play Android Developer API. All calls to the API are authenticated with
|
||||
OAuth 2.0.</p>
|
||||
|
||||
<p>Once your app is registered, you can access the API directly, using standard
|
||||
HTTP methods to retrieve and manipulate resources, or you can use the Google
|
||||
APIs Client Libraries, which are extended to support the API.</p>
|
||||
|
||||
<p>The Google Play Android Developer API is built on a RESTful design that uses
|
||||
HTTP and JSON, so any standard web stack can send requests and parse the
|
||||
responses. However, if you don’t want to send HTTP requests and parse responses
|
||||
manually, you can access the API using the client libraries, which provide
|
||||
better language integration, improved security, and support for making calls
|
||||
that require user authorization.</p>
|
||||
|
||||
<p>For more information about the API and how to access it through the Google
|
||||
APIs Client Libraries, see the documentation at:</p>
|
||||
|
||||
<p style="margin-left:1.5em;"><a
|
||||
href="https://developers.google.com/android-publisher/v1/">https://developers.
|
||||
google.com/android-publisher/v1/</a></p>
|
||||
|
||||
<h3 id="quota">Quota</h3>
|
||||
|
||||
<p>Applications using the Google Play Android Developer API are limited to an
|
||||
initial courtesy usage quota of <strong>15000 requests per day</strong> (per
|
||||
application). This should provide enough access for normal
|
||||
subscription-validation needs, assuming that you follow the recommendation in
|
||||
this section.</p>
|
||||
|
||||
<p>If you need to request a higher limit for your application, please use the
|
||||
“Request more” link in the <a
|
||||
href="https://code.google.com/apis/console/#:quotas">Google APIs Console</a>.
|
||||
Also, please read the section below on design best practices for minimizing your
|
||||
use of the API.</p>
|
||||
|
||||
<h3 id="auth">Authorization</h3>
|
||||
|
||||
<p>Calls to the Google Play Android Developer API require authorization. Google
|
||||
uses the OAuth 2.0 protocol to allow authorized applications to access user
|
||||
data. To learn more, see <a
|
||||
href="https://developers.google.com/android-publisher/authorization">Authorization</a>
|
||||
in the Google Play Android Developer API documentation.</p>
|
||||
|
||||
<h3 id="practices">Using the API efficiently</h3>
|
||||
|
||||
<p>Access to the Google Play Android Developer API is regulated to help ensure a
|
||||
high-performance environment for all applications that use it. While you can
|
||||
request a higher daily quota for your application, we highly recommend that you
|
||||
minimize your access using the technique(s) below. </p>
|
||||
|
||||
<ul>
|
||||
<li><em>Store subscription expiry on your servers</em> — your servers
|
||||
should use the Google Play Android Developer API to query the expiration date
|
||||
for new subscription tokens, then store the expiration date locally. This allows
|
||||
you to check the status of subscriptions only at or after the expiration (see
|
||||
below). </li>
|
||||
<li><em>Cache expiration and purchaseState</em> — If your app contacts
|
||||
your backend servers at runtime to verify subscription validity, your server
|
||||
should cache the expiration and purchaseState to ensure the fastest possible
|
||||
response (and best experience) for the user.</li>
|
||||
<li><em>Query for subscription status only at expiration</em> — Once your
|
||||
server has retrieved the expiration date of subscription tokens, it should not
|
||||
query the Google Play servers for the subscription status again until the
|
||||
subscription is reaching or has passed the expiration date. Typically, your
|
||||
servers would run a batch query each day to check the status of
|
||||
<em>expiring</em> subscriptions, then update the database. Note that:
|
||||
<ul>
|
||||
<li>Your servers should not query all subscriptions every day</li>
|
||||
<li>Your servers should never query subscription status dynamically, based on
|
||||
individual requests from your Android application. </li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>By following those general guidelines, your implementation will offer the
|
||||
best possible performance for users and minimize use of the Google Play Android
|
||||
Developer API.</p>
|
||||
|
||||
@@ -13,20 +13,20 @@ parent.link=index.html
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@ must run a standard version of the Android 1.6 or later platform (API level 4 or
|
||||
the most current version of the Google Play application installed. If a device is not running the
|
||||
most current Google Play application, your application won't be able to send in-app billing
|
||||
requests to Google Play. For general information about how to set up a device for use in
|
||||
developing Android applications, see <a href="{@docRoot}guide/developing/device.html">Using Hardware
|
||||
developing Android applications, see <a href="{@docRoot}tools/device.html">Using Hardware
|
||||
Devices</a>.</p>
|
||||
|
||||
<p>The following section shows you how to set up and use the in-app billing test tools.</p>
|
||||
@@ -62,7 +62,7 @@ product ID android.test.purchased.</p>
|
||||
|
||||
<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 1.</strong> Checkout flow for the special reserved item android.test.purchased.
|
||||
<strong>Figure 1.</strong> Wallet flow for the special reserved item android.test.purchased.
|
||||
</p>
|
||||
|
||||
<p>You do not need to list the reserved products in your application's product list. Google Play
|
||||
@@ -91,10 +91,10 @@ reserved product IDs.</p>
|
||||
<p>When you make an in-app billing request with this product ID, Google Play responds as
|
||||
though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
|
||||
billing service. Refunds must be initiated by you (the merchant). After you process a refund
|
||||
request through your Google Checkout account, a refund message is sent to your application by
|
||||
Google Play. This occurs only when Google Play gets notification from Google Checkout that
|
||||
request through your Google Wallet account, a refund message is sent to your application by
|
||||
Google Play. This occurs only when Google Play gets notification from Google Wallet that
|
||||
a refund has been made. For more information about refunds, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
|
||||
href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
|
||||
IN_APP_NOTIFY messages</a> and <a
|
||||
href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
|
||||
Pricing</a>.</p>
|
||||
@@ -108,7 +108,7 @@ reserved product IDs.</p>
|
||||
<p>In some cases, the reserved items may return signed static responses, which lets you test
|
||||
signature verification in your application. To test signature verification with the special reserved
|
||||
product IDs, you may need to set up <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
|
||||
upload your application as a unpublished draft application. Table 1 shows you the conditions under
|
||||
which static responses are signed.</p>
|
||||
|
||||
@@ -178,7 +178,7 @@ application's product list you use one of the reserved product IDs.</p>
|
||||
<p>You cannot use the emulator to test in-app billing; you must install your application on a
|
||||
device to test in-app billing.</p>
|
||||
<p>To learn how to install an application on a device, see <a
|
||||
href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
device</a>.</p>
|
||||
</li>
|
||||
<li><strong>Sign in to your device with your developer account.</strong>
|
||||
@@ -216,16 +216,16 @@ testing.</p>
|
||||
|
||||
<p>To test your in-app billing implementation with actual in-app purchases, you will need to
|
||||
register at least one test account on the Google Play publisher site. You cannot use your
|
||||
developer account to test the complete in-app purchase process because Google Checkout does not let
|
||||
developer account to test the complete in-app purchase process because Google Wallet does not let
|
||||
you buy items from yourself. If you have not set up test accounts before, see <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">Setting up test
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">Setting up test
|
||||
accounts</a>.</p>
|
||||
|
||||
<p>Also, a test account can purchase an item in your product list only if the item is published. The
|
||||
application does not need to be published, but the item does need to be published.</p>
|
||||
|
||||
<p>When you use a test account to purchase items, the test account is billed through Google Checkout
|
||||
and your Google Checkout Merchant account receives a payout for the purchase. Therefore, you may
|
||||
<p>When you use a test account to purchase items, the test account is billed through Google Wallet
|
||||
and your Google Wallet Merchant account receives a payout for the purchase. Therefore, you may
|
||||
want to refund purchases that are made with test accounts, otherwise the purchases will show up as
|
||||
actual payouts to your merchant account.</p>
|
||||
|
||||
@@ -243,20 +243,20 @@ actual payouts to your merchant account.</p>
|
||||
</li>
|
||||
<li><strong>Add items to the application's product list.</strong>
|
||||
<p>Make sure that you publish the items (the application can remain unpublished). See <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-catalog">Creating a product
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-catalog">Creating a product
|
||||
list</a> to learn how to do this.</p>
|
||||
</li>
|
||||
<li><strong>Install your application on an Android-powered device.</strong>
|
||||
<p>You cannot use the emulator to test in-app billing; you must install your application on a
|
||||
device to test in-app billing.</p>
|
||||
<p>To learn how to install an application on a device, see <a
|
||||
href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
|
||||
device</a>.</p>
|
||||
</li>
|
||||
<li><strong>Make one of your test accounts the primary account on your device.</strong>
|
||||
<p>To perform end-to-end testing of in-app billing, the primary account on your device must be
|
||||
one of the <a
|
||||
href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a>
|
||||
href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
|
||||
that you registered on the Google Play site. If the primary account on your device is not a
|
||||
test account, you must do a factory reset of the device and then sign in with one of your test
|
||||
accounts. To perform a factory reset, do the following:</p>
|
||||
@@ -286,8 +286,8 @@ do a factory reset, making sure you log on with your primary account first.</p>
|
||||
|
||||
<p>When you are finished testing your in-app billing implementation, you are ready to
|
||||
publish your application on Google Play. You can follow the normal steps for <a
|
||||
href="{@docRoot}guide/publishing/preparing.html">preparing</a>, <a
|
||||
href="{@docRoot}guide/publishing/app-signing.html">signing</a>, and <a
|
||||
href="{@docRoot}guide/publishing/publishing.html">publishing your application</a>.
|
||||
href="{@docRoot}tools/publishing/preparing.html">preparing</a>, <a
|
||||
href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a
|
||||
href="{@docRoot}distribute/googleplay/publish/preparing.html">publishing on Google Play</a>.
|
||||
</p>
|
||||
|
||||
116
docs/html/guide/google/play/billing/index.jd
Executable file
116
docs/html/guide/google/play/billing/index.jd
Executable file
@@ -0,0 +1,116 @@
|
||||
page.title=In-app Billing
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
|
||||
<h2>Topics</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
|
||||
Design</a></li> <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
|
||||
Billing</a></li>
|
||||
</ol>
|
||||
<h2>Reference</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></li>
|
||||
</ol>
|
||||
<h2>Downloads</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
|
||||
Application</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>In-app Billing is a Google Play service that lets you sell digital content from inside
|
||||
your applications. You can use the service to sell a wide range of content, including downloadable
|
||||
content such as media files or photos, virtual content such as game levels or potions, premium services
|
||||
and features, and more. You can use In-app Billing to sell products as</p>
|
||||
|
||||
<ul>
|
||||
<li>Standard in-app products (one-time billing), or</li>
|
||||
<li>Subscriptions, (recurring, automated billing)</li>
|
||||
</ul>
|
||||
|
||||
<div class="sidebox-wrapper">
|
||||
<div class="sidebox">
|
||||
<h2>Support for subscriptions <span class="new">New!</span></h2>
|
||||
<p>In-app Billing now lets you sell subscriptions in your apps, as well as standard in-app products.
|
||||
For details on how to sell subscriptions to content, services, and features, see the
|
||||
<a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a> documentation.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>When you use the in-app billing service to sell an item,
|
||||
whether it's an in-app product or a subscription, Google Play
|
||||
handles all checkout details so your application never has to directly process
|
||||
any financial transactions. Google Play uses the same checkout backend service as
|
||||
is used for application purchases, so your users experience a consistent and
|
||||
familiar purchase flow (see figure 1). Also, the transaction fee for in-app
|
||||
purchases is the same as the transaction fee for application purchases
|
||||
(30%).</p>
|
||||
|
||||
<p>Any application that you publish through Google Play can implement In-app Billing. No special
|
||||
account or registration is required other than an Android Market publisher account and a Google
|
||||
Wallet Merchant account. Also, because the service uses no dedicated framework APIs, you can add
|
||||
in-app billing to any application that uses a minimum API level of 4 or higher.</p>
|
||||
|
||||
<p>To help you integrate in-app billing into your application, the Android SDK
|
||||
provides a sample application that demonstrates how to sell standard in-app
|
||||
products and subscriptions from inside an app. The sample contains examples of
|
||||
billing-related classes you can use to implement in-app billing in your
|
||||
application. It also contains examples of the database, user interface, and
|
||||
business logic you might use to implement in-app billing.</p>
|
||||
|
||||
<p class="caution"><strong>Important</strong>: Although the sample application is a working example
|
||||
of how you can implement in-app billing, we <em>strongly recommend</em> that you modify and
|
||||
obfuscate the sample code before you use it in a production application. For more information, see
|
||||
<a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
|
||||
|
||||
<img src="{@docRoot}images/billing_checkout_flow.png" height="382" id="figure1" />
|
||||
<p class="img-caption">
|
||||
<strong>Figure 1.</strong> Applications initiate in-app billing requests through their own UI
|
||||
(first screen). Google Play responds to the request by providing the checkout user interface
|
||||
(middle screen). When checkout is complete, the application resumes.
|
||||
</p>
|
||||
|
||||
<p>To learn more about Google Play's in-app billing service and start integrating it into your
|
||||
applications, read the following documents:</p>
|
||||
|
||||
<dl>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
|
||||
Billing</a></strong></dt>
|
||||
<dd>Learn how the service works and what a typical in-app billing implementation looks
|
||||
like.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing
|
||||
In-app Billing</a></strong></dt>
|
||||
<dd>Use this step-by-step guide to start incorporating in-app billing into your
|
||||
application. The instructions apply to both one-time and subscription purchases.</dd>
|
||||
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></strong></dt>
|
||||
<dd>Learn how subscriptions work and how to implement support for them in your app.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security
|
||||
and Design</a></strong></dt>
|
||||
<dd>Review these best practices to help ensure that your in-app billing implementation is
|
||||
secure and well designed.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
|
||||
Billing</a></strong></dt>
|
||||
<dd>Understand how the in-app billing test tools work and learn how to test your in-app billing
|
||||
implementation.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
|
||||
In-app Billing</a></strong></dt>
|
||||
<dd>Learn how to set up your product list, register test accounts, and handle refunds.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
|
||||
Reference</a></strong></dt>
|
||||
<dd>Get detailed information about Google Play response codes and the in-app billing
|
||||
interface.</dd>
|
||||
</dl>
|
||||
|
||||
@@ -52,8 +52,8 @@ page.title=APK Expansion Files
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a></li>
|
||||
<li><a href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple
|
||||
<li><a href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple
|
||||
APK Support</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -215,7 +215,7 @@ already saved on the device.
|
||||
<li>If yes, your app is ready to go.</li>
|
||||
<li>If no, your app must download the expansion files over HTTP from Google Play. Your app
|
||||
must send a request to the Google Play client using the Google Play's <a
|
||||
href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service, which
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service, which
|
||||
responds with the name, file size, and URL for each expansion file. With this information, you then
|
||||
download the files and save them to the proper <a href="#StorageLocation">storage location</a>.</li>
|
||||
</ol>
|
||||
@@ -242,7 +242,7 @@ application:</p>
|
||||
Space is precious and you should keep your total application size as small as possible. If your app
|
||||
uses more than 50MB in order to provide multiple versions of your graphic assets for multiple screen
|
||||
densities, consider instead publishing <a
|
||||
href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> in which each APK
|
||||
href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in which each APK
|
||||
contains only the assets required for the screens that it targets.</li>
|
||||
<li>Determine which application resources to separate from your APK and package them in a
|
||||
file to use as the main expansion file.
|
||||
@@ -259,7 +259,7 @@ Library</a>.</p>
|
||||
</li>
|
||||
<li>Add logic to your application's main activity that checks whether the expansion files
|
||||
are on the device upon start-up. If the files are not on the device, use Google Play's <a
|
||||
href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service to request URLs
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service to request URLs
|
||||
for the expansion files, then download and save them.
|
||||
<p>To greatly reduce the amount of code you must write and ensure a good user experience
|
||||
during the download, we recommend you use the <a href="AboutLibraries">Downloader
|
||||
@@ -292,16 +292,16 @@ provide the URLs for your expansion files if the application was installed by ot
|
||||
provides for each file is unique for every download and each one expires shortly after it is given
|
||||
to your application.</li>
|
||||
<li>If you update your application with a new APK or upload <a
|
||||
href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> for the same
|
||||
href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> for the same
|
||||
application, you can select expansion files that you've uploaded for a previous APK. <strong>The
|
||||
expansion file's name does not change</strong>—it retains the version received by the APK to
|
||||
which the file was originally associated.</li>
|
||||
<li>If you use expansion files in combination with <a
|
||||
href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> in order to
|
||||
href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in order to
|
||||
provide different expansion files for different devices, you still must upload separate APKs
|
||||
for each device in order to provide a unique <a
|
||||
href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a>
|
||||
value and declare different <a href="{@docRoot}guide/appendix/market-filters.html">filters</a> for
|
||||
value and declare different <a href="{@docRoot}guide/google/play/filters.html">filters</a> for
|
||||
each APK.</li>
|
||||
<li>You cannot issue an update to your application by changing the expansion files
|
||||
alone—<strong>you must upload a new APK</strong> to update your app. If your changes only
|
||||
@@ -333,7 +333,7 @@ time it installs or updates the APK. This way, the expansion files are available
|
||||
application launches for the first time. However, in some cases your app must download the
|
||||
expansion files itself by requesting them from a URL provided to you in a response
|
||||
from Google Play's <a
|
||||
href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service.</p>
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service.</p>
|
||||
|
||||
<p>The basic logic you need to download your expansion files is the following:</p>
|
||||
|
||||
@@ -346,7 +346,7 @@ href="#StorageLocation">shared storage location</a> (in the
|
||||
<li>If the expansion files are <em>not</em> there:
|
||||
<ol>
|
||||
<li>Perform a request using Google Play's <a
|
||||
href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> to get your
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> to get your
|
||||
app's expansion file names, sizes, and URLs.</li>
|
||||
<li>Use the URLs provided by Google Play to download the expansion files and save
|
||||
the expansion files. You <strong>must</strong> save the files to the <a
|
||||
@@ -365,7 +365,7 @@ your application.</p>
|
||||
|
||||
|
||||
<p>If your application is free (not a paid app), then you probably haven't used the <a
|
||||
href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service. It's primarily
|
||||
href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service. It's primarily
|
||||
designed for you to enforce
|
||||
licensing policies for your application and ensure that the user has the right to
|
||||
use your app (he or she rightfully paid for it on Google Play). In order to facilitate the
|
||||
@@ -409,7 +409,7 @@ download your expansion files. The information in the following sections explain
|
||||
the library into your application.</p>
|
||||
|
||||
<p>If you'd rather develop your own solution to download the expansion files using the Google
|
||||
Play URLs, you must follow the <a href="{@docRoot}guide/market/licensing/index.html">Application
|
||||
Play URLs, you must follow the <a href="{@docRoot}guide/google/play/licensing/index.html">Application
|
||||
Licensing</a> documentation to perform a license request, then retrieve the expansion file names,
|
||||
sizes, and URLs from the response extras. You should use the <a href="#ExpansionPolicy">{@code
|
||||
APKExpansionPolicy}</a> class (included in the License Verification Library) as your licensing
|
||||
@@ -447,7 +447,7 @@ receives updates about the download progress.</li>
|
||||
download two packages from the SDK Manager and add the appropriate libraries to your
|
||||
application.</p>
|
||||
|
||||
<p>First, open the <a href="{@docRoot}sdk/adding-components.html">Android SDK Manager</a>, expand
|
||||
<p>First, open the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>, expand
|
||||
<em>Extras</em> and download:</p>
|
||||
<ul>
|
||||
<li><em>Google Market Licensing package</em></li>
|
||||
@@ -571,11 +571,11 @@ DownloaderService} class and override three methods to provide specific applicat
|
||||
<dt>{@code getPublicKey()}</dt>
|
||||
<dd>This must return a string that is the Base64-encoded RSA public key for your publisher
|
||||
account, available from the profile page on the Developer Console (see <a
|
||||
href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for Licensing</a>).</dd>
|
||||
href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>).</dd>
|
||||
<dt>{@code getSALT()}</dt>
|
||||
<dd>This must return an array of random bytes that the licensing {@code Policy} uses to
|
||||
create an <a
|
||||
href="{@docRoot}guide/market/licensing/adding-licensing.html#impl-Obfuscator">{@code
|
||||
href="{@docRoot}guide/google/play/licensing/adding-licensing.html#impl-Obfuscator">{@code
|
||||
Obfuscator}</a>. The salt ensures that your obfuscated {@link android.content.SharedPreferences}
|
||||
file in which your licensing data is saved will be unique and non-discoverable.</dd>
|
||||
<dt>{@code getAlarmReceiverClassName()}</dt>
|
||||
@@ -924,7 +924,7 @@ expansion files:</p>
|
||||
<p>For more information about how to use the {@code APKExpansionPolicy} when you're <em>not</em>
|
||||
using the <a
|
||||
href="#AboutLibraries">Downloader Library</a>, see the documentation for <a
|
||||
href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding Licensing to Your App</a>,
|
||||
href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>,
|
||||
which explains how to implement a license policy such as this one.</p>
|
||||
|
||||
|
||||
@@ -1200,7 +1200,7 @@ finalize these details before publishing your application.
|
||||
the application as a draft, such that your application is not published for Google Play users,
|
||||
but the expansion files are available for you to test the download process.</p></li>
|
||||
<li>Install the application on your test device using the Eclipse tools or <a
|
||||
href="{@docRoot}guide/developing/tools/adb.html">{@code adb}</a>.</li>
|
||||
href="{@docRoot}tools/help/adb.html">{@code adb}</a>.</li>
|
||||
<li>Launch the app.</li>
|
||||
</ol>
|
||||
|
||||
@@ -400,7 +400,7 @@ country (as determined by SIM carrier) in which paid apps are available.</p></td
|
||||
<td valign="top">Native Platform</td> <td valign="top"><p>An application that includes native
|
||||
libraries that target a specific platform (ARM EABI v7 or x86, for example) are
|
||||
visible only on devices that support that platform. For details about the NDK and using
|
||||
native libraries, see <a href="{@docRoot}sdk/ndk/index.html#overview">What is the
|
||||
native libraries, see <a href="{@docRoot}tools/sdk/ndk/index.html#overview">What is the
|
||||
Android NDK?</a></p> </tr> <tr>
|
||||
<td valign="top">Copy-Protected Applications</td> <td valign="top"><p>To
|
||||
copy protect an application, set copy protection to "On" when you configure publishing
|
||||
@@ -451,4 +451,4 @@ requires that you follow specific rules within your filters and that you pay ext
|
||||
version codes for each APK to ensure proper update paths for each configuration.</p>
|
||||
|
||||
<p>If you need more information about how to publish multiple APKs on Google Play, read <a
|
||||
href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
|
||||
href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
|
||||
16
docs/html/guide/google/play/index.jd
Normal file
16
docs/html/guide/google/play/index.jd
Normal file
@@ -0,0 +1,16 @@
|
||||
page.title=Google Play APIs
|
||||
page.landing=1
|
||||
page.landing.intro=When you ditribute your Android app using Google Play you have the opportunity to enhance your app's capabilities with services such as in-app billing and control your app distribution with advanced device filtering.
|
||||
@jd:body
|
||||
|
||||
|
||||
<div class="distribute-features col-13">
|
||||
<ul>
|
||||
<li><h5>Monetize with in-app billing</h5>Lorem ipsum dolor sit amet, soldum
|
||||
consectetur adipiscing elit. <a href="#">Learn more »</a></li>
|
||||
<li><h5>Control your app distribution</h5>Lorem ipsum dolor sit amet, soldum consectetur
|
||||
adipiscing elit. <a href="#">Learn more »</a></li>
|
||||
<li class="last"><h5>Protect from piracy</h5>Lorem ipsum dolor sit amet, soldum
|
||||
consectetur adipiscing elit. <a href="#">Learn more »</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -72,11 +72,11 @@ most applications).</li>
|
||||
<p>The sections below describe these tasks. When you are done with the
|
||||
integration, you should be able to compile your application successfully and you
|
||||
can begin testing, as described in <a
|
||||
href="{@docRoot}guide/market/licensing/setting-up.html#test-env">Setting Up the Test
|
||||
href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">Setting Up the Test
|
||||
Environment</a>.</p>
|
||||
|
||||
<p>For an overview of the full set of source files included in the LVL, see <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#lvl-summary">Summary of LVL Classes
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#lvl-summary">Summary of LVL Classes
|
||||
and Interfaces</a>.</p>
|
||||
|
||||
|
||||
@@ -224,7 +224,7 @@ in local persistent storage.</li>
|
||||
cached response is valid, rather than making a request to the licensing server.
|
||||
Setting the response validity according to the server-provided <code>VT</code>
|
||||
extra is highly recommended. See <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response Extras</a>
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
|
||||
for more information.</li>
|
||||
<li>Uses an exponential backoff period, if retrying any requests the result in
|
||||
errors. Note that the Google Play client automatically retries failed
|
||||
@@ -247,7 +247,7 @@ server-provided settings is straightforward and making use of them is highly
|
||||
recommended. See the ServerManagedPolicy implementation for an example of how to
|
||||
extract and use the extras. For a list of server settings and information about
|
||||
how to use them, see <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
|
||||
Extras</a>.</p>
|
||||
|
||||
<h3 id="ServerManagedPolicy">ServerManagedPolicy</h3>
|
||||
@@ -261,7 +261,7 @@ settings to the responses, to help the application manage licensing effectively.
|
||||
</p>
|
||||
|
||||
<p style="margin-top:.5em;">See <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response Extras</a>
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
|
||||
for
|
||||
a list of settings and <code>ServerManagedPolicy.java</code> for information
|
||||
about how a {@code Policy} can use the extras.</p>
|
||||
@@ -294,7 +294,7 @@ retry count, among others. ServerManagedPolicy extracts the values from the
|
||||
license response in its <code>processServerResponse()</code> method and checks
|
||||
them in its <code>allowAccess()</code> method. For a list of the server-provided
|
||||
settings used by ServerManagedPolicy, see <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
|
||||
Extras</a>.</p>
|
||||
|
||||
<p>For convenience, best performance, and the benefit of using license settings
|
||||
@@ -650,8 +650,7 @@ new license check if the <code>reason</code> supplied is {@code Policy.RETRY}. <
|
||||
deep-links the user to the application's details page on Google Play, from which the
|
||||
use can purchase the application. For more information on how to set up such
|
||||
links, see <a
|
||||
href="{@docRoot}guide/publishing/publishing.html#marketintent">Linking to your apps
|
||||
on Google Play</a>. </li>
|
||||
href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>. </li>
|
||||
<li>Display a Toast notification that indicates that the features of the
|
||||
application are limited because it is not licensed. </li>
|
||||
</ul>
|
||||
@@ -698,9 +697,9 @@ private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
|
||||
<p>Additionally, you should implement the <code>applicationError()</code>
|
||||
method, which the LVL calls to let your application handle errors that are not
|
||||
retryable. For a list of such errors, see <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
|
||||
Response Codes</a> in the <a
|
||||
href="guide/market/licensing/licensing-reference.html">Licensing Reference</a>. You can implement
|
||||
href="guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>. You can implement
|
||||
the method in any way needed. In most cases, the
|
||||
method should log the error code and call <code>dontAllow()</code>.</p>
|
||||
|
||||
@@ -999,9 +998,9 @@ Play Licensing. </p>
|
||||
|
||||
<p>When you are finished testing your license implementation, you are ready to
|
||||
publish the application on Google Play. Follow the normal steps to <a
|
||||
href="{@docRoot}guide/publishing/preparing.html">prepare</a>, <a
|
||||
href="{@docRoot}guide/publishing/app-signing.html">sign</a>, and then <a
|
||||
href="{@docRoot}guide/publishing/publishing.html">publish the application</a>.
|
||||
href="{@docRoot}tools/publishing/preparing.html">prepare</a>, <a
|
||||
href="{@docRoot}tools/publishing/app-signing.html">sign</a>, and then <a
|
||||
href="{@docRoot}distribute/googleplay/publish/preparing.html">publish the application</a>.
|
||||
</p>
|
||||
|
||||
<h3>Removing Copy Protection</h3>
|
||||
@@ -31,25 +31,25 @@ on Google Play. However, any application (including free apps) may use the licen
|
||||
to initiate the download of an APK expansion file. In which case, the request that your application
|
||||
sends to the licensing service is not to check whether the user paid for the app, but to request the
|
||||
URL of the expansion files. For information about downloading expansion files for your application,
|
||||
read the guide to <a href="{@docRoot}guide/market/expansion-files.html">APK Expansion Files</a>.</p>
|
||||
read the guide to <a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>.</p>
|
||||
|
||||
|
||||
<p>To learn more about Google Play's application licensing service and start integrating it into
|
||||
your applications, read the following documents:</p>
|
||||
|
||||
<dl>
|
||||
<dt><strong><a href="{@docRoot}guide/market/licensing/overview.html">Licensing
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/licensing/overview.html">Licensing
|
||||
Overview</a></strong></dt>
|
||||
<dd>Describes how the service works and what a typical licensing implementation looks
|
||||
like.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for
|
||||
Licensing</a></strong></dt>
|
||||
<dd>Explains how to set up your Google Play account, development environment, and
|
||||
testing environment in order to add licensing to your app.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
|
||||
Licensing to Your App</a></strong></dt>
|
||||
<dd>Provides a step-by-step guide to add licensing verification to your application.</dd>
|
||||
<dt><strong><a href="{@docRoot}guide/market/licensing/licensing-reference.html">Licensing
|
||||
<dt><strong><a href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing
|
||||
Reference</a></strong></dt>
|
||||
<dd>Provides detailed information about the licensing library's classes and the service response
|
||||
codes.</dd>
|
||||
@@ -230,7 +230,7 @@ implementation.</p>
|
||||
</table>
|
||||
|
||||
<p class="note"><strong>Note:</strong> As documented in <a
|
||||
href="{@docRoot}guide/market/licensing/setting-up.html#test-env">
|
||||
href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">
|
||||
Setting Up The Testing Environment</a>, the response code can be manually
|
||||
overridden for the application developer and any registered test users via the
|
||||
Google Play publisher site.
|
||||
@@ -251,13 +251,13 @@ testing purposes.</p>
|
||||
period and provide other information, The licensing server includes several pieces of
|
||||
information in the license responses. Specifically, the service provides recommended values for the
|
||||
application's license validity period, retry grace period, maximum allowable retry count, and other
|
||||
settings. If your application uses <a href="{@docRoot}guide/market/expansion-files.html">APK
|
||||
settings. If your application uses <a href="{@docRoot}guide/google/play/expansion-files.html">APK
|
||||
expansion files</a>, the response also includes the file names, sizes, and URLs. The server appends
|
||||
the settings as key-value pairs in the license response "extras" field. </p>
|
||||
|
||||
<p>Any {@code Policy} implementation can extract the extras settings from the license
|
||||
response and use them as needed. The LVL default {@code Policy} implementation, <a
|
||||
href="{@docRoot}guide/market/licensing/adding-licensing.html#ServerManagedPolicy">{@code
|
||||
href="{@docRoot}guide/google/play/licensing/adding-licensing.html#ServerManagedPolicy">{@code
|
||||
ServerManagedPolicy}</a>, serves as a working
|
||||
implementation and an illustration of how to obtain, store, and use the
|
||||
settings. </p>
|
||||
@@ -206,7 +206,7 @@ secure.</li>
|
||||
functions when run on a device that does not offer Google Play.</li>
|
||||
<li>You can implement licensing controls for a free app, but only if you're using the service to
|
||||
provide <a
|
||||
href="{@docRoot}guide/market/expansion-files.html">APK expansion files</a>.</li>
|
||||
href="{@docRoot}guide/google/play/expansion-files.html">APK expansion files</a>.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -237,7 +237,7 @@ across all compatible devices, locked or unlocked, that run Android 1.5 or
|
||||
higher version of the platform.</p>
|
||||
|
||||
<p>To begin adding application licensing to your application, continue to <a
|
||||
href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for Licensing</a>.</p>
|
||||
href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>.</p>
|
||||
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ href="http://play.google.com/apps/publish">http://play.google.com/apps/publish</
|
||||
</p>
|
||||
|
||||
<p>For more information, see <a
|
||||
href="{@docRoot}guide/publishing/publishing.html">Publishing on Google Play</a>.</p>
|
||||
href="{@docRoot}distribute/googleplay/publish/register.html">Get Started with Publishing</a>.</p>
|
||||
|
||||
<p>If you already have a publisher account on Google Play, use your existing
|
||||
account to set up licensing.</p>
|
||||
@@ -102,7 +102,7 @@ responses, see <a href="#test-env">Setting Up a Testing Environment</a>, below.
|
||||
</ol>
|
||||
|
||||
<p>The sections below describe these tasks. When you are done with setup,
|
||||
you can begin <a href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
|
||||
you can begin <a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
|
||||
Licensing to Your App</a>.</p>
|
||||
|
||||
<p>To get started, you need to set up a proper runtime environment on which
|
||||
@@ -146,7 +146,7 @@ be able to communicate with the Google Play licensing server. </p>
|
||||
|
||||
<p>For general information about how to set up a device for use in developing
|
||||
Android applications, see <a
|
||||
href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a>.</p>
|
||||
href="{@docRoot}tools/device.html">Using Hardware Devices</a>.</p>
|
||||
|
||||
<h4 id="runtime-emulator">Running on an Android emulator</h4>
|
||||
|
||||
@@ -199,7 +199,7 @@ Android Virtual Devices.</li>
|
||||
</ol>
|
||||
|
||||
<p>If you are not familiar with AVDs or how to use them, see <a
|
||||
href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>.</p>
|
||||
href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.</p>
|
||||
|
||||
<h4 id="project-update">Updating your project configuration</h4>
|
||||
|
||||
@@ -266,7 +266,7 @@ the LVL library project and the example application into these directories: </p>
|
||||
application)</p>
|
||||
|
||||
<p>If you aren't familiar with how to download packess into your SDK, see the
|
||||
<a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>
|
||||
<a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>
|
||||
document. </p>
|
||||
|
||||
|
||||
@@ -306,7 +306,7 @@ version of the LVL.</p>
|
||||
share its code and resources across multiple applications. </p>
|
||||
|
||||
<p style="margin-top:.5em;">If you aren't familiar with library projects or how
|
||||
to use them, see <a href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">
|
||||
to use them, see <a href="{@docRoot}tools/projects/index.html#LibraryProjects">
|
||||
Managing Projects</a>.
|
||||
</p>
|
||||
</div>
|
||||
@@ -345,7 +345,7 @@ no further configuration is needed. </p>
|
||||
|
||||
<p>For more information about how to create an application project or work with
|
||||
library projects in Eclipse, see <a
|
||||
href="{@docRoot}guide/developing/projects/projects-eclipse.html">Managing Projects from
|
||||
href="{@docRoot}tools/projects/projects-eclipse.html">Managing Projects from
|
||||
Eclipse with ADT</a>.</p>
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@ LVL's <code>library/src/com</code> directory into your application's
|
||||
|
||||
<p>If you add the LVL sources directly to your application, you can skip the
|
||||
next section and start working with the library, as described in <a
|
||||
href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
|
||||
href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
|
||||
Licensing to Your App</a>.</p>
|
||||
|
||||
|
||||
@@ -379,7 +379,7 @@ haven't done that already, do it now before continuing. </p>
|
||||
Select the "Android" properties group and click <strong>Add</strong>, then
|
||||
choose the LVL library project (com_android_vending_licensing) and click
|
||||
<strong>OK</strong>. For more information, see
|
||||
<a href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">
|
||||
<a href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">
|
||||
Managing Projects from Eclipse with ADT</a></p>.
|
||||
|
||||
|
||||
@@ -407,7 +407,7 @@ properties, including the reference to the library project:</p>
|
||||
</pre>
|
||||
|
||||
<p>For more information about working with library projects,
|
||||
see <a href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">
|
||||
see <a href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">
|
||||
Setting up a Library Project</a>.</p>
|
||||
|
||||
|
||||
@@ -483,9 +483,9 @@ test in your application.</p>
|
||||
<p>In general, you should make sure to test your application's licensing
|
||||
implementation with every response code available in the Test Response menu.
|
||||
For a description of the codes, see <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
|
||||
Response Codes</a> in the <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html">Licensing Reference</a>.</p>
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>.</p>
|
||||
|
||||
<img src="{@docRoot}images/licensing_test_response.png" alt=""/>
|
||||
<p class="img-caption"><strong>Figure 4.</strong> The Licensing
|
||||
@@ -506,7 +506,7 @@ sign using either your publisher account or one of the test accounts that you
|
||||
have set up. For more information about test accounts, see the next section.</p>
|
||||
|
||||
<p>See <a
|
||||
href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
|
||||
href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
|
||||
Response Codes</a> for a list of
|
||||
test responses available and their meanings. </p>
|
||||
|
||||
@@ -695,7 +695,7 @@ publisher account or test account each time you wipe data when restarting the
|
||||
emulator.</p>
|
||||
|
||||
<p>Once you've completed the setup procedures, continue to <a
|
||||
href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding Licensing to Your App</a>.</p>
|
||||
href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>.</p>
|
||||
|
||||
|
||||
|
||||
@@ -45,11 +45,11 @@ support all desired devices with a single APK</li>
|
||||
|
||||
<h2>See also</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a></li>
|
||||
<li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
|
||||
<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
|
||||
<li><a href="{@docRoot}sdk/compatibility-library.html">Compatibility
|
||||
<li><a href="{@docRoot}tools/extras/support-library.html">Compatibility
|
||||
Package</a></li>
|
||||
<li><a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a></li>
|
||||
<li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -192,7 +192,7 @@ following sections describe more about how it works.</p>
|
||||
<h3 id="SupportedFilters">Supported filters</h3>
|
||||
|
||||
<p>Which devices receive each APK is determined by <a
|
||||
href="{@docRoot}guide/appendix/market-filters.html">Google Play filters</a> that are specified by
|
||||
href="{@docRoot}guide/google/play/filters.html">Google Play filters</a> that are specified by
|
||||
elements in the manifest file of each APK. However, Google Play allows you to publish multiple
|
||||
APKs only when each APK uses filters to support a variation of the following
|
||||
device characteristics:</p>
|
||||
@@ -286,7 +286,7 @@ higher, as per the previous note).</li>
|
||||
</ul>
|
||||
|
||||
<p>Other manifest elements that enable <a
|
||||
href="{@docRoot}guide/appendix/market-filters.html">Google Play filters</a>—but are not
|
||||
href="{@docRoot}guide/google/play/filters.html">Google Play filters</a>—but are not
|
||||
listed above—are still applied for each APK as usual. However, Google Play does not allow
|
||||
you to publish multiple APKs based on variations of them. Thus, you cannot publish
|
||||
multiple APKs if the above listed filters are the same for each APK (but the APKs differ based on
|
||||
@@ -402,7 +402,7 @@ as textures—based on the build configuration.)</p>
|
||||
|
||||
<p class="note"><strong>Tip:</strong> One way to avoid duplicating large portions of your
|
||||
application code is to use a <a
|
||||
href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">library project</a>. A library
|
||||
href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>. A library
|
||||
project holds shared code and resources, which you can include in your actual application
|
||||
projects.</p>
|
||||
|
||||
@@ -523,7 +523,7 @@ APK—by using only one APK, you can simply increase the version code with e
|
||||
be done.</p> </li>
|
||||
<li><strong>You need to manage only a single code base.</strong>
|
||||
<p>Although you can use a <a
|
||||
href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">library project</a>
|
||||
href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>
|
||||
to share code between multiple Android projects, it's still likely that you'll reproduce some code
|
||||
across each project and this could become difficult to manage, especially when resolving
|
||||
bugs.</p></li>
|
||||
@@ -600,8 +600,8 @@ different screen sizes.</p>
|
||||
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
|
||||
|
||||
<p>Additionally, you should consider using a support library from the <a
|
||||
href="{@docRoot}sdk/compatibility-library.html">Compatibility Package</a> so that you can add <a
|
||||
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> to your activity designs
|
||||
href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a> so that you can add <a
|
||||
href="{@docRoot}guide/components/fragments.html">Fragments</a> to your activity designs
|
||||
when running on larger screens such as tablets.</p>
|
||||
|
||||
|
||||
@@ -612,14 +612,14 @@ when running on larger screens such as tablets.</p>
|
||||
only APIs available in the lowest reasonable version. For example, your application may not require
|
||||
APIs newer than Android 2.1 (API Level 7), which makes an application available to
|
||||
over 95% of Android-powered devices (as indicated by the <a
|
||||
href="{@docRoot}resources/dashboard/platform-versions.html">Platform Versions</a> dashboard).</p>
|
||||
href="{@docRoot}about/dashboards/index.html">Platform Versions</a> dashboard).</p>
|
||||
|
||||
<p>By using a support library from the <a
|
||||
href="{@docRoot}sdk/compatibility-library.html">Compatibility Package</a>, you can also use APIs
|
||||
href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a>, you can also use APIs
|
||||
from some of the latest versions (such as Android 3.0) while
|
||||
still supporting versions as low as Android 1.6. The support library includes APIs for <a
|
||||
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>, <a
|
||||
href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a>, and more. Using the fragment
|
||||
href="{@docRoot}guide/components/fragments.html">Fragments</a>, <a
|
||||
href="{@docRoot}guide/components/loaders.html">Loaders</a>, and more. Using the fragment
|
||||
APIs is particularly valuable so that you can optimize your user interface for large devices such as
|
||||
tablets.</p>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,88 +1,56 @@
|
||||
page.title=The Developer's Guide
|
||||
page.title=App Components
|
||||
page.landing=true
|
||||
page.landing.intro=Android's application framework lets you create extremely rich and innovative apps using a set of reusable components. This section explains how Android apps work and how you use components to build them.
|
||||
page.landing.image=images/ui/ui_index.png
|
||||
|
||||
@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>
|
||||
<div class="landing-docs">
|
||||
|
||||
<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>
|
||||
<div class="col-6">
|
||||
<h3>Blog Articles</h3>
|
||||
|
||||
<a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
|
||||
<h4>Using DialogFragments</h4>
|
||||
<p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p>
|
||||
</a>
|
||||
|
||||
<p>
|
||||
As you can see in the panel on the left, the Dev Guide is
|
||||
divided into several sections:
|
||||
<p>
|
||||
<a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
|
||||
<h4>Fragments For All</h4>
|
||||
<p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
|
||||
<h4>Multithreading for Performance</h4>
|
||||
<p>A good practice in creating responsive applications is to make sure your main UI thread
|
||||
does the minimum amount of work. Any potentially long task that may hang your application should be
|
||||
handled in a different thread.</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<dl>
|
||||
<dt><b>Android Basics</b></dt>
|
||||
<dd>An initial orientation to Android — what it is,
|
||||
what it offers, and how your application fits in.</dd>
|
||||
<div class="col-6">
|
||||
<h3>Training</h3>
|
||||
|
||||
<a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
|
||||
<h4>Managing the Activity Lifecycle</h4>
|
||||
<p>This class explains important lifecycle callback methods that each Activity
|
||||
instance receives and how you can use them so your activity does what the user expects and does not consume system
|
||||
resources when your activity doesn't need them.</p>
|
||||
</a>
|
||||
|
||||
<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 — from
|
||||
designing a user interface and setting up resources to storing
|
||||
data and using permissions — as needed.</dd>
|
||||
<a href="http://developer.android.com/training/basics/fragments/index.html">
|
||||
<h4>Building a Dynamic UI with Fragments</h4>
|
||||
<p>This class shows you how to create a dynamic user experience with fragments and optimize
|
||||
your app's user experience for devices with different screen sizes, all while continuing to support
|
||||
devices running versions as old as Android 1.6.</p>
|
||||
</a>
|
||||
|
||||
<dt><b>Google Play Topics</b></dt>
|
||||
<dd>Documentation for topics that concern publishing and monetizing applications on Google Play,
|
||||
such as how to enforce licensing policies and implement in-app billing.</dd>
|
||||
<a href="http://developer.android.com/training/sharing/index.html">
|
||||
<h4>Sharing Content</h4>
|
||||
<p>This class covers some common ways you can send and receive content between
|
||||
applications using Intent APIs and the ActionProvider object.</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user