summaryrefslogtreecommitdiffstats
path: root/docs/html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html')
-rw-r--r--docs/html/_redirects.yaml10
-rw-r--r--docs/html/about/dashboards/index.jd547
-rw-r--r--docs/html/about/versions/android-1.1.jd1
-rw-r--r--docs/html/about/versions/android-1.5-highlights.jd1
-rw-r--r--docs/html/about/versions/android-1.5.jd1
-rw-r--r--docs/html/about/versions/android-1.6-highlights.jd1
-rw-r--r--docs/html/about/versions/android-1.6.jd1
-rw-r--r--docs/html/about/versions/android-2.0-highlights.jd1
-rw-r--r--docs/html/about/versions/android-2.0.1.jd1
-rw-r--r--docs/html/about/versions/android-2.0.jd1
-rw-r--r--docs/html/about/versions/android-2.1.jd1
-rw-r--r--docs/html/about/versions/android-2.2-highlights.jd1
-rw-r--r--docs/html/about/versions/android-2.2.jd1
-rw-r--r--docs/html/about/versions/android-2.3.3.jd1
-rw-r--r--docs/html/about/versions/android-2.3.4.jd1
-rw-r--r--docs/html/about/versions/android-2.3.jd1
-rw-r--r--docs/html/about/versions/android-3.0.jd1
-rw-r--r--docs/html/about/versions/android-3.1.jd1
-rw-r--r--docs/html/about/versions/android-3.2.jd1
-rw-r--r--docs/html/about/versions/android-4.0.3.jd1
-rw-r--r--docs/html/about/versions/android-4.0.jd1
-rw-r--r--docs/html/about/versions/android-4.1.jd1
-rw-r--r--docs/html/about/versions/android-4.2.jd1
-rw-r--r--docs/html/about/versions/jelly-bean.jd2
-rw-r--r--docs/html/design/building-blocks/buttons.jd2
-rw-r--r--docs/html/design/building-blocks/grid-lists.jd2
-rw-r--r--docs/html/design/building-blocks/progress.jd2
-rw-r--r--docs/html/design/building-blocks/spinners.jd2
-rw-r--r--docs/html/design/building-blocks/switches.jd2
-rw-r--r--docs/html/design/building-blocks/tabs.jd2
-rw-r--r--docs/html/design/building-blocks/text-fields.jd2
-rw-r--r--docs/html/design/patterns/accessibility.jd2
-rw-r--r--docs/html/design/patterns/app-structure.jd2
-rw-r--r--docs/html/design/patterns/compatibility.jd1
-rw-r--r--docs/html/design/patterns/confirming-acknowledging.jd2
-rw-r--r--docs/html/design/patterns/gestures.jd2
-rw-r--r--docs/html/design/patterns/help.jd1
-rw-r--r--docs/html/design/patterns/navigation.jd2
-rw-r--r--docs/html/design/patterns/selection.jd2
-rw-r--r--docs/html/design/patterns/settings.jd2
-rw-r--r--docs/html/design/patterns/swipe-views.jd2
-rw-r--r--docs/html/design/patterns/widgets.jd6
-rw-r--r--docs/html/design/style/iconography.jd1
-rw-r--r--docs/html/design/style/metrics-grids.jd1
-rw-r--r--docs/html/design/style/touch-feedback.jd1
-rw-r--r--docs/html/design/style/typography.jd1
-rw-r--r--docs/html/design/style/writing.jd1
-rw-r--r--docs/html/distribute/distribute_toc.cs123
-rw-r--r--docs/html/distribute/googleplay/about/visibility.jd4
-rw-r--r--docs/html/distribute/googleplay/policies/ads.jd352
-rw-r--r--docs/html/distribute/googleplay/policies/index.jd59
-rw-r--r--docs/html/distribute/googleplay/policies/ip.jd345
-rw-r--r--docs/html/distribute/googleplay/policies/spam.jd421
-rw-r--r--docs/html/distribute/googleplay/promote/brand.jd21
-rw-r--r--docs/html/distribute/googleplay/publish/register.jd8
-rw-r--r--docs/html/distribute/googleplay/quality/tablet.jd662
-rw-r--r--docs/html/google/backup/signup.jd2
-rw-r--r--docs/html/google/gcm/gs.jd1
-rw-r--r--docs/html/google/play-services/auth.jd1
-rw-r--r--docs/html/google/play-services/maps.jd1
-rw-r--r--docs/html/google/play-services/plus.jd1
-rw-r--r--docs/html/google/play-services/setup.jd2
-rwxr-xr-xdocs/html/google/play/billing/billing_integrate.jd29
-rwxr-xr-xdocs/html/google/play/billing/billing_reference.jd4
-rw-r--r--docs/html/google/play/billing/v2/api.jd1
-rwxr-xr-xdocs/html/google/play/billing/v2/billing_integrate.jd1
-rw-r--r--docs/html/google/play/billing/v2/billing_reference.jd1
-rwxr-xr-xdocs/html/google/play/billing/v2/billing_subscriptions.jd1
-rw-r--r--docs/html/google/play/licensing/adding-licensing.jd40
-rw-r--r--docs/html/google/play/licensing/index.jd2
-rw-r--r--docs/html/google/play/licensing/licensing-reference.jd2
-rw-r--r--docs/html/google/play/licensing/overview.jd21
-rw-r--r--docs/html/guide/appendix/app-intents.jd1
-rw-r--r--docs/html/guide/appendix/g-app-intents.jd1
-rw-r--r--docs/html/guide/appendix/glossary.jd1
-rw-r--r--docs/html/guide/basics/appmodel.jd261
-rw-r--r--docs/html/guide/basics/building-blocks.jd76
-rw-r--r--docs/html/guide/basics/fixme-gs-core-packages.jd92
-rw-r--r--docs/html/guide/basics/index.html8
-rw-r--r--docs/html/guide/components/fragments.jd2
-rw-r--r--docs/html/guide/components/fundamentals.jd2
-rw-r--r--docs/html/guide/components/processes-and-threads.jd2
-rw-r--r--docs/html/guide/components/tasks-and-back-stack.jd4
-rw-r--r--docs/html/guide/practices/compatibility.jd1
-rw-r--r--docs/html/guide/practices/index.jd1
-rw-r--r--docs/html/guide/practices/optimizing-for-3.0.jd1
-rw-r--r--docs/html/guide/practices/screen-compat-mode.jd1
-rw-r--r--docs/html/guide/practices/screens-distribution.jd1
-rw-r--r--docs/html/guide/practices/screens-support-1.5.jd1
-rw-r--r--docs/html/guide/practices/seamlessness.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/activity_task_design.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd3
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd71
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd3
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_list.jd71
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_menu.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd3
-rw-r--r--docs/html/guide/practices/ui_guidelines/icon_design_tab.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/index.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/menu_design.jd1
-rw-r--r--docs/html/guide/practices/ui_guidelines/widget_design.jd1
-rw-r--r--docs/html/guide/topics/admin/device-admin.jd3
-rw-r--r--docs/html/guide/topics/admin/keychain.jd4
-rw-r--r--docs/html/guide/topics/appwidgets/index.jd3
-rw-r--r--docs/html/guide/topics/connectivity/bluetooth.jd1
-rw-r--r--docs/html/guide/topics/connectivity/sip.jd1
-rw-r--r--docs/html/guide/topics/connectivity/wifip2p.jd3
-rw-r--r--docs/html/guide/topics/data/data-storage.jd1
-rw-r--r--docs/html/guide/topics/data/install-location.jd1
-rw-r--r--docs/html/guide/topics/graphics/opengl.jd14
-rw-r--r--docs/html/guide/topics/graphics/prop-animation.jd7
-rw-r--r--docs/html/guide/topics/location/index.jd6
-rw-r--r--docs/html/guide/topics/location/strategies.jd3
-rw-r--r--docs/html/guide/topics/manifest/activity-alias-element.jd4
-rw-r--r--docs/html/guide/topics/manifest/activity-element.jd2
-rw-r--r--docs/html/guide/topics/manifest/meta-data-element.jd2
-rw-r--r--docs/html/guide/topics/media/audio-capture.jd3
-rw-r--r--docs/html/guide/topics/media/camera.jd3
-rw-r--r--docs/html/guide/topics/media/mediaplayer.jd3
-rw-r--r--docs/html/guide/topics/providers/calendar-provider.jd2
-rw-r--r--docs/html/guide/topics/resources/accessing-resources.jd12
-rw-r--r--docs/html/guide/topics/resources/animation-resource.jd2
-rw-r--r--docs/html/guide/topics/resources/layout-resource.jd2
-rw-r--r--docs/html/guide/topics/resources/providing-resources.jd2
-rw-r--r--docs/html/guide/topics/resources/runtime-changes.jd3
-rw-r--r--docs/html/guide/topics/search/adding-custom-suggestions.jd3
-rw-r--r--docs/html/guide/topics/search/adding-recent-query-suggestions.jd4
-rw-r--r--docs/html/guide/topics/search/search-dialog.jd4
-rw-r--r--docs/html/guide/topics/search/searchable-config.jd3
-rw-r--r--docs/html/guide/topics/security/index.jd65
-rw-r--r--docs/html/guide/topics/security/security.jd767
-rw-r--r--docs/html/guide/topics/sensors/sensors_motion.jd3
-rw-r--r--docs/html/guide/topics/sensors/sensors_position.jd3
-rw-r--r--docs/html/guide/topics/text/copy-paste.jd1
-rw-r--r--docs/html/guide/topics/text/creating-input-method.jd2
-rw-r--r--docs/html/guide/topics/text/spell-checker-framework.jd2
-rw-r--r--docs/html/guide/topics/ui/actionbar.jd2
-rw-r--r--docs/html/guide/topics/ui/controls/button.jd3
-rw-r--r--docs/html/guide/topics/ui/controls/checkbox.jd3
-rw-r--r--docs/html/guide/topics/ui/controls/pickers.jd5
-rw-r--r--docs/html/guide/topics/ui/controls/radiobutton.jd3
-rw-r--r--docs/html/guide/topics/ui/controls/spinner.jd5
-rw-r--r--docs/html/guide/topics/ui/controls/text.jd3
-rw-r--r--docs/html/guide/topics/ui/controls/togglebutton.jd3
-rw-r--r--docs/html/guide/topics/ui/custom-components.jd3
-rw-r--r--docs/html/guide/topics/ui/declaring-layout.jd3
-rw-r--r--docs/html/guide/topics/ui/dialogs.jd2
-rw-r--r--docs/html/guide/topics/ui/drag-drop.jd7
-rw-r--r--docs/html/guide/topics/ui/layout-objects.jd6
-rw-r--r--docs/html/guide/topics/ui/layout/gridview.jd3
-rw-r--r--docs/html/guide/topics/ui/layout/linear.jd3
-rw-r--r--docs/html/guide/topics/ui/layout/listview.jd3
-rw-r--r--docs/html/guide/topics/ui/layout/relative.jd3
-rw-r--r--docs/html/guide/topics/ui/menus.jd2
-rw-r--r--docs/html/guide/topics/ui/notifiers/index.jd92
-rw-r--r--docs/html/guide/topics/ui/notifiers/toasts.jd2
-rw-r--r--docs/html/guide/topics/ui/settings.jd2
-rw-r--r--docs/html/images/example-bad.pngbin0 -> 501 bytes
-rw-r--r--docs/html/images/example-good.pngbin0 -> 834 bytes
-rw-r--r--docs/html/images/gp-policy-ads-eula-violation.pngbin0 -> 111656 bytes
-rw-r--r--docs/html/images/gp-policy-ads-eula.pngbin0 -> 163101 bytes
-rw-r--r--docs/html/images/gp-policy-ads-impersonate-violation.pngbin0 -> 65883 bytes
-rw-r--r--docs/html/images/gp-policy-ads-maturity-violation.pngbin0 -> 81774 bytes
-rw-r--r--docs/html/images/gp-policy-ads-notif-attr-violation.pngbin0 -> 18974 bytes
-rw-r--r--docs/html/images/gp-policy-ads-notif-attr.pngbin0 -> 15726 bytes
-rw-r--r--docs/html/images/gp-policy-ads-paywall-violation.pngbin0 -> 129229 bytes
-rw-r--r--docs/html/images/gp-policy-ads-paywall.pngbin0 -> 121501 bytes
-rw-r--r--docs/html/images/gp-policy-ads-terms.pngbin0 -> 161466 bytes
-rw-r--r--docs/html/images/gp-policy-ip-copyright-violation.pngbin0 -> 178784 bytes
-rw-r--r--docs/html/images/gp-policy-ip-impersonation-violation.pngbin0 -> 117027 bytes
-rw-r--r--docs/html/images/gp-policy-ip-trademark-violation.pngbin0 -> 117292 bytes
-rw-r--r--docs/html/images/gp-policy-spam-negreview.pngbin0 -> 43371 bytes
-rw-r--r--docs/html/images/gp-policy-spam-reqrating.pngbin0 -> 50100 bytes
-rw-r--r--docs/html/sdk/1.0_r1/index.jd1
-rw-r--r--docs/html/sdk/1.0_r1/upgrading.jd1
-rw-r--r--docs/html/sdk/1.0_r2/index.jd1
-rw-r--r--docs/html/sdk/1.0_r2/upgrading.jd1
-rw-r--r--docs/html/sdk/1.1_r1/index.jd1
-rw-r--r--docs/html/sdk/1.1_r1/upgrading.jd1
-rw-r--r--docs/html/sdk/1.5_r1/index.jd1
-rw-r--r--docs/html/sdk/1.5_r1/upgrading.jd1
-rw-r--r--docs/html/sdk/1.5_r2/index.jd1
-rw-r--r--docs/html/sdk/1.5_r2/upgrading.jd1
-rw-r--r--docs/html/sdk/1.5_r3/index.jd1
-rw-r--r--docs/html/sdk/1.5_r3/upgrading.jd1
-rw-r--r--docs/html/sdk/1.6_r1/index.jd1
-rw-r--r--docs/html/sdk/1.6_r1/upgrading.jd1
-rw-r--r--docs/html/sdk/OLD_RELEASENOTES.jd1
-rw-r--r--docs/html/sdk/RELEASENOTES.jd1
-rw-r--r--docs/html/sdk/download.jd1
-rw-r--r--docs/html/sdk/index.jd1
-rw-r--r--docs/html/sdk/installing/next.jd51
-rw-r--r--docs/html/sdk/older_releases.jd1
-rw-r--r--docs/html/support.jd2
-rw-r--r--docs/html/tools/debugging/ddms.jd2
-rw-r--r--docs/html/tools/debugging/debugging-ui.jd4
-rw-r--r--docs/html/tools/device.jd2
-rw-r--r--docs/html/tools/devices/emulator.jd2
-rw-r--r--docs/html/tools/extras/oem-usb.jd7
-rw-r--r--docs/html/tools/help/index.jd2
-rw-r--r--docs/html/tools/projects/index.jd10
-rw-r--r--docs/html/tools/sdk/OLD_RELEASENOTES.jd1
-rw-r--r--docs/html/tools/sdk/RELEASENOTES.jd1
-rw-r--r--docs/html/tools/sdk/addons.jd9
-rw-r--r--docs/html/tools/sdk/adt-notes.jd5
-rw-r--r--docs/html/tools/sdk/adt_download.html10
-rw-r--r--docs/html/tools/sdk/download.jd93
-rw-r--r--docs/html/tools/sdk/libraries.jd9
-rw-r--r--docs/html/tools/sdk/ndk/1.5_r1/index.jd1
-rw-r--r--docs/html/tools/sdk/ndk/1.6_r1/index.jd1
-rw-r--r--docs/html/tools/sdk/ndk/overview.jd588
-rw-r--r--docs/html/tools/sdk/older_releases.jd1
-rw-r--r--docs/html/tools/sdk/platforms.jd9
-rw-r--r--docs/html/tools/sdk/tools-notes.jd1
-rw-r--r--docs/html/tools/sdk/usb-drivers.jd9
-rw-r--r--docs/html/tools/testing/activity_test.jd4
-rw-r--r--docs/html/tools/testing/activity_testing.jd4
-rwxr-xr-xdocs/html/tools/testing/testing_android.jd4
-rw-r--r--docs/html/tools/workflow/index.jd2
-rw-r--r--docs/html/training/accessibility/index.jd3
-rw-r--r--docs/html/training/accessibility/service.jd2
-rw-r--r--docs/html/training/animation/cardflip.jd4
-rw-r--r--docs/html/training/articles/perf-anr.jd2
-rw-r--r--docs/html/training/articles/perf-jni.jd2
-rw-r--r--docs/html/training/articles/security-ssl.jd2
-rw-r--r--docs/html/training/articles/smp.jd2
-rw-r--r--docs/html/training/backward-compatible-ui/index.jd3
-rw-r--r--docs/html/training/basics/firstapp/building-ui.jd2
-rw-r--r--docs/html/training/basics/fragments/fragment-ui.jd2
-rw-r--r--docs/html/training/basics/location/index.jd3
-rw-r--r--docs/html/training/basics/network-ops/connecting.jd4
-rw-r--r--docs/html/training/basics/network-ops/managing.jd2
-rw-r--r--docs/html/training/custom-views/index.jd3
-rw-r--r--docs/html/training/design-navigation/index.jd2
-rw-r--r--docs/html/training/enterprise/index.jd1
-rw-r--r--docs/html/training/gestures/index.jd4
-rw-r--r--docs/html/training/gestures/scroll.jd2
-rw-r--r--docs/html/training/id-auth/index.jd3
-rw-r--r--docs/html/training/implementing-navigation/index.jd3
-rw-r--r--docs/html/training/improving-layouts/index.jd1
-rw-r--r--docs/html/training/in-app-billing/index.jd1
-rw-r--r--docs/html/training/in-app-billing/list-iab-products.jd2
-rw-r--r--docs/html/training/keyboard-input/index.jd1
-rw-r--r--docs/html/training/load-data-background/index.jd2
-rw-r--r--docs/html/training/monitoring-device-state/battery-monitoring.jd14
-rw-r--r--docs/html/training/monitoring-device-state/docking-monitoring.jd2
-rw-r--r--docs/html/training/monitoring-device-state/index.jd3
-rw-r--r--docs/html/training/multiple-apks/index.jd3
-rw-r--r--docs/html/training/multiple-threads/define-runnable.jd2
-rw-r--r--docs/html/training/multiple-threads/index.jd1
-rw-r--r--docs/html/training/multiscreen/index.jd3
-rw-r--r--docs/html/training/notify-user/index.jd4
-rw-r--r--docs/html/training/run-background-service/index.jd4
-rw-r--r--docs/html/training/search/index.jd4
-rw-r--r--docs/html/training/tv/index.jd3
257 files changed, 2537 insertions, 2863 deletions
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index 2ca77dd..3e3b12d 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -24,6 +24,9 @@ redirects:
- from: /sdk/installing/next.html
to: /training/basics/firstapp/index.html
+- from: /sdk/ndk/overview.html
+ to: /tools/sdk/ndk/index.html
+
- from: /sdk/ndk/...
to: /tools/sdk/ndk/...
@@ -113,13 +116,14 @@ redirects:
- from: /guide/appendix/install-location.html
to: /guide/topics/data/install-location.html
-- from: /guide/basics/what-is-android.html
+- from: /guide/basics/...
to: /about/index.html
- from: /guide/topics/security/security.html
to: /training/articles/security-tips.html
-# type: permanent
-# comment: Move content and then adjust this
+
+- from: /guide/topics/security/index.html
+ to: /training/articles/security-tips.html
- from: /guide/appendix/market-filters.html
to: /google/play/filters.html
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index b2d50ce..e17a0fd 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -1,107 +1,65 @@
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-5" style="margin-left:0">
-
-
-<table>
-<tr>
- <th>Version</th>
- <th>Codename</th>
- <th>API</th>
- <th>Distribution</th>
-</tr>
-<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.2%</td></tr>
-<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>1.9%</td></tr>
-<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>7.5%</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.2%</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>43.9%</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.3%</td></tr>
-<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>0.9%</td></tr>
-<tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a></td>
- <td>Ice Cream Sandwich</td><td>15</td><td>28.6%</td></tr>
-<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td>
- <td rowspan="2">Jelly Bean</td><td>16</td><td>14.9%</td></tr>
-<tr><td><a href="/about/versions/android-4.2.html">4.2</a></td><!--Jelly Bean--> <td>17</td><td>1.6%</td></tr>
-</table>
-
+<style>
+div.chart,
+div.screens-chart {
+ display:none;
+}
+tr .total {
+ background-color:transparent;
+ border:0;
+ color:#666;
+}
+tr th.total {
+ font-weight:bold;
+}
+</style>
+
+
+
+
+<div class="sidebox">
+<h2>Google Play Install Stats</h2>
+<p>The Google Play Developer Console also provides <a
+href="{@docRoot}distribute/googleplay/about/distribution.html#stats">detailed statistics</a>
+about your users' devices. Those stats may help you prioritize the device profiles for which
+you optimize your app.</p>
</div>
-<div class="col-8" style="margin-right:0">
-<img style="margin-left:30px" alt=""
-src="//chart.apis.google.com/chart?&cht=p&chs=460x245&chf=bg,s,00000000&chd=t:2.1,7.5,44.1,1.2,28.6,16.5&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c"
-/>
-
-</div><!-- end dashboard-panel -->
-
-<p style="clear:both"><em>Data collected during a 14-day period ending on March 4, 2013</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="//chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C01/15%7C02/01%7C02/15%7C03/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C2013%7C%7C%7C%7C2013%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:99.3,99.4,99.5,99.5,99.5,99.6,100.0,100.0,100.0,100.0,100.0,100.0,100.0|95.6,95.8,96.1,96.3,96.4,96.7,96.9,97.2,97.4,97.4,97.6,97.7,97.9|81.4,82.3,83.2,83.8,84.7,85.6,86.4,87.0,88.2,88.8,89.4,89.9,90.3|23.7,25.5,27.4,28.7,31.1,33.0,35.4,36.8,40.3,42.0,43.6,45.1,46.0|21.5,23.5,25.5,26.8,29.4,31.4,33.8,35.2,38.8,40.7,42.3,43.9,44.8|1.1,1.4,1.8,2.1,3.2,4.8,6.5,7.5,9.9,11.7,13.3,14.8,16.1&chm=b,c3df9b,0,1,0|tFroyo,689326,1,0,15,,t::-5|b,b4db77,1,2,0|tGingerbread,547a19,2,0,15,,t::-5|b,a5db51,2,3,0|b,96dd28,3,4,0|tIce%20Cream%20Sandwich,293f07,4,0,15,,t::-5|b,83c916,4,5,0|tJelly%20Bean,131d02,5,9,15,,t::-5|B,6fad0c,5,6,0&chg=7,25&chdl=Eclair|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=add274,9dd14f,8ece2a,7ab61c,659b11,507d08"
-/>
-<p><em>Last historical dataset collected during a 14-day period ending on March 1, 2013</em></p>
-
-
-
-
-
-
-
-
+<p>This page provides information about the relative number of devices that share a certain
+characteristic, such as Android version or screen size. This information may
+help you prioritize efforts for <a
+href="{@docRoot}training/basics/supporting-devices/index.html">supporting different devices</a>.</p>
+<p>Each snapshot of data represents all the devices that visited the Google Play Store in the
+prior 14 days.</p>
+<p class="note"><strong>Note:</strong> Beginning in April, 2013, these charts are now built
+using data collected from each device when the user visits the Google Play Store. Previously, the
+data was collected when the device simply checked-in to Google servers. We believe the new
+data more accurately reflects those users who are most engaged in the Android and Google Play
+ecosystem.</p>
+<h2 id="Platform">Platform Versions</h2>
+<p>This section provides data about the relative number of devices running a given version of
+the Android platform.</p>
+<p>For information about how to target your application to devices based on
+platform version, read <a
+href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
+Platform Versions</a>.</p>
+<div id="version-chart">
+</div>
+<p style="clear:both"><em>Data collected during a 14-day period ending on April 2, 2013.
+<br/>Any versions with less than 0.1% distribution are not shown.</em>
+</p>
@@ -111,72 +69,22 @@ src="//chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,000
<h2 id="Screens">Screen Sizes and Densities</h2>
-<img alt="" style="float:right;"
-src="//chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.6,6.1,86.6,2.7" />
-
-
-<img alt="" style="float:right;clear:right"
-src="//chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A2.2,18,51.1,28.7" />
-
-
-<p>This section provides data about the relative number of active devices that have a particular
+<p>This section provides data about the relative number of 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>
+actual screen sizes and densities into several buckets as expressed by the table below.</p>
<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
+application, read <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>
-
-
-<table style="width:350px">
-<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>1.7%</td> <!-- small/ldpi -->
-<td></td> <!-- small/mdpi -->
-<td>1.0%</td> <!-- small/hdpi -->
-<td></td> <!-- small/xhdpi -->
-</tr>
-<tr><th scope="row">normal</th>
-<td>0.4%</td> <!-- normal/ldpi -->
-<td>11%</td> <!-- normal/mdpi -->
-<td>50.1%</td> <!-- normal/hdpi -->
-<td>25.1%</td> <!-- normal/xhdpi -->
-</tr>
-<tr><th scope="row">large</th>
-<td>0.1%</td> <!-- large/ldpi -->
-<td>2.4%</td> <!-- large/mdpi -->
-<td></td> <!-- large/hdpi -->
-<td>3.6%</td> <!-- large/xhdpi -->
-</tr>
-<tr><th scope="row">xlarge</th>
-<td></td> <!-- xlarge/ldpi -->
-<td>4.6%</td> <!-- xlarge/mdpi -->
-<td></td> <!-- xlarge/hdpi -->
-<td></td> <!-- xlarge/xhdpi -->
-</tr>
-</table>
-<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p>
+<div id="screens-chart">
+</div>
+<p style="clear:both"><em>Data collected during a 14-day period ending on April 2, 2013
+<br/>Any screen configurations with less than 0.1% distribution are not shown.</em></p>
@@ -187,14 +95,14 @@ ending on the data collection date noted below.</p>
<h2 id="OpenGL">Open GL Version</h2>
-<p>This section provides data about the relative number of active devices that support a particular
+<p>This section provides data about the relative number of 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>
<img alt="" style="float:right"
-src="//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.2,90.8&chf=bg,s,00000000" />
+src="//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%3A0.3,99.7&chf=bg,s,00000000" />
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
android:glEsVersion} attribute of the <a
@@ -204,10 +112,6 @@ href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
&lt;supports-gl-texture&gt;}</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>
-
<table style="width:350px">
<tr>
@@ -216,14 +120,347 @@ ending on the data collection date noted below.</p>
</tr>
<tr>
<td>1.1 only</th>
-<td>9.2%</td>
+<td>0.3%</td>
</tr>
<tr>
<td>2.0 &amp; 1.1</th>
-<td>90.8%</td>
+<td>99.7%</td>
</tr>
</table>
-<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p>
+<p style="clear:both"><em>Data collected during a 14-day period ending on April 2, 2013</em></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script>
+var VERSION_DATA =
+[
+ {
+ "chart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A1.8%2C4.0%2C39.8%2C0.2%2C29.3%2C25.0&chl=Eclair%7CFroyo%7CGingerbread%7CHoneycomb%7CIce%20Cream%20Sandwich%7CJelly%20Bean&chs=500x250&cht=p&chco=c4df9b%2C6fad0c",
+ "data": [
+ {
+ "api": 4,
+ "name": "Donut",
+ "perc": "0.1"
+ },
+ {
+ "api": 7,
+ "name": "Eclair",
+ "perc": "1.7"
+ },
+ {
+ "api": 8,
+ "name": "Froyo",
+ "perc": "4.0"
+ },
+ {
+ "api": 9,
+ "name": "Gingerbread",
+ "perc": "0.1"
+ },
+ {
+ "api": 10,
+ "name": "Gingerbread",
+ "perc": "39.7"
+ },
+ {
+ "api": 13,
+ "name": "Honeycomb",
+ "perc": "0.2"
+ },
+ {
+ "api": 15,
+ "name": "Ice Cream Sandwich",
+ "perc": "29.3"
+ },
+ {
+ "api": 16,
+ "name": "Jelly Bean",
+ "perc": "23.0"
+ },
+ {
+ "api": 17,
+ "name": "Jelly Bean",
+ "perc": "2.0"
+ }
+ ]
+ }
+];
+
+
+
+
+
+var SCREEN_DATA =
+[
+ {
+ "data": {
+ "Large": {
+ "hdpi": "0.5",
+ "ldpi": "0.7",
+ "mdpi": "2.7",
+ "tvdpi": "1.0",
+ "xhdpi": "0.8"
+ },
+ "Normal": {
+ "hdpi": "37.9",
+ "ldpi": "0.1",
+ "mdpi": "16.1",
+ "xhdpi": "25.0",
+ "xxhdpi": "0.8"
+ },
+ "Small": {
+ "ldpi": "9.5"
+ },
+ "Xlarge": {
+ "hdpi": "0.1",
+ "ldpi": "0.1",
+ "mdpi": "4.6",
+ "xhdpi": "0.1"
+ }
+ },
+ "densitychart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A10.4%2C23.4%2C1.0%2C38.5%2C25.9%2C0.8&chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chs=400x250&cht=p&chco=c4df9b%2C6fad0c",
+ "layoutchart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A4.9%2C5.7%2C79.9%2C9.5&chl=Xlarge%7CLarge%7CNormal%7CSmall&chs=400x250&cht=p&chco=c4df9b%2C6fad0c"
+ }
+];
+
+
+
+var VERSION_NAMES =
+[
+ {"api":0},{"api":1},{"api":2},{"api":3},
+ {
+ "api":4,
+ "link":"<a href='/about/versions/android-1.6.html'>1.6</a>",
+ "codename":"Donut",
+ },
+ { "api":5},
+ { "api":6},
+ {
+ "api":7,
+ "link":"<a href='/about/versions/android-2.1.html'>2.1</a>",
+ "codename":"Eclair",
+ },
+ {
+ "api":8,
+ "link":"<a href='/about/versions/android-2.2.html'>2.2</a>",
+ "codename":"Froyo"
+ },
+ {
+ "api":9,
+ "link":"<a href='/about/versions/android-2.3.html'>2.3 -<br>2.3.2</a>",
+ "codename":"Gingerbread"
+ },
+ {
+ "api":10,
+ "link":"<a href='/about/versions/android-2.3.3.html'>2.3.3 -<br>2.3.7</a>",
+ "codename":"Gingerbread"
+ },
+ { "api":11},
+ {
+ "api":12,
+ "link":"<a href='/about/versions/android-3.1.html'>3.1</a>",
+ "codename":"Honeycomb"
+ },
+ {
+ "api":13,
+ "link":"<a href='/about/versions/android-3.2.html'>3.2</a>",
+ "codename":"Honeycomb"
+ },
+ { "api":14},
+ {
+ "api":15,
+ "link":"<a href='/about/versions/android-4.0.html'>4.0.3 -<br>4.0.4</a>",
+ "codename":"Ice Cream Sandwich"
+ },
+ {
+ "api":16,
+ "link":"<a href='/about/versions/android-4.1.html'>4.1.x</a>",
+ "codename":"Jelly Bean"
+ },
+ {
+ "api":17,
+ "link":"<a href='/about/versions/android-4.2.html'>4.2.x</a>",
+ "codename":"Jelly Bean"
+ }
+];
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$(document).ready(function(){
+ // for each set of data (each month)
+ $.each(VERSION_DATA, function(i, set) {
+
+ // set up wrapper divs
+ var $div = $('<div class="chart"'
+ + ((i == 0) ? ' style="display:block"' : '')
+ + ' >');
+ var $divtable = $('<div class="col-5" style="margin-left:0">');
+ var $divchart = $('<div class="col-8" style="margin-right:0">');
+
+ // set up a new table
+ var $table = $("<table>");
+ var $trh = $("<tr><th>Version</th>"
+ + "<th>Codename</th>"
+ + "<th>API</th>"
+ + "<th>Distribution</th></tr>");
+ $table.append($trh);
+
+ // loop each data set (each api level represented in stats)
+ $.each(set.data, function(i, data) {
+ // check if we need to rowspan the codename
+ var rowspan = 1;
+ // must not be first row
+ if (i > 0) {
+ // if this row's codename is the same as previous row codename
+ if (data.name == set.data[i-1].name) {
+ rowspan = 0;
+ // otherwise, as long as this is not the last row
+ } else if (i < (set.data.length - 1)) {
+ // increment rowspan for each subsequent row w/ same codename
+ while (data.name == set.data[i+rowspan].name) {
+ rowspan++;
+ // unless we've reached the last row
+ if ((i + rowspan) >= set.data.length) break;
+ }
+ }
+ }
+
+ // create table row and get corresponding version info from VERSION_NAMES
+ var $tr = $("<tr>");
+ $tr.append("<td>" + VERSION_NAMES[data.api].link + "</td>");
+ if (rowspan > 0) {
+ $tr.append("<td rowspan='" + rowspan + "'>" + VERSION_NAMES[data.api].codename + "</td>");
+ }
+ $tr.append("<td>" + data.api + "</td>");
+ $tr.append("<td>" + data.perc + "%</td>");
+ $table.append($tr);
+ });
+
+ // create chart image
+ var $chart = $('<img style="margin-left:30px" alt="" src="' + set.chart + '" />');
+
+ // stack up and insert the elements
+ $divtable.append($table);
+ $divchart.append($chart);
+ $div.append($divtable).append($divchart);
+ $("#version-chart").append($div);
+ });
+
+
+
+ var SCREEN_SIZES = ["Small","Normal","Large","Xlarge"];
+ var SCREEN_DENSITIES = ["ldpi","mdpi","tvdpi","hdpi","xhdpi","xxhdpi"];
+
+
+ // for each set of screens data (each month)
+ $.each(SCREEN_DATA, function(i, set) {
+
+ // set up wrapper divs
+ var $div = $('<div class="screens-chart"'
+ + ((i == 0) ? ' style="display:block"' : '')
+ + ' >');
+
+ // set up a new table
+ var $table = $("<table>");
+ var $trh = $("<tr><th></th></tr>");
+ $.each(SCREEN_DENSITIES, function(i, density) {
+ $trh.append("<th scope='col'>" + density + "</th>");
+ });
+ $trh.append("<th scope='col' class='total'>Total</th>");
+ $table.append($trh);
+
+ // array to hold totals for each density
+ var densityTotals = new Array(SCREEN_DENSITIES.length);
+ $.each(densityTotals, function(i, total) {
+ densityTotals[i] = 0; // make them all zero to start
+ });
+
+ // loop through each screen size
+ $.each(SCREEN_SIZES, function(i, size) {
+ // if there are any devices of this size
+ if (typeof set.data[size] != "undefined") {
+ // create table row and insert data
+ var $tr = $("<tr>");
+ $tr.append("<th scope='row'>" + size + "</th>");
+ // variable to sum all densities for this size
+ var total = 0;
+ // loop through each density
+ $.each(SCREEN_DENSITIES, function(i, density) {
+ var num = typeof set.data[size][density] != "undefined" ? set.data[size][density] : 0;
+ $tr.append("<td>" + (num != 0 ? num + "%" : "") + "</td>");
+ total += parseFloat(num);
+ densityTotals[i] += parseFloat(num);
+ })
+ $tr.append("<td class='total'>" + total.toFixed(1) + "%</td>");
+ $table.append($tr);
+ }
+ });
+
+ // create row of totals for each density
+ var $tr = $("<tr><th class='total'>Total</th></tr>");
+ $.each(densityTotals, function(i, total) {
+ $tr.append("<td class='total'>" + total.toFixed(1) + "%</td>");
+ });
+ $table.append($tr);
+
+ // create charts
+ var $sizechart = $('<img style="float:left;width:380px" alt="" src="'
+ + set.layoutchart + '" />');
+ var $densitychart = $('<img style="float:left;width:380px" alt="" src="'
+ + set.densitychart + '" />');
+
+ // stack up and insert the elements
+ $div.append($table).append($sizechart).append($densitychart);
+ $("#screens-chart").append($div);
+ });
+
+
+});
+
+
+
+function changeVersionDate() {
+ var date = $('#date-versions option:selected').val();
+
+ $(".chart").hide();
+ $(".chart."+date+"").show();
+}
+
+
+function changeScreensVersionDate() {
+ var date = $('#date-screens option:selected').val();
+
+ $(".screens-chart").hide();
+ $(".screens-chart."+date+"").show();
+}
+
+</script>
diff --git a/docs/html/about/versions/android-1.1.jd b/docs/html/about/versions/android-1.1.jd
index b61f186..b2a1615 100644
--- a/docs/html/about/versions/android-1.1.jd
+++ b/docs/html/about/versions/android-1.1.jd
@@ -1,4 +1,5 @@
page.title=Android 1.1 Version Notes
+excludeFromSuggestions=true
sdk.version=1.1_r1
sys.date=February 2009
@jd:body
diff --git a/docs/html/about/versions/android-1.5-highlights.jd b/docs/html/about/versions/android-1.5-highlights.jd
index ff64e8c..dd4d218 100644
--- a/docs/html/about/versions/android-1.5-highlights.jd
+++ b/docs/html/about/versions/android-1.5-highlights.jd
@@ -1,4 +1,5 @@
page.title=Android 1.5 Platform Highlights
+excludeFromSuggestions=true
@jd:body
<p>
diff --git a/docs/html/about/versions/android-1.5.jd b/docs/html/about/versions/android-1.5.jd
index 78dcbd7..ca8771b 100644
--- a/docs/html/about/versions/android-1.5.jd
+++ b/docs/html/about/versions/android-1.5.jd
@@ -1,4 +1,5 @@
page.title=Android 1.5 Platform
+excludeFromSuggestions=true
sdk.platform.version=1.5
sdk.platform.apiLevel=3
sdk.platform.majorMinor=major
diff --git a/docs/html/about/versions/android-1.6-highlights.jd b/docs/html/about/versions/android-1.6-highlights.jd
index 0c56e8e..88c0f55 100644
--- a/docs/html/about/versions/android-1.6-highlights.jd
+++ b/docs/html/about/versions/android-1.6-highlights.jd
@@ -1,4 +1,5 @@
page.title=Android 1.6 Platform Highlights
+excludeFromSuggestions=true
sdk.date=September 2009
@jd:body
diff --git a/docs/html/about/versions/android-1.6.jd b/docs/html/about/versions/android-1.6.jd
index 2a66cd3..313b77a 100644
--- a/docs/html/about/versions/android-1.6.jd
+++ b/docs/html/about/versions/android-1.6.jd
@@ -1,4 +1,5 @@
page.title=Android 1.6 Platform
+excludeFromSuggestions=true
sdk.platform.version=1.6
sdk.platform.apiLevel=4
sdk.platform.majorMinor=minor
diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd
index bec49a3..3b23e4d 100644
--- a/docs/html/about/versions/android-2.0-highlights.jd
+++ b/docs/html/about/versions/android-2.0-highlights.jd
@@ -1,4 +1,5 @@
page.title=Android 2.0 Platform Highlights
+excludeFromSuggestions=true
sdk.date=October 2009
@jd:body
diff --git a/docs/html/about/versions/android-2.0.1.jd b/docs/html/about/versions/android-2.0.1.jd
index bcba717..ba00231 100644
--- a/docs/html/about/versions/android-2.0.1.jd
+++ b/docs/html/about/versions/android-2.0.1.jd
@@ -1,4 +1,5 @@
page.title=Android 2.0.1, Release 1
+excludeFromSuggestions=true
sdk.platform.version=2.0.1
sdk.platform.apiLevel=6
sdk.platform.majorMinor=minor
diff --git a/docs/html/about/versions/android-2.0.jd b/docs/html/about/versions/android-2.0.jd
index 7a12e48..82bb78f 100644
--- a/docs/html/about/versions/android-2.0.jd
+++ b/docs/html/about/versions/android-2.0.jd
@@ -1,4 +1,5 @@
page.title=Android 2.0, Release 1
+excludeFromSuggestions=true
sdk.platform.version=2.0
sdk.platform.apiLevel=5
sdk.platform.majorMinor=major
diff --git a/docs/html/about/versions/android-2.1.jd b/docs/html/about/versions/android-2.1.jd
index 3cb0708..2d5988a 100644
--- a/docs/html/about/versions/android-2.1.jd
+++ b/docs/html/about/versions/android-2.1.jd
@@ -1,4 +1,5 @@
page.title=Android 2.1 Platform
+excludeFromSuggestions=true
sdk.platform.version=2.1
sdk.platform.apiLevel=7
sdk.platform.majorMinor=minor
diff --git a/docs/html/about/versions/android-2.2-highlights.jd b/docs/html/about/versions/android-2.2-highlights.jd
index 334d036..afbf26b 100644
--- a/docs/html/about/versions/android-2.2-highlights.jd
+++ b/docs/html/about/versions/android-2.2-highlights.jd
@@ -1,4 +1,5 @@
page.title=Android 2.2 Platform Highlights
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/about/versions/android-2.2.jd b/docs/html/about/versions/android-2.2.jd
index 64ddca4..bd0f071 100644
--- a/docs/html/about/versions/android-2.2.jd
+++ b/docs/html/about/versions/android-2.2.jd
@@ -1,4 +1,5 @@
page.title=Android 2.2 APIs
+excludeFromSuggestions=true
sdk.platform.version=2.2
sdk.platform.apiLevel=8
sdk.platform.majorMinor=minor
diff --git a/docs/html/about/versions/android-2.3.3.jd b/docs/html/about/versions/android-2.3.3.jd
index 3b40831..eec0735 100644
--- a/docs/html/about/versions/android-2.3.3.jd
+++ b/docs/html/about/versions/android-2.3.3.jd
@@ -1,4 +1,5 @@
page.title=Android 2.3.3 APIs
+excludeFromSuggestions=true
sdk.platform.version=2.3.3
sdk.platform.apiLevel=10
diff --git a/docs/html/about/versions/android-2.3.4.jd b/docs/html/about/versions/android-2.3.4.jd
index b80b4b2..963df9a 100644
--- a/docs/html/about/versions/android-2.3.4.jd
+++ b/docs/html/about/versions/android-2.3.4.jd
@@ -1,4 +1,5 @@
page.title=Android 2.3.4 APIs
+excludeFromSuggestions=true
sdk.platform.version=2.3.4
sdk.platform.apiLevel=10
diff --git a/docs/html/about/versions/android-2.3.jd b/docs/html/about/versions/android-2.3.jd
index 4feff51..4b8ef91 100644
--- a/docs/html/about/versions/android-2.3.jd
+++ b/docs/html/about/versions/android-2.3.jd
@@ -1,4 +1,5 @@
page.title=Android 2.3 APIs
+excludeFromSuggestions=true
sdk.platform.version=2.3
sdk.platform.apiLevel=9
diff --git a/docs/html/about/versions/android-3.0.jd b/docs/html/about/versions/android-3.0.jd
index d0b41d3..f319fed 100644
--- a/docs/html/about/versions/android-3.0.jd
+++ b/docs/html/about/versions/android-3.0.jd
@@ -1,4 +1,5 @@
page.title=Android 3.0 APIs
+excludeFromSuggestions=true
sdk.platform.version=3.0
sdk.platform.apiLevel=11
@jd:body
diff --git a/docs/html/about/versions/android-3.1.jd b/docs/html/about/versions/android-3.1.jd
index 8681327..c22dfaa 100644
--- a/docs/html/about/versions/android-3.1.jd
+++ b/docs/html/about/versions/android-3.1.jd
@@ -1,4 +1,5 @@
page.title=Android 3.1 APIs
+excludeFromSuggestions=true
sdk.platform.version=3.1
sdk.platform.apiLevel=12
@jd:body
diff --git a/docs/html/about/versions/android-3.2.jd b/docs/html/about/versions/android-3.2.jd
index 17f4d85..ef95337 100644
--- a/docs/html/about/versions/android-3.2.jd
+++ b/docs/html/about/versions/android-3.2.jd
@@ -1,4 +1,5 @@
page.title=Android 3.2 APIs
+excludeFromSuggestions=true
sdk.platform.version=3.2
sdk.platform.apiLevel=13
@jd:body
diff --git a/docs/html/about/versions/android-4.0.3.jd b/docs/html/about/versions/android-4.0.3.jd
index dc69c99..5fa8547 100644
--- a/docs/html/about/versions/android-4.0.3.jd
+++ b/docs/html/about/versions/android-4.0.3.jd
@@ -1,4 +1,5 @@
page.title=Android 4.0.3 APIs
+excludeFromSuggestions=true
sdk.platform.version=4.0.3
sdk.platform.apiLevel=15
@jd:body
diff --git a/docs/html/about/versions/android-4.0.jd b/docs/html/about/versions/android-4.0.jd
index f2fd0c4..c1a9180 100644
--- a/docs/html/about/versions/android-4.0.jd
+++ b/docs/html/about/versions/android-4.0.jd
@@ -1,4 +1,5 @@
page.title=Android 4.0 APIs
+excludeFromSuggestions=true
sdk.platform.version=4.0
sdk.platform.apiLevel=14
@jd:body
diff --git a/docs/html/about/versions/android-4.1.jd b/docs/html/about/versions/android-4.1.jd
index 60ed7f0..060f0f4 100644
--- a/docs/html/about/versions/android-4.1.jd
+++ b/docs/html/about/versions/android-4.1.jd
@@ -1,4 +1,5 @@
page.title=Android 4.1 APIs
+excludeFromSuggestions=true
sdk.platform.version=4.1
sdk.platform.apiLevel=16
@jd:body
diff --git a/docs/html/about/versions/android-4.2.jd b/docs/html/about/versions/android-4.2.jd
index b02c1d1..73d51c5 100644
--- a/docs/html/about/versions/android-4.2.jd
+++ b/docs/html/about/versions/android-4.2.jd
@@ -1,4 +1,5 @@
page.title=Android 4.2 APIs
+excludeFromSuggestions=true
sdk.platform.version=4.2
sdk.platform.apiLevel=17
@jd:body
diff --git a/docs/html/about/versions/jelly-bean.jd b/docs/html/about/versions/jelly-bean.jd
index acb2538..71957be 100644
--- a/docs/html/about/versions/jelly-bean.jd
+++ b/docs/html/about/versions/jelly-bean.jd
@@ -904,7 +904,7 @@ style="font-weight:500;">App Widgets</span> can resize automatically to fit the
<h3>Media codec access</h3>
-<p>Android 4.1 provides low-level access to platform hardware and software codecs. Apps can query the system to discover what <strong>low-level media codecs</strong> are available on the device and then and use them in the ways they need. For example, you can now create multiple instances of a media codec, queue input buffers, and receive output buffers in return. In addition, the media codec framework supports protected content. Apps can query for an available codec that is able to play protected content with a DRM solution available on the the device.</p>
+<p>Android 4.1 provides low-level access to platform hardware and software codecs. Apps can query the system to discover what <strong>low-level media codecs</strong> are available on the device and then and use them in the ways they need. For example, you can now create multiple instances of a media codec, queue input buffers, and receive output buffers in return. In addition, the media codec framework supports protected content. Apps can query for an available codec that is able to play protected content with a DRM solution available on the device.</p>
<h3>USB Audio</h3>
diff --git a/docs/html/design/building-blocks/buttons.jd b/docs/html/design/building-blocks/buttons.jd
index 9e82ed4..600ec6c 100644
--- a/docs/html/design/building-blocks/buttons.jd
+++ b/docs/html/design/building-blocks/buttons.jd
@@ -1,5 +1,5 @@
page.title=Buttons
-page.tags="button"
+page.tags="button","input"
@jd:body
<p>A button consists of text and/or an image that clearly communicates what action will occur when the
diff --git a/docs/html/design/building-blocks/grid-lists.jd b/docs/html/design/building-blocks/grid-lists.jd
index 69a43b1..8c82ba9 100644
--- a/docs/html/design/building-blocks/grid-lists.jd
+++ b/docs/html/design/building-blocks/grid-lists.jd
@@ -1,5 +1,5 @@
page.title=Grid Lists
-page.tags="gridview","layout"
+page.tags="gridview","layout","listview"
@jd:body
<img src="{@docRoot}design/media/gridview_overview.png">
diff --git a/docs/html/design/building-blocks/progress.jd b/docs/html/design/building-blocks/progress.jd
index 96cc1af..60ad2ca 100644
--- a/docs/html/design/building-blocks/progress.jd
+++ b/docs/html/design/building-blocks/progress.jd
@@ -1,5 +1,5 @@
page.title=Progress &amp; Activity
-page.tags="progressbar"
+page.tags="progressbar","download","network"
@jd:body
<p>Progress bars and activity indicators signal to users that something is happening that will take a moment.</p>
diff --git a/docs/html/design/building-blocks/spinners.jd b/docs/html/design/building-blocks/spinners.jd
index 8c80b91..3550b0c 100644
--- a/docs/html/design/building-blocks/spinners.jd
+++ b/docs/html/design/building-blocks/spinners.jd
@@ -1,5 +1,5 @@
page.title=Spinners
-page.tags="spinner","drop down"
+page.tags="spinner","dropdown"
@jd:body
<p>Spinners provide a quick way to select one value from a set. In the default state, a spinner shows
diff --git a/docs/html/design/building-blocks/switches.jd b/docs/html/design/building-blocks/switches.jd
index 6386bdf..0b195b9 100644
--- a/docs/html/design/building-blocks/switches.jd
+++ b/docs/html/design/building-blocks/switches.jd
@@ -1,5 +1,5 @@
page.title=Switches
-page.tags="switch","checkbox","radiobutton"
+page.tags="switch","checkbox","radiobutton","button"
@jd:body
<p>Switches allow the user to select options. There are three kinds of switches: checkboxes, radio
diff --git a/docs/html/design/building-blocks/tabs.jd b/docs/html/design/building-blocks/tabs.jd
index 1fe2c62..79cc9c7 100644
--- a/docs/html/design/building-blocks/tabs.jd
+++ b/docs/html/design/building-blocks/tabs.jd
@@ -1,5 +1,5 @@
page.title=Tabs
-page.tags="tabs","action bar","navigation"
+page.tags="tabs","actionbar","navigation","viewpager"
@jd:body
<img src="{@docRoot}design/media/tabs_overview.png">
diff --git a/docs/html/design/building-blocks/text-fields.jd b/docs/html/design/building-blocks/text-fields.jd
index c1bed78..82321f0 100644
--- a/docs/html/design/building-blocks/text-fields.jd
+++ b/docs/html/design/building-blocks/text-fields.jd
@@ -1,5 +1,5 @@
page.title=Text Fields
-page.tags="text","edittext","input",
+page.tags="text","edittext","input"
@jd:body
<p>Text fields allow the user to type text into your app. They can be either single line or multi-line.
diff --git a/docs/html/design/patterns/accessibility.jd b/docs/html/design/patterns/accessibility.jd
index edf3843..5f46082 100644
--- a/docs/html/design/patterns/accessibility.jd
+++ b/docs/html/design/patterns/accessibility.jd
@@ -1,5 +1,5 @@
page.title=Accessibility
-page.tags="accessibility","navigation"
+page.tags="accessibility","navigation","input"
@jd:body
<p>One of Android's missions is to organize the world's information and make it universally accessible and useful. Accessibility is the measure of how successfully a product can be used by people with varying abilities. Our mission applies to all users-including people with disabilities such as visual impairment, color deficiency, hearing loss, and limited dexterity.</p>
diff --git a/docs/html/design/patterns/app-structure.jd b/docs/html/design/patterns/app-structure.jd
index e1bb819..1809ecd 100644
--- a/docs/html/design/patterns/app-structure.jd
+++ b/docs/html/design/patterns/app-structure.jd
@@ -1,5 +1,5 @@
page.title=Application Structure
-page.tags="navigation","layout"
+page.tags="navigation","layout","tablet"
@jd:body
<p>Apps come in many varieties that address very different needs. For example:</p>
diff --git a/docs/html/design/patterns/compatibility.jd b/docs/html/design/patterns/compatibility.jd
index 84ae337..3a56f52 100644
--- a/docs/html/design/patterns/compatibility.jd
+++ b/docs/html/design/patterns/compatibility.jd
@@ -1,4 +1,5 @@
page.title=Backwards Compatibility
+page.tags="support"
@jd:body
<p>Significant changes in Android 3.0 included:</p>
diff --git a/docs/html/design/patterns/confirming-acknowledging.jd b/docs/html/design/patterns/confirming-acknowledging.jd
index f2e88ec..e347231 100644
--- a/docs/html/design/patterns/confirming-acknowledging.jd
+++ b/docs/html/design/patterns/confirming-acknowledging.jd
@@ -1,5 +1,5 @@
page.title=Confirming &amp; Acknowledging
-page.tags="dialog","toast"
+page.tags="dialog","toast","notification"
@jd:body
<p>In some situations, when a user invokes an action in your app, it's a good idea to <em>confirm</em> or <em>acknowledge</em> that action through text.</p>
diff --git a/docs/html/design/patterns/gestures.jd b/docs/html/design/patterns/gestures.jd
index 3ef133d..127a1c8 100644
--- a/docs/html/design/patterns/gestures.jd
+++ b/docs/html/design/patterns/gestures.jd
@@ -1,5 +1,5 @@
page.title=Gestures
-page.tags="gesture","input"
+page.tags="gesture","input","touch"
@jd:body
<p>Gestures allow users to interact with your app by manipulating the screen objects you provide. The
diff --git a/docs/html/design/patterns/help.jd b/docs/html/design/patterns/help.jd
index cdac54d..a32fb25 100644
--- a/docs/html/design/patterns/help.jd
+++ b/docs/html/design/patterns/help.jd
@@ -1,4 +1,5 @@
page.title=Help
+page.tags="settings","preferences"
@jd:body
<p>We wish we could guarantee that if you follow every piece of advice on this website, everyone will be able to learn and use your app without a hitch. Sadly, that's not the case.</p>
diff --git a/docs/html/design/patterns/navigation.jd b/docs/html/design/patterns/navigation.jd
index 36debbe..b717884 100644
--- a/docs/html/design/patterns/navigation.jd
+++ b/docs/html/design/patterns/navigation.jd
@@ -1,5 +1,5 @@
page.title=Navigation with Back and Up
-page.tags="navigation","activity"
+page.tags="navigation","activity","task"
@jd:body
<p>Consistent navigation is an essential component of the overall user experience. Few things frustrate
diff --git a/docs/html/design/patterns/selection.jd b/docs/html/design/patterns/selection.jd
index 682ce56..d16e86c 100644
--- a/docs/html/design/patterns/selection.jd
+++ b/docs/html/design/patterns/selection.jd
@@ -1,5 +1,5 @@
page.title=Selection
-page.tags="actionmode","navigation"
+page.tags="actionmode","navigation","contextual"
@jd:body
<p>Android 3.0 changed the <em>long press</em> gesture&mdash;that is, a touch that's held in the same position for a moment&mdash;to be the global gesture to select data.. This affects the way you should
diff --git a/docs/html/design/patterns/settings.jd b/docs/html/design/patterns/settings.jd
index f86cd39..4748e48 100644
--- a/docs/html/design/patterns/settings.jd
+++ b/docs/html/design/patterns/settings.jd
@@ -1,5 +1,5 @@
page.title=Settings
-page.tags="settings","preferences"
+page.tags="preferences","sharedpreferences"
@jd:body
<p>Settings is a place in your app where users indicate their preferences for how your app should
diff --git a/docs/html/design/patterns/swipe-views.jd b/docs/html/design/patterns/swipe-views.jd
index b86d990..f18fc63 100644
--- a/docs/html/design/patterns/swipe-views.jd
+++ b/docs/html/design/patterns/swipe-views.jd
@@ -1,5 +1,5 @@
page.title=Swipe Views
-page.tags="viewpager","navigation"
+page.tags="viewpager","navigation","tabs"
@jd:body
<p>Efficient navigation is one of the cornerstones of a well-designed app. While apps are generally
diff --git a/docs/html/design/patterns/widgets.jd b/docs/html/design/patterns/widgets.jd
index a5979ce..3152e91 100644
--- a/docs/html/design/patterns/widgets.jd
+++ b/docs/html/design/patterns/widgets.jd
@@ -1,5 +1,5 @@
page.title=Widgets
-page.tags="appwidget"
+page.tags="appwidget","home"
@jd:body
<p>Widgets are an essential aspect of home screen customization. You can imagine them as "at-a-glance" views of an app's most important data and functionality that is accessible right from the user's home screen. Users can move widgets across their home screen panels, and, if supported, resize them to tailor the amount of information within a widget to their preference.</p>
@@ -16,7 +16,7 @@ page.tags="appwidget"
<div class="layout-content-row">
<div class="layout-content-col span-6">
<h3>Collection widgets</h3>
- <p>As the name implies, collection widgets specialize on displaying multitude elements of the same type, such as a collection of pictures from a gallery app, a collection of articles from a news app or a collection of emails/messages from a communication app. Collection widgets typically focus on two use cases: browsing the collection, and opening an element of the collection to its detail view for consumption. Collection widgets can scroll vertically.</p>
+ <p>As the name implies, collection widgets specialize in displaying multitude elements of the same type, such as a collection of pictures from a gallery app, a collection of articles from a news app or a collection of emails/messages from a communication app. Collection widgets typically focus on two use cases: browsing the collection, and opening an element of the collection to its detail view for consumption. Collection widgets can scroll vertically.</p>
</div>
<div class="layout-content-col span-3">
<img src="{@docRoot}design/media/widgets_collection_gmail.png">
@@ -137,4 +137,4 @@ A music player widget is primarily a control widget, but also keeps the user inf
<li>Choose the right widget type for your purpose.</li>
<li>For resizable widgets, plan how the content for your widget should adapt to different sizes.</li>
<li>Make your widget orientation and device independent by ensuring that the layout is capable of stretching and contracting.</li>
-</ul> \ No newline at end of file
+</ul>
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
index ce11cf7..1475e5c 100644
--- a/docs/html/design/style/iconography.jd
+++ b/docs/html/design/style/iconography.jd
@@ -1,4 +1,5 @@
page.title=Iconography
+page.tags="icons"
@jd:body
<img src="{@docRoot}design/media/iconography_overview.png">
diff --git a/docs/html/design/style/metrics-grids.jd b/docs/html/design/style/metrics-grids.jd
index e2b9ab5..3116ff6 100644
--- a/docs/html/design/style/metrics-grids.jd
+++ b/docs/html/design/style/metrics-grids.jd
@@ -1,4 +1,5 @@
page.title=Metrics and Grids
+page.tags="layout","screens"
@jd:body
<p>Devices vary not only in physical size, but also in screen density (<acronym title="Dots per
diff --git a/docs/html/design/style/touch-feedback.jd b/docs/html/design/style/touch-feedback.jd
index 5fe72a7..340a3a4 100644
--- a/docs/html/design/style/touch-feedback.jd
+++ b/docs/html/design/style/touch-feedback.jd
@@ -1,4 +1,5 @@
page.title=Touch Feedback
+page.tags="input","button"
@jd:body
<div class="layout-content-row" style="margin-bottom: -100px">
diff --git a/docs/html/design/style/typography.jd b/docs/html/design/style/typography.jd
index 427b8c6..114d13b 100644
--- a/docs/html/design/style/typography.jd
+++ b/docs/html/design/style/typography.jd
@@ -1,4 +1,5 @@
page.title=Typography
+page.tags="textview","font"
@jd:body
<div class="layout-content-row">
diff --git a/docs/html/design/style/writing.jd b/docs/html/design/style/writing.jd
index 919ea7a..5358847 100644
--- a/docs/html/design/style/writing.jd
+++ b/docs/html/design/style/writing.jd
@@ -1,4 +1,5 @@
page.title=Writing Style
+page.tags="dialog","toast","notification"
@jd:body
<p>When choosing words for your app:</p>
diff --git a/docs/html/distribute/distribute_toc.cs b/docs/html/distribute/distribute_toc.cs
index ad3121c..3ea11bf 100644
--- a/docs/html/distribute/distribute_toc.cs
+++ b/docs/html/distribute/distribute_toc.cs
@@ -1,106 +1,71 @@
<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>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/index.html">Google Play</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>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/about/visibility.html">Visibility</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/about/monetizing.html">Monetizing</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/about/distribution.html">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>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">Publishing</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>
-
- </ul>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/register.html">Get Started</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/console.html">Developer Console</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/preparing.html">Publishing Checklist</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 class="nav-section-header">
+ <a href="<?cs var:toroot ?>distribute/googleplay/developer-console.html">The Developer Console</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>
+ <li class="nav-section"><a href="<?cs var:toroot ?>distribute/googleplay/register.html">Get Started</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/distribution-controls.html">Managing Distribution</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/pricing-billing.html">Pricing and Billing</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/app-data.html">Reviewing App Data</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/advanced-options.html">Advanced Options</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/publishing.html">Publishing and Updating</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 class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">Promoting</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/promote/device-art.html">
- <span class="en">Device Art Generator</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
- <span class="en">Brand Guidelines</a></li>
+<!-- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/product-pages.html">Your Product Pages</a></li> -->
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/linking.html">Linking to Your Products</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/badges.html">Google Play Badges</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/promote/device-art.html">Device Art Generator</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">Brand Guidelines</a></li>
</ul>
</li>
-
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">
- <span class="en">App Quality</span></a>
- </div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">App Quality</a></div>
<ul>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/core.html">
- <span class="en">Core App Quality</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/tablet.html">
- <span class="en">Tablet App Quality</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
- <span class="en">Improving App Quality</span>
- </a></li>
-
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/core.html">Core App Quality</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/tablet.html">Tablet App Quality</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">Improving App Quality</a></li>
</ul>
</li>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/policies/index.html">Policies</a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/policies/spam.html">Spam</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/policies/ip.html">Intellectual<br />Property</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/policies/ads.html">Ads</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>
+ After Launch</a>
</div>
<ul>
<li><a href="<?cs var:toroot ?>distribute/googleplay/errors.html.html">Reviewing Errors</a></li>
@@ -111,22 +76,14 @@
-->
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">
- <span class="en">Spotlight</span></a>
- </div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">Spotlight</a></div>
<ul>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/tablets.html">
- <span class="en">Tablet Stories</span>
- </a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/tablets.html">Tablet Stories</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>
+ <div class="nav-section-header empty"><a href="<?cs var:toroot ?>distribute/open.html">Open Distribution</a></div>
</li>
</ul>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/about/visibility.jd b/docs/html/distribute/googleplay/about/visibility.jd
index 4957c0f..18f60e9 100644
--- a/docs/html/distribute/googleplay/about/visibility.jd
+++ b/docs/html/distribute/googleplay/about/visibility.jd
@@ -39,7 +39,7 @@ style="font-weight:500;">Growth in app consumption</span>: Users download more t
</div>
<div>
-<p>Google Play is also a top destination for visitors from the the web. Anyone
+<p>Google Play is also a top destination for visitors from 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
@@ -159,7 +159,7 @@ the editorial team will notice.</p>
<h4>Featured and Staff Picks</h4>
-<p>Each week the the Google Play editorial staff selects a new set of apps to
+<p>Each week 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>
diff --git a/docs/html/distribute/googleplay/policies/ads.jd b/docs/html/distribute/googleplay/policies/ads.jd
new file mode 100644
index 0000000..8920499
--- /dev/null
+++ b/docs/html/distribute/googleplay/policies/ads.jd
@@ -0,0 +1,352 @@
+page.title=Ads
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In This Document</h2>
+ <ol>
+ <li><a href="#content-maturity">Content and Maturity</a></li>
+ <li><a href="#context">Context and Behavior</a></li>
+ <li><a href="#disclosure" style="clear:right">Disclosure</a></li>
+ <li><a href="#impersonation">Impersonation of System UI</a></li>
+ <li><a href="#adwalls">Adwalls</a></li>
+ <li><a href="#interfering" style="clear:right;">Interference with Ads and Websites</a></li>
+ </ol>
+
+ <h2>More Resources</h2>
+ <ol>
+ <li><a href="http://play.google.com/about/developer-content-policy.html" target="_policies">Developer Program Policies</a></li>
+ <li><a href="http://www.android.com/us/developer-distribution-agreement.html#showlanguages" target="_policies">Developer Distribution Agreement</a></li>
+ <li><a href="http://support.google.com/googleplay/android-developer/answer/188189" target="_policies">Maturity Ratings</a></p>
+ </ol>
+</div>
+</div>
+
+<p>
+ Google Play policies guide how you can use ads in your apps, to help ensure
+ the best experience for users visiting and downloading apps from the store.
+</p>
+
+<p>
+ In general, for the purposes of policy, the content of ads displayed by your
+ app is considered part of your app. As an app developer, it is your
+ responsibility to ensure that the content, context, and behavior of ads in
+ your apps conforms to Google Play policies.
+</p>
+
+<p>
+ Before you publish, make sure you understand Google Play ad policies and how
+ to display ads in conformance with those policies. The sections below
+ highlight best practices and common examples to help you avoid the most
+ common types of policy violations.
+</p>
+
+<p>
+ For more information about Google Play policies that apply to your apps and
+ content, please see the <a href=
+ "http://play.google.com/about/developer-content-policy.html" target=
+ "_policies">Developer Program Policies</a> and <a href=
+ "http://play.google.com/about/developer-distribution-agreement.html" target=
+ "_policies">Developer Distribution Agreement</a>.
+</p>
+
+
+<h2 id="content-maturity">Content and Maturity</h2>
+
+<div class="example-block bad">
+ <div class="heading">Ad maturity exceeds app</div>
+ <img src="{@docRoot}images/gp-policy-ads-maturity-violation.png">
+</div>
+
+<p>
+ From a policy perspective, ads shown in your app are part of your content
+ and your app is responsible for any violations. If an ad shown in your app
+ violates Google Play policies, your app may be suspended or your developer
+ account terminated.
+</p>
+
+<p>
+ For this reason, it's important for you to be be aware of what ads will be
+ displayed in your app and to manage the ads content according to Google Play
+ policies. Here are some guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>Ads must not violate Content Policy</strong>&mdash;Ads in
+ your app must not violate the terms of Google Play’s Content Policy,
+ including those concerning illegal activities, violence, sexually
+ explicit content, or privacy violations.
+ </li>
+ <li>
+ <strong>Ads maturity must be consistent with your app's
+ maturity</strong>&mdash;Content shown in your ads must be consistent
+ with the app’s maturity rating in Google Play. Especially, ads content
+ should never exceed your app's maturity rating, even if the ads content
+ by itself complies with general policies.
+ </li>
+</ul>
+
+<p>
+ In the example at right, the app's maturity rating is set to
+ "Everyone", which is the lowest maturity level on Google Play. By choosing
+ the "Everyone" maturity level, the developer is declaring that all of the
+ content in the app, <em>including ads</em>, is suitable for all users
+ regardless of age.
+</p>
+
+<p>
+ The example app violates Google Play policies by displaying ad content with a
+ higher maturity level&mdash;ad content showing gambling, profanity, user
+ location, suggestive content, or content from another app with higher
+ maturity exceeds the "Everyone" maturity rating. Because the ad's
+ maturity is higher than the app's maturity level, the app itself is in
+ violation of policy. To correct the problem, the developer must either
+ restrict ads content to "Everyone" level or raise the app's maturity rating.
+</p>
+
+<p>
+ For detailed information about how to choose the appropriate maturity level
+ for your app, or to assess the maturity requirement of ads in your app, see
+ <a href=
+ "http://support.google.com/googleplay/android-developer/answer/188189"
+ target="_policies">Rating your application content for Google Play</a>.
+</p>
+
+
+<h2 id="context">Context and Behavior</h2>
+
+<p>
+ If your app displays ads, it should do so in ways that do not interrupt users,
+ mislead them into clicking on ads, or make changes outside the app without
+ the user's knowledge or consent. Here are some guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>Display your ads within your UI</strong>&mdash;If possible,
+ display ads only within your app's UI. This leads to a better user
+ experience and helps avoid policy violations
+ </li>
+
+ <li>
+ <strong>Make sure app origin is clear</strong>&mdash;When you display an
+ ad, it must be clear to the user that the ad has originated from your app.
+ If you show the ad in your app's UI while your app has focus, the user
+ understands the ad origin without explicit attribution. However, if you
+ display the ad outside of your app, such as in a notification, you must
+ explicitly indicate the origin.
+ </li>
+
+ <li>
+ <strong>Don't make changes outside of the app without consent</strong>
+ &mdash;Ads must not make changes outside of the app without the user's
+ full knowledge and consent. For example, ads should not install shortcuts,
+ bookmarks, or icons, or change default settings without user consent.
+ </li>
+
+ <li>
+ <strong>Changes outside the app must be reversible</strong>&mdash;If an
+ ad makes changes outside the app as described above, the changes (and
+ origin app) must be evident and easily reversible. For example, the user
+ must be able to locate and reverse the changes by adjusting settings,
+ changing ad preferences in the app, or uninstalling the app altogether.
+ </li>
+
+ <li>
+ <strong>Notification ads require user opt-in</strong>&mdash;Your app
+ should not create <a href=
+ "{@docRoot}design/patterns/notifications.html">notifications</a>
+ containing ads unless the user has specifically opted-in to this behavior
+ and is able to easily opt-out.
+ </li>
+
+ <li>
+ <strong>Use low priority for notification ads</strong>&mdash;Always
+ assign your notification ads <a href="
+ {@docRoot}reference/android/app/Notification.html#PRIORITY_LOW">low
+ priority</a> (for API level 16 and above).
+ </li>
+</ul>
+
+<div class="example-block bad" style="width:400px;margin:.5em 0 0 2em;">
+ <div class="heading">Does not fully indicate origin app</div>
+ <img src="{@docRoot}images/gp-policy-ads-notif-attr-violation.png">
+</div>
+<div class="example-block good" style="width:400px;margin:.5em 0 0 2em;">
+ <div class="heading">Indicates origin app by name and icon</div>
+ <img src="{@docRoot}images/gp-policy-ads-notif-attr.png">
+</div>
+
+<p>
+ In particular, note that notification ads must clearly identify your app as
+ the ad origin. If your app sends notification ads that do not sufficiently
+ identify your app as the origin, the app will be in violation of policy.
+</p>
+
+<p>
+ To identify your app as the origin, you should display the <strong>app's full
+ name and and icon</strong> in the notification to provide the clearest
+ identification and best policy compliance. Displaying a partial app name can
+ also be sufficient, provided the name unambiguously identifies your app.
+</p>
+
+<p>
+ Above right is an example notification ad that violates ad policy by not
+ providing attribution of the origin app. Below right, the notification ads
+ comply with policy by providing both the app icon and full app name (in this
+ case, "Turtle Test").
+</p>
+
+
+<h2 id="disclosure" style="clear:right">Disclosure of Ads to Users</h2>
+
+<p>
+ It's important to sufficiently disclose to users how your app will use ads.
+ You must make it easy for users to understand what ads will be shown in your
+ app, where they will be shown, and what the associated behaviors are, if any.
+ Further, you should ask for user consent and provide options for managing ads
+ or opt-out. Here are some guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>Tell users about your ads</strong>&mdash;Create a simple,
+ complete disclosure that tells users how your app uses ads, where the ads
+ are shown, and how they can manage ad options. Take common-sense steps to
+ make the disclosure as clear as possible.
+ </li>
+
+ <li>
+ <strong>Make sure users know</strong>&mdash;Present your ads disclosure
+ is an easy-to-see location, rather than hiding it where users are not
+ likely to find it.
+ </li>
+
+ <li>
+ <strong>Ask for consent (opt-in) at launch</strong>&mdash;Where possible,
+ include your ads disclosure in the app description as well as in an Ads
+ Terms, End User License Agreement (EULA), or similar document. Display the
+ terms at first launch and ask for the user's consent before continuing to
+ the app.
+ </li>
+</ul>
+
+<p>
+ A recommended approach is to provide an ads disclosure in an End-User License
+ Agreement (EULA). The disclosure should be clear and succinct and displayed
+ in a modal dialog that asks the user to agree to the terms before using the
+ app.
+</p>
+
+<p>
+ If your app adds homescreen icons and/or browser bookmarks, an acceptable
+ practice for revealing that behavior is to provide a disclosure in both the
+ app description and an opt-in EULA on app launch. This ensures that the
+ behaviors are clearly explained to the user up-front and requires the user’s
+ consent in a pop-up EULA to continue using the app.
+</p>
+
+<div class="example-block good" style="width:213px;margin-right:2em;">
+ <div class="heading">Disclosure in Terms</div>
+ <img src="{@docRoot}images/gp-policy-ads-terms.png">
+</div>
+
+<div class="example-block good" style="width:213px;">
+ <div class="heading">Disclosure in EULA</div>
+ <img src="{@docRoot}images/gp-policy-ads-eula.png">
+</div>
+
+<div class="example-block bad" style="width:213px;margin-left:0em;">
+ <div class="heading">Disclosure is hidden</div>
+ <img src="{@docRoot}images/gp-policy-ads-eula-violation.png">
+</div>
+
+<p style="clear:right">
+ Above left is an example of ads disclosure that is hidden in a long EULA. The
+ disclosure information itself is not clearly indicated in the document text
+ and it's not visible unless the user happens to scroll down far enough in the
+ EULA. Above middle and right show two alternative approaches that
+ present the disclosure in an obvious and clear manner at the top of a
+ EULA and in a dedicated Terms agreement.
+</p>
+
+
+<h2 id="impersonation">Impersonation of System UI</h2>
+
+<div class="example-block bad">
+ <div class="heading">Ad impersonates system dialog</div>
+ <img src="{@docRoot}images/gp-policy-ads-impersonate-violation.png">
+</div>
+
+<p>
+ Your app must not display any ad that attempts to impersonate or represent a
+ system function or UI component. If such an ad is displayed in your app, your
+ app will be in violation of policy and subject to suspension. Here are some
+ guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>No fake system dialogs or warnings</strong>&mdash;Any ad that
+ presents itself as a system dialog or warning and asks for user input is in
+ violation of Google Play policies.
+ </li>
+
+ <li>
+ <strong>No fake app updates</strong>&mdash;Ads should not impersonate
+ system UI for app updates.
+ </li>
+</ul>
+
+<p>
+ At right is an example of a pop-up ad impersonating a system dialog, warning
+ the user about viruses. This is a violation of policy.
+</p>
+
+
+<h2 id="adwalls">Adwalls</h2>
+
+<div class="example-block good" style="width:213px;">
+ <div class="heading">Adwall lets user cancel</div>
+ <img src="{@docRoot}images/gp-policy-ads-paywall.png">
+</div>
+
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Adwall forces user action</div>
+ <img src="{@docRoot}images/gp-policy-ads-paywall-violation.png">
+</div>
+
+<p>
+ If your app uses adwalls to drive affiliate traffic, those adwalls must not
+ force the user to click on ads or submit personal information for advertising
+ purposes before using the app.
+</p>
+
+<p>
+ Forcing a user action in an adwall is not only a poor user experience, it is
+ a violation of Google Play policies.
+</p>
+
+<p>
+ For this reason, <strong>all adwalls must give the user the option to
+ cancel</strong> or otherwise dismiss the ad without penalty.
+</p>
+
+<p>
+ At right is an example of an app that requires the user to click through the
+ ad to fully use the app. This is a violation of policy.
+</p>
+
+<p>
+ The adjacent example demonstrates an adequate option to let the user dismiss
+ the ad wall easily by cancelling.
+</p>
+
+
+<h2 id="interfering" style="clear:right;">Interference with Third-party Ads and Websites</h2>
+
+<p>
+ Ads associated with your app <strong>must not interfere</strong> with any
+ other ads originating in other applications.
+</p> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/policies/index.jd b/docs/html/distribute/googleplay/policies/index.jd
new file mode 100644
index 0000000..fb46055
--- /dev/null
+++ b/docs/html/distribute/googleplay/policies/index.jd
@@ -0,0 +1,59 @@
+page.title=Google Play Policies and Guidelines
+page.metaDescription=Guidelines and tips for creating apps that comply with Google Play content and distribution policies.
+@jd:body
+
+<p>
+ Before publishing your apps on Google Play, take a few minutes to read and
+ understand the content and distribution policies that apply to all apps
+ in the store. These policies help to keep Android and Google Play an enjoyable
+ and trusted platform for content consumers and developers alike.
+</p>
+
+<p>
+ The documents below highlight important policy areas and provide tips to help
+ you create policy-compliant apps. You'll also find examples and guidance on common
+ policy questions that can help your app stay clear of practices that can result in
+ low ratings or even suspensions from the store.
+</p>
+
+<p>
+ For complete information about Google Play policies, please see the full
+ <a href="http://play.google.com/about/developer-content-policy.html" target=
+ "_policies">Developer Program Policies</a> and <a href=
+ "http://play.google.com/about/developer-distribution-agreement.html" target=
+ "_policies">Developer Distribution Agreement</a> documents.
+</p>
+
+<div class="vspace size-1">
+ &nbsp;
+</div>
+<div class="layout-content-row">
+ <div class="layout-content-col span-4">
+ <h4>
+ Spam
+ </h4>
+ <p>
+ Make sure that your app does not present content that is unwanted,
+ deceptive, repetitive, or unrelated to the core function of the app.
+ </p><a href="{@docRoot}distribute/googleplay/policies/spam.html">Learn more &raquo;</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Intellectual Property
+ </h4>
+ <p>
+ Tips and examples of how to use intelletual property (IP) properly,
+ including when to ask permission to use someone else's copyright or
+ trademark.
+ </p><a href="{@docRoot}distribute/googleplay/policies/ip.html">Learn more &raquo;</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Ads
+ </h4>
+ <p>
+ Make sure that the ads displayed in your app follow the Google Play Content
+ Policy and meet the maturity rating that you have selected for your app.
+ </p><a href="{@docRoot}distribute/googleplay/policies/ads.html">Learn more &raquo;</a>
+ </div>
+</div> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/policies/ip.jd b/docs/html/distribute/googleplay/policies/ip.jd
new file mode 100644
index 0000000..0d1f68d
--- /dev/null
+++ b/docs/html/distribute/googleplay/policies/ip.jd
@@ -0,0 +1,345 @@
+page.title=Intellectual Property
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In This Document</h2>
+ <ol>
+ <li><a href="#copyright">Copyright Infringement</a></li>
+ <li><a href="#impersonation">Impersonation</a></li>
+ <li><a href="#trademarks">Trademark Infringement</a></li>
+ <li><a href="#other">DDA 4.4 Prohibited Actions</a></li>
+ </ol>
+
+ <h2>More Resources</h2>
+ <ol>
+ <li><a href="http://play.google.com/about/developer-content-policy.html"
+ target="_policies">Developer Program Policies</a></li>
+ <li><a href="http://www.android.com/us/developer-distribution-agreement.html#showlanguages"
+ target="_policies">Developer Distribution Agreement</a></li>
+ </ol>
+</div>
+</div>
+
+<p>
+ Google Play policies protect your intellectual property (IP) as well as that
+ of other app developers and content creators in the store. The policies and
+ their enforcements help ensure proper use of copyright, trademarks, and
+ developer identity in Google Play.
+</p>
+
+<p>
+ As an app developer, these IP policies benefit you. At the same time, it's
+ your responsibility to ensure that your app does not violate the IP of other
+ developers or content creators. Violations of IP-related policy may result in
+ suspension of your apps from the store and termination of your developer
+ account.
+</p>
+
+<p>
+ This document introduces several key areas of IP-related policy that you
+ should understand before publishing on Google Play. In each area you'll find
+ best practices and examples to help you avoid common types of mistakes and
+ violations.
+</p>
+
+<p>
+ For more information about Google Play policies that apply to your apps and
+ content, please see the <a href=
+ "http://play.google.com/about/developer-content-policy.html" target=
+ "_policies">Developer Program Policies</a> and <a href=
+ "http://play.google.com/about/developer-distribution-agreement.html" target=
+ "_policies">Developer Distribution Agreement</a>.
+</p>
+
+
+
+<h2 id="copyright">Copyright Infringement</h2>
+
+<p>
+ Copyright is the legal right granted to an author or creator for a literary,
+ dramatic or artistic piece of work. As soon as you create an original piece
+ of work and fix it in a tangible medium, the work is automatically protected
+ by copyright law and you are the owner of the copyright. Likewise, when other
+ people create content, they may own the copyrights for those works.
+</p>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>How to report infringements</h2>
+<p>If you feel your copyright is being infringed, you may file a Digital Millenium
+ Copyright Act (DMCA) request. Please see <a
+ href="http://support.google.com/bin/request.py?&product=androidmarket&contact_type=lr_dmca"
+ target="_policies">copyright procedures</a> for more information.</p>
+</div>
+</div>
+
+<p>
+ Copyright infringement is an improper or unauthorized use of a copyrighted
+ work. If you publish an app in Google Play that uses another party's copyrighted
+ works improperly or without permission, your apps can be suspended and your
+ developer account terminated.
+</p>
+
+<p>
+ As you design your app and prepare for publishing, make sure to review Google
+ Play policies and analyze all of your content. If your app uses or links to
+ another party's original work, make sure that your app is not infringing on
+ copyright. Not all uses of another party’s work are infringements on
+ copyright, and the rules vary by country and can be complex.
+</p>
+
+<p>
+ If you are unsure whether your use of another party's work infringes on a
+ copyright, consider getting legal advice before publishing, or simply request
+ permission to use the work from the copyright owner.
+</p>
+
+<p>
+ Here are some guidelines to help you avoid copyright infringement policy
+ violations:
+</p>
+
+<ul>
+ <li>
+ <strong>Respect copyright laws</strong>&mdash;Do not let your app infringe
+ on the copyrights of others. That includes linking to other apps or web
+ sites that contain obviously infringing material (please refer to the <a href="
+ {@docRoot}distribute/googleplay/policies/spam.html#webview-spam">Spam in WebViews</a> guidelines), and using icons or images that are obvious infringements.
+ </li>
+
+ <li>
+ <strong>Know your app's content</strong>&mdash;Before you publish, look
+ for content that may be protected by trademark or copyright in your app
+ and get legal advice if necessary. Protected work could typically include
+ product names, brands, images, music, and similar works.
+ </li>
+
+ <li>
+ <strong>Create original work</strong>&mdash;If you’re not sure whether
+ something will violate another party's copyright, the safest approach is to
+ create something that's completely original, such as images or audio
+ that you’ve created yourself. When you create your own original content,
+ you rarely have to worry about infringing on existing copyright.
+ </li>
+
+ <li>
+ <strong>Ask permission to use copyrighted work</strong>&mdash;If you want
+ to use another party's copyrighted work in your app, you should ask for
+ permission from the work's creator or copyright owner and include
+ appropriate copyright attribution.
+ </li>
+</ul>
+
+<p>
+ A common misunderstanding is believing that your app may use copyrighted
+ content without permission, provided that you clearly indicate that your app
+ is not the "official" app that readers may be familiar with. That is not the
+ case. Even if you let users know that your app is "unofficial", it still
+ violates Google Play policies if it uses or links to copyrighted content
+ without permission. Also, this type of "unofficial" app may violate <a
+ href="#impersonation">impersonation policies</a>.
+</p>
+
+<p>
+ The example app below shows an app that uses screenshots/images of known
+ artists without their authorization and lists popular songs. The combination
+ of these may induce users to download music ringtones that infringe on
+ copyright. This is a violation of Google Play policy.
+</p>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">Images and downloads that violate copyright</div>
+ <img src="{@docRoot}images/gp-policy-ip-copyright-violation.png">
+</div>
+
+
+<h2 id="impersonation">Impersonation</h2>
+
+<p>
+ Impersonation is when an app attempts to imply a relationship to another app
+ or developer, where no relationship actually exists.
+</p>
+
+<p>
+ For example, if your app displays the brand, icon, or title from another app
+ in order to get to users to download your app, you are leading users to
+ believe that your app is developed by the same entity as the other app and
+ offers similar content or experience. This is an impersonation of the other
+ app and developer, and it is a violation of Google Play policy. If you
+ publish apps that violate impersonation policies, your apps can be suspended
+ and your developer account terminated.
+</p>
+
+<p>
+ No matter what type of app you offer or what your motivation, don’t try to
+ imply an endorsement or relationship to another company or product where none
+ exists. Don’t try to establish your app as the "official" version of another
+ party's work by prominently featuring their brand names or trademarks in your
+ app title or description.
+</p>
+
+<p>
+ Even if your app description states that your app is an "unofficial" version,
+ the use of the other app's branding, trademarks, and other content still can
+ violate policy by presenting content that isn’t yours.
+</p>
+
+<p>
+ Here are some guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>Don't pretend to be someone else</strong>&mdash; Don't represent
+ that your content is produced by another company or organization if that is
+ not the case.
+ </li>
+
+ <li>
+ <strong>Don't support infringing sites or apps</strong>&mdash; Don't divert
+ users or provide links to any other site that mimics Google Play or
+ represents itself as another application or service.
+ </li>
+
+ <li>
+ <strong>Don't use another app's branding</strong>&mdash; Don’t try to pass
+ off your app as the official version of someone else’s property by using a
+ person or entity (or brand) name in your app title or description.
+ </li>
+</ul>
+
+<p>
+ Below is an example of an "unofficial" app that violates Google Play policy
+ by impersonating another company and an existing product. Specifically:
+</p>
+
+<ul>
+ <li>The example app has a name and icon that appear to be impersonating an
+ existing product.
+ </li>
+
+ <li>The example developer name implies an endorsement or relationship to
+ another company and their products where none exists.
+ </li>
+</ul>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">App name, icon, and developer name that impersonate another</div>
+ <img src="{@docRoot}images/gp-policy-ip-impersonation-violation.png">
+</div>
+
+
+<h2 id="trademarks">Trademark Infringement</h2>
+
+<p>
+ A trademark is a brand that uniquely identifies a product and distinguishes
+ it from other products. It can be a word, name, symbol, or combination of
+ those that is intended to identify the source of the product. A trademark is
+ specifically acquired by a company or other entity through a legal process
+ and once acquired gives the owner exclusive rights to the trademark usage.
+</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>How to report infringements</h2>
+<p>If you feel your trademark is being infringed, you can request a content review.
+See <a href="http://support.google.com/bin/static.py?&ts=1114905&page=ts.cs"
+target="_policies">Removing content from Google</a> for more information.</p>
+</div>
+</div>
+
+<p>
+ Trademark infringement is improper or unauthorized use of a trademark. Google
+ Play policies prohibit apps that infringe trademarks. If you publish apps in
+ Google Play that use another party's trademarks, your apps can be suspended
+ and your developer account terminated.
+</p>
+
+<p>
+ As you design your app and prepare for publishing, make sure to review Google
+ Play policies and analyze all of your content. If your app uses a trademark
+ not owned by you, or if you are not sure whether a brand is a trademark, you
+ should get legal advice before publishing. As with copyright, the rules vary
+ by country and can be complex.
+</p>
+
+<p>
+ Here are some guidelines for avoiding trademark infringement policy
+ violations:
+</p>
+
+<ul>
+ <li>
+ <strong>Understand and follow trademark laws</strong>&mdash;Don't let your
+ app infringe on the trademarks of others.
+ </li>
+
+ <li>
+ <strong>Know your app's content</strong>&mdash;Before you publish, look for
+ brands and potential trademarks used in your app and store listing and get
+ legal advice if necessary.
+ </li>
+
+ <li>
+ <strong>Use a distinct name</strong>&mdash;Don't give your app a name that
+ is confusingly similar to another company's trademark.
+ </li>
+
+ <li>
+ <strong>Don't use trademarks to imply a relationship</strong>&mdash;Don't
+ describe your app using another company's trademarks in a way that implies
+ an endorsement by or affiliation with the other company.
+ </li>
+
+ <li>
+ <strong>Use a distinct app icon and logo</strong>&mdash;Don't use a
+ modified version of another company’s trademarked logo.
+ </li>
+</ul>
+
+<p>
+ A common misunderstanding is believing that your app may use a brand or
+ trademark without permission, provided you clearly indicate that the app is
+ not the "official" or original app. That is not the case. Even if you let
+ users know that your app is "unofficial", it still violates Google Play
+ policies if it uses another party's trademarks. Also, this type of
+ "unofficial" app may violate <a href="#impersonation">impersonation
+ policies</a>.
+</p>
+
+<p>
+ Below is an example app that violates Google Play policies by infringing on
+ another party's trademarks. Specifically:
+</p>
+
+<ul>
+ <li>The example app name is confusingly similar to another party's trademark.</li>
+ <li>The example app icon is a modified version of a another party's logo.</li>
+</ul>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">App name and icon that infringe trademarks</div>
+ <img src="{@docRoot}images/gp-policy-ip-trademark-violation.png">
+</div>
+
+
+<h2 id="other">DDA 4.4 Prohibited Actions</h2>
+
+<p>
+ When you publish an app on Google Play, you agree to the terms of the
+ Developer Distribution Agreement (DDA). Section 4.4 of the DDA prohibits certain
+ types of actions on your part. For reference, you agree that you will not
+ engage in any activity with the Market, including the development or
+ distribution of Products, that interferes with, disrupts, damages, or
+ accesses in an unauthorized manner the devices, servers, networks, or other
+ properties or services of any third party including, but not limited to,
+ Android users, Google or any mobile network operator.
+</p>
+
+<p>
+ For details, please refer to the complete <a href=
+ "http://play.google.com/about/developer-distribution-agreement.html" target=
+ "_policies">Developer Distribution Agreement</a>.
+</p> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/policies/spam.jd b/docs/html/distribute/googleplay/policies/spam.jd
new file mode 100644
index 0000000..602c89a
--- /dev/null
+++ b/docs/html/distribute/googleplay/policies/spam.jd
@@ -0,0 +1,421 @@
+page.title=Spam
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In This Document</h2>
+ <ol>
+ <li><a href="#keyword-spam">Spam in App Title and Description</a></li>
+ <li><a href="#ratings">Spam in Ratings and Reviews</a></li>
+ <li><a href="#webview-spam">Spam in WebViews</a></li>
+ <li><a href="#wizard-spam">Spam from Wizards</a></li>
+ <li><a href="#message-spam">Spam in Messaging</a></li>
+ </ol>
+
+ <h2>More Resources</h2>
+ <ol>
+ <li><a href="http://play.google.com/about/developer-content-policy.html" target="_policies">Developer Program Policies</a></li>
+ <li><a href="http://play.google.com/about/developer-distribution-agreement.html" target="_policies">Developer Distribution Agreement</a></li>
+ </ol>
+</div>
+</div>
+
+<p>
+ Google Play policies prohibit spam, to help ensure the best experience for
+ Android users. Please do not publish deceptive, repetitive, or irrelevant
+ content on Google Play. Not only will it lower your app's rating and cause
+ negative reviews, it can result in your app being suspended or your developer
+ account terminated.
+</p>
+
+<p>
+ As an app developer, it is your responsibility to ensure that your apps are
+ free from spam and conform to the Google Play policies highlighted in this
+ document. Before you publish, make sure that you understand what is
+ considered spam on Google Play and check your apps for violations, even those
+ that might be inadvertent. The sections below highlight best practices and
+ common spam examples to help you avoid the most common types of policy
+ violations.
+</p>
+
+<p>
+ For more information about Google Play policies that apply to your apps and
+ content, please see the <a href=
+ "http://play.google.com/about/developer-content-policy.html" target=
+ "_policies">Developer Program Policies</a> and <a href=
+ "http://play.google.com/about/developer-distribution-agreement.html" target=
+ "_policies">Developer Distribution Agreement</a>.
+</p>
+
+
+<h2 id="keyword-spam">Spam in App Title and Description</h2>
+
+<p>
+ When you publish an app on Google Play, you should pay special attention to
+ the app's title and description in its store listing. Those fields are
+ important because they make your app recognizable to users, and they help to
+ drive downloads by highlighting what's great about your app. A memorable
+ title and compelling description are essential to effective marketing, but
+ you should realize that these must follow Google Play policies, just as your
+ app content must do.
+</p>
+
+<p>
+ Many developers unknowingly violate spam policy in their app titles and
+ descriptions in ways that are easy to avoid. In general, you can
+ avoid spam violations in your app title and description by following these
+ best practices:
+</p>
+
+<ul>
+ <li>
+ <strong>Highlight what's great about your app</strong>&mdash;Share
+ interesting and exciting facts about your app with users. Help users
+ understand what makes your app special.
+ </li>
+
+ <li>
+ <strong>Describe your app accurately</strong>&mdash;Make sure the title
+ and description describe the app function and user experience accurately.
+ </li>
+
+ <li>
+ <strong>Don't use repetitive keywords</strong>&mdash;Avoid keywords that
+ are repetitive or excessive.
+ </li>
+
+ <li>
+ <strong>Don't include unrelated keywords or references</strong> &mdash;
+ Your description should not be loaded with irrelevant keywords in an
+ attempt to manipulate ranking or relevancy.
+ </li>
+
+ <li>
+ <strong>Keep it brief</strong>&mdash;Keep the description succinct and
+ straightforward. Shorter descriptions tend to give a better user experience
+ on devices with smaller displays. Excessive length, detail, or repetition
+ can violate spam policy.
+ </li>
+</ul>
+
+<p>
+ Here's an example app title and description that follows best practices and
+ does not violate Google Play spam policies.
+</p>
+
+<div class="example-block good" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">Best practice: App description</div>
+ <table>
+ <tr>
+ <td>App Title:</td>
+ <td>Kids puzzle: Identify Turtles</td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">App Description:</td>
+ <td>
+ <p>This is the perfect app to have a good time with your children. It
+ is designed to help kids learn different species of turtles through
+ cute pictures and amusing puzzle games.</p>
+ <p>The rules of Kids puzzle: Identify Turtles are quite simple. Have
+ your child drag images around the screen to fit them into the shaded
+ region. Phonics is also utilized, as a child can also tap the word
+ below the image and hear the name pronounced.</p>
+ </td>
+ </tr>
+ </table>
+</div>
+
+<p>
+ The sections below highlight common types of policy violations in an app
+ title and description, illustrated with variations on the best practice
+ example.
+</p>
+
+<h3 id="repetitive-keywords">Repetitive keywords</h3>
+
+<p>
+ Your app description should not include keywords that are repetitive or excessive.
+</p>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">Description includes repetitive keywords</div>
+ <table>
+ <tr>
+ <td>App Title:</td>
+ <td>Kids puzzle: Identify Turtles</td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">App Description:</td>
+ <td>
+ <p>This is the perfect app to have a good time with your children. It is
+ designed to help kids learn different species of turtles through cute
+ pictures and amusing puzzle games.</p>
+ <p>The rules of Kids puzzle: Identify Turtles are quite simple. Have your
+ child drag images around the screen to fit them into the shaded region.
+ Phonics is also utilized, as a child can also tap the word below the image
+ and hear the name pronounced.</p>
+ <p style="border:2px solid red;">KEYWORDS: game, games, fun, funny, child,
+ children, kid, kids, puzzle, puzzle games, sound, turtle, turtles, sea turtles,
+ turtles, turtle, turtles, tortoise, tortoises, tortoise, tortoise, turtles,
+ turtles, turtles, turtles, tortoises, tortoise</p>
+ </td>
+ </tr>
+ </table>
+</div>
+
+<h3 id="unrelated-keywords">Unrelated keywords or references</h3>
+
+<p>
+ The description should not be loaded with irrelevant keywords in an attempt
+ to manipulate ranking or relevancy in Google Play search results.
+</p>
+
+<p>
+ For example, if your app has nothing to do with Lady Gaga, then she shouldn’t
+ be included in your description. Also, do not add highly searched, irrelevant
+ keywords that are unrelated to the function of the app. This is in breach of
+ policy.
+</p>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">Description includes unrelated keywords or references</div>
+ <table>
+ <tr>
+ <td>App Title:</td>
+ <td>Kids puzzle: Identify Turtles</td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">App Description:</td>
+ <td>
+ <p>This is the perfect app to have a good time with your children. It is designed to
+ help kids learn different species of turtles through cute pictures and amusing puzzle
+ games.</p>
+ <p>The rules of Kids puzzle: Identify Turtles are quite simple. Have your child drag
+ images around the screen to fit them into the shaded region. Phonics is also utilized,
+ as a child can also tap the word below the image and hear the name pronounced.</p>
+ <p style="border:2px solid red;">This game is as addictive as Angry Birds, more social
+ than Facebook and Twitter, and has a soundtrack reminiscent of Katy Perry and Lady
+ Gaga.</p>
+ <p style="border:2px solid red;">KEYWORDS: Angry Birds, Facebook, Twitter, Katy Perry,
+ Lady Gaga</p>
+ </td>
+ </tr>
+ </table>
+</div>
+
+<h3 id="excessive-detail">Excessive detail, references to your other apps</h3>
+
+<p>
+ Your app description should avoid excessive detail and references to your
+ other apps or products. For example, you should not list all of the details
+ of content included in the app or its various components, as shown in the
+ example below. Also, the description should not include any references to
+ other apps you’ve published.
+</p>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">Description includes excessive detail, references to your other apps</div>
+ <table>
+ <tr>
+ <td>App Title:</td>
+ <td>Kids puzzle: Identify Turtles</td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">App Description:</td>
+ <td>
+ <p>This is the perfect app to have a good time with your children. It is designed
+ to help kids learn different species of turtles through cute pictures and amusing
+ puzzle games.</p>
+ <p>The rules of Kids puzzle: Identify Turtles are quite simple. Have your child
+ drag images around the screen to fit them into the shaded region. Phonics is also
+ utilized, as a child can also tap the word below the image and hear the name
+ pronounced.</p>
+ <p style="border:2px solid red;">Turtles included in the app: Alligator
+ Snapping Turtle, Asian Box Turtle, Bog Turtle, Common Musk Turtle, Common Snapping
+ Turtle, Diamondback Terrapin, Eastern Box Turtle, Eastern Mud Turtle, Eastern Painted
+ Turtle, False Map Turtle, Florida Pond Cooter, Florida Softshell Turtle, Green Sea
+ Turtle, Map Turtle, Matamata Ornate Box Turtle, Red-bellied Side-necked Turtle,
+ Red-eared Slider, Smooth Softshell Turtle, Spiny Softshell Turtle, Spotted Turtle,
+ Western Painted Turtle, Wood Turtle, Yellow-bellied Slider</p>
+ <p style="border:2px solid red;">If you like this app try our other free apps:<br />
+ ★ Fun Zoo<br />
+ ★ CD Guns<br />
+ ★ Dessert House<br />
+ ★ Playground<br />
+ ★ 578 Weapons</p>
+ </td>
+ </tr>
+ </table>
+</div>
+
+
+<h2 id="ratings">Spam in Ratings and Reviews</h2>
+
+<p>
+ Ratings and reviews are benchmarks of app quality and users depend on them to
+ be authentic and relevant. As an app developer, you should not attempt to
+ artificially influence your app's ratings and reviews or those of your
+ competitor, such as by posting fake ratings or reviews or including spam
+ content in app reviews. The sections below provide guidelines for rating and
+ reviewing apps.
+</p>
+
+<p>
+ So that you can stay in touch with any issues that users are having with your
+ app, you should read through your ratings and reviews on a regular basis. If
+ you choose to reply to reviews, make sure to keep your reply focused on the
+ actual issues raised in the user's comments and do not ask for a higher
+ rating.
+</p>
+
+<p>
+ If you see an app or developer reply that doesn’t follow these guidelines,
+ you can report it. See <a href=
+ "http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113417&topic=2364761&ctx=topic"
+ target="_policies">Inappropriate content in comments and applications</a> for
+ more information.
+</p>
+
+<div class="example-block bad" style="width:440px;">
+ <div class="heading">Inappropriate content in a review</div>
+ <img src="{@docRoot}images/gp-policy-spam-negreview.png">
+</div>
+
+<div class="example-block bad" style="margin-top:3em;">
+ <div class="heading">Soliciting ratings</div>
+ <img src="{@docRoot}images/gp-policy-spam-reqrating.png">
+</div>
+
+<h3 id="fake-ratings">Fake or inappropriate ratings and reviews</h3>
+
+<p>
+ To help ensure the quality of ratings and reviews, Google Play policies limit
+ the ways that individuals can use ratings and reviews. In particular, note
+ that it is a violation of policy to use ratings and reviews to influence the
+ placement of any app in Google Play.
+</p>
+
+<p>
+ As an app developer, make sure that you follow these guidelines:
+</p>
+
+<ul>
+ <li>
+ <strong>Don't try to manipulate ratings</strong>&mdash;Do not engage in
+ attempts to manipulate the ratings, reviews, or ranking of your apps,
+ either directly or indirectly, or by manipulating the ratings of your
+ competitors. Do not attempt to artificially boost reviews, ratings, or
+ installs through any means.
+ </li>
+
+ <li>
+ <strong>Don't solicit ratings through incentives</strong>&mdash;Do not
+ offer users any incentives to rate your app, such as offering rewards of
+ any kind or tying app functionality to rating.
+ </li>
+
+ <li>
+ <strong>Don't rate apps multiple times</strong>&mdash;Do not review or
+ rate any app multiple times in an attempt to influence its placement in
+ Google Play.
+ </li>
+
+ <li>
+ <strong>Don't add improper content to reviews</strong>&mdash;Do not
+ include affiliate, coupon, game codes, email addresses, or links to
+ websites or other apps in your reviews. If you are responding to a user
+ review, feel free to include references to helpful resources such as a
+ support address or FAQ page.
+ </li>
+</ul>
+
+<h3 id="solicited-ratings">Soliciting ratings from users</h3>
+
+<p>
+ In general, <strong>do not offer incentives for ratings</strong>. You should
+ not offer users incentives of any kind for rating your app (or any other app)
+ on Google Play, and you should not tie your app's functionality or content to
+ rating in any way.
+</p>
+
+<p>
+ It's acceptable to ask users to rate your app without incentives, for
+ example: "If you like this game, rate us in Google Play!" On the other hand,
+ it's a policy violation to ask users to rate your app based on incentives,
+ for example: "Rate this app and get 500 coins" or "Rate this app 5 stars and
+ get you 500 coins!"
+</p>
+
+
+<h2 id="webview-spam" style="clear:right">Spam in WebViews</h2>
+
+<p>
+ Apps published on Google Play should provide their own content. Do not
+ publish an app whose primary function is to reproduce or frame someone else’s
+ website (unless you have permission).
+</p>
+
+<p>
+ Similarly, do not publish an app whose primary function is to drive affiliate
+ traffic to a website. Although affiliate deals can exist where an app's
+ primary purpose is delivering its own content or functionality, it's a
+ violation of Google Play policies to publish an app whose primary (or
+ only) purpose is to direct affiliate traffic to another website.
+</p>
+
+<div class="example-block bad" style="width:100%;float:none;margin:.5em auto 2em 0;">
+ <div class="heading">WebView spam</div>
+ <table>
+ <tr>
+ <td>App Title:</td>
+ <td>Kids puzzle: Desktop Browser for Turtoogle Game</td>
+ </tr>
+ <tr>
+ <td>Developer:</td>
+ <td>AAZZZ <span style="border:2px solid red;">(not affiliated with Turtoogle
+ Inc.)</span></td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">App Description:</td>
+ <td>
+ <p>Have you ever wanted to use the full, desktop web version of Turtoogle
+ Game from your phone or tablet instead of the Turtoogle Game mobile app
+ or Turtoogle Game mobile web site?</p>
+ <p style="border:2px solid red;">This app lets you access Turtoogle Game
+ on your Android device in the same way as you access the game on your
+ desktop computer, and with all the same Turtoogle Game features.</p>
+ </td>
+ </tr>
+ </table>
+</div>
+
+
+<h2 id="wizard-spam">Spam from Wizards</h2>
+
+<p>
+ Apps that are created by an automated tool or wizard service must not be
+ submitted to Google Play by the operator of that service on behalf of other
+ persons. Such tools often produce too many duplicative or low-quality
+ apps which crowd the higher-quality apps in the Play Store.
+</p>
+
+<p>
+ Please be advised that apps created by an automated tool are only permissible
+ if the app end-product complies with Google Play policies and is published in
+ the Play Store through a developer account that is registered and owned by
+ you.
+</p>
+
+
+<h2 id="message-spam">Spam in Messaging</h2>
+
+<p>
+ Your app may not send SMS, email, or other messages on behalf of the user
+ without providing the user with the ability to confirm the content and intended
+ recipient.
+</p>
+
+<p>
+ Google Play will aggressively remove applications that are found to send or
+ modify SMS messages without user knowledge or consent.
+</p> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd
index cea6d2c..265584f 100644
--- a/docs/html/distribute/googleplay/promote/brand.jd
+++ b/docs/html/distribute/googleplay/promote/brand.jd
@@ -172,5 +172,22 @@ Play&trade; Store app."
see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
-<p>If you are not sure you meet these brand guidelines, <a href=
- "http://services.google.com/permissions/application">please contact us</a>. </p>
+
+<h2 id="Questions">Questions</h2>
+
+<p>To view our full guidelines or for any further brand usage questions, please contact our
+Android Partner Marketing team:</p>
+<ul>
+ <li>For North and South America, please contact <a
+ href="mailto:android-brand-approvals@google.com?Subject=Brand%20Approval%20Questions"
+ >android-brand-approvals@google.com</a></li>
+
+ <li>For Europe and Emerging Markets, please contact <a
+ href="mailto:emea-android-brand@google.com?Subject=Brand%20Approval%20Questions"
+ >emea-android-brand@google.com</a></li>
+
+ <li>For Asia and Pacific-America, please contact <a
+ href="mailto:apac-android-brand-approvals@google.com?Subject=Brand%20Approval%20Questions"
+ >apac-android-brand-approvals@google.com</a></li>
+</ul>
+
diff --git a/docs/html/distribute/googleplay/publish/register.jd b/docs/html/distribute/googleplay/publish/register.jd
index dd73898..5f1f2ea 100644
--- a/docs/html/distribute/googleplay/publish/register.jd
+++ b/docs/html/distribute/googleplay/publish/register.jd
@@ -23,7 +23,7 @@ page.title=Get Started with Publishing
<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>If you will sell apps, set up a Google Wallet Merchant Account</li>
<li>Explore the Google Play Developer Console and learn about the tools for publishing</li>
</ul>
@@ -57,11 +57,11 @@ with the Developer Program Policies and US export law,</li>
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>
+<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>
+<h3>Set up a Google Wallet Merchant account</h3>
-<p>If you want to sell products on Google Play &mdash; priced apps, in-app products, or subscriptions &mdash; 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>If you want to sell products on Google Play &mdash; priced apps, in-app products, or subscriptions &mdash; you will also need to set up a Google Wallet Merchant Account. 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>
diff --git a/docs/html/distribute/googleplay/quality/tablet.jd b/docs/html/distribute/googleplay/quality/tablet.jd
index 24a30f1..a54348b 100644
--- a/docs/html/distribute/googleplay/quality/tablet.jd
+++ b/docs/html/distribute/googleplay/quality/tablet.jd
@@ -5,16 +5,18 @@ page.title=Tablet App Quality Checklist
<h2>Checklist</h2>
<ol>
-<li><a href="#core-app-quality">1. Test for Core App Quality</a></li>
+<li><a href="#core-app-quality">1. Test for Core Tablet App Quality</a></li>
<li><a href="#optimize-layouts">2. Optimize your layouts</a></li>
<li><a href="#use-extra-space">3. Use the extra screen area</a></li>
<li><a href="#use-tablet-icons">4. Use assets designed for tablets</a></li>
<li><a href="#adjust-font-sizes">5. Adjust fonts and touch targets</a></li>
<li><a href="#adjust-widgets">6. Adjust homescreen widgets</a></li>
<li><a href="#offer-full-feature-set">7. Offer the app's full feature set</a></li>
-<li><a href="#hardware-requirements">8. Don’t require hardware features</a></li>
-<li><a href="#support-screens">9. Declare tablet screen support</a></li>
-<li><a href="#google-play">10. Follow best practices for publishing in Google Play</a></li>
+<li><a href="#android-versions">8. Target Android versions properly</a></li>
+<li><a href="#hardware-requirements">9. Declare dependencies properly</a></li>
+<li><a href="#support-screens">10. Declare tablet screens support</a></li>
+<li><a href="#google-play">11. Showcase your tablet UI</a></li>
+<li><a href="#google-play-bp">12. Follow publishing best practices</a></li>
</ol>
<h2>Testing</h2>
@@ -23,7 +25,6 @@ page.title=Tablet App Quality Checklist
</ol>
</div></div>
-
<p>Before you publish an app on Google Play, it's important to make sure that
the app meets the basic expectations of tablet users through compelling features
and an intuitive, well-designed UI. </p>
@@ -46,32 +47,30 @@ to the greatest extent possible. </p>
that can help you address the topics raised in each task.</p>
-<h2 id="core-app-quality">1. Test for Core App Quality</h2>
+<h2 id="core-app-quality" style="margin-top:1.5em;">1. Test for basic tablet app quality</h2>
<p>The first step in delivering a great tablet app experience is making sure
-that it meets the <em>core app
-quality criteria</em> for all of the devices and form factors that the app is
-targeting. For complete information, see the <a
-href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Checklist</a>.
+that it meets the <em>core app quality criteria</em> for all of the devices
+and form factors that the app is targeting. For complete information, see the <a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Guidelines</a>.
</p>
-<p>To assess the quality of your app on tablets &mdash; both for core app quality
-and tablet app quality &mdash; you need to set up a suitable
-hardware or emulator environment for testing. For more information,
-see <a href="#test-environment">Setting Up a Test Environment</a>.</p>
+<p>
+ Before publishing, also ensure that your app passes several basic
+ technical checks and launch criteria, such as:
+</p>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a
-href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality
-Guidelines</a></strong> &mdash; A set of core quality criteria that all Android
-apps should meet on all targeted devices.</li>
+<ul>
+ <li><a href="#android-versions">Targets appropriate Android versions</a></li>
+ <li><a href="#hardware-requirements">Specifies any hardware dependencies properly</a></li>
+ <li><a href="#support-screens">Declares support for appropriate screens</a></li>
+ <li><a href="#use-extra-space">Uses all of the available screen space</a></li>
+ <li><a href="#google-play">Screenshots are uploaded to Google Play</a></li>
</ul>
-</td>
-</tr>
-</table>
+
+<p>The sections that follow provide more information about these and other
+quality guidelines for tablet apps.</p>
+
<h2 id="optimize-layouts">2. Optimize your layouts for larger screens</h2>
@@ -97,9 +96,12 @@ efficient multipane UI, easier navigation, and additional content. </p>
<p>Here are some suggestions:</p>
<div style="width:390px;float:right;margin:1.5em;margin-top:0em;">
-<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="width:390px;padding:4px;margin-bottom:0em;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png"
+style="width:390px;padding:4px;margin-bottom:0em;">
<p class="image-caption" style="padding:0em .5em .5em 2em"><span
-style="font-weight:500;">Get rid of "stretched" UI</span>: On tablets, single-pane layouts lead to awkward whitespace and excessive line lengths. Use padding to reduce the width of UI elements and consider using multi-pane layouts.</p>
+style="font-weight:500;">Get rid of "stretched" UI</span>: On tablets, single-pane
+layouts lead to awkward whitespace and excessive line lengths. Use padding to
+reduce the width of UI elements and consider using multi-pane layouts.</p>
</div>
<ul>
@@ -131,29 +133,51 @@ across the screen:</p>
multi-pane UI for tablets (see next section).</li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
-</a></strong> &mdash; Android Design document that explains ....</li>
-<li><strong><a href="http://developer.android.com/design/style/devices-displays.html">Devices and Displays
-</a></strong> &mdash; Android Design document that explains ....</li>
-<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
-<li><strong><a href="http://developer.android.com/guide/practices/screens_support.html#ConfigurationExamples">Configuration examples
-</a></strong> &mdash; Examples of how to declare layouts and other resources for specific screen sizes.</a></li>
-</ul>
-</td>
-</tr>
-</table>
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href=
+ "{@docRoot}design/style/metrics-grids.html">Metrics
+ and Grids</a>&mdash;Android Design document that explains how to create
+ layouts based on density-independent grids.
+ </li>
+
+ <li>
+ <a href=
+ "{@docRoot}design/style/devices-displays.html">Devices
+ and Displays</a>&mdash;Android Design document that explains how to
+ design a UI that works well on different devices and
+ screen sizes.
+ </li>
+
+ <li>
+ <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+ Screens</a>&mdash;Developer documentation that explains the details of
+ managing UI for best display on multiple screen sizes.
+ </li>
+
+ <li>
+ <a href=
+ "{@docRoot}guide/practices/screens_support.html#ConfigurationExamples">
+ Configuration examples</a>&mdash;Examples of how to declare layouts and
+ other resources for specific screen sizes.
+ </li>
+ </ul>
+</div>
<h2 id="use-extra-space">3. Take advantage of extra screen area available on tablets</h2>
<div style="width:290px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
-<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="width:280px;padding:4px;margin-bottom:0em;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png"
+style="width:280px;padding:4px;margin-bottom:0em;">
<p class="image-caption" style="padding:0em .5em .5em 1.5em"><span
-style="font-weight:500;">Multi-pane layouts</span> result in a better visual balance on tablet screens, while offering more utility and legibility.</p>
+style="font-weight:500;">Multi-pane layouts</span> result in a better visual
+balance on tablet screens, while offering more utility and legibility.</p>
</div>
<p>Tablet screens provide significantly more screen real estate to your app,
@@ -175,42 +199,62 @@ users to navigate your app. </li>
<li>Plan how you want the panels of your compound views to reorganize when
screen orientation changes.</li>
-
-
<div style="width:490px;margin:1.5em auto 1.5em 0;">
-
<div style="">
-<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-single-panes.png"
+style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
<p class="image-caption" style="padding:.5em"><span
-style="font-weight:500;">Compound views</span> combine several single views from a handset UI <em>(above)</em> into a richer, more efficient UI for tablets <em>(below)</em>. </p>
+style="font-weight:500;">Compound views</span> combine several single views from a
+handset UI <em>(above)</em> into a richer, more efficient UI for tablets
+<em>(below)</em>. </p>
</div>
</div>
<li>While a single screen is implemented as an {@link android.app.Activity}
subclass, consider implementing individual content panels as {@link
-android.app.Fragment} subclasses. This lets you maximize code reuse across
-different form factors and across screens that share content.</li>
+android.app.Fragment} subclasses. This lets you
+maximize code reuse across different form factors and across screens that
+share content.</li>
<li>Decide on which screen sizes you'll use a multi-pane UI, then provide the
different layouts in the appropriate screen size buckets (such as
<code>large</code>/<code>xlarge</code>) or minimum screen widths (such as
<code>sw600dp</code>/<code>sw720</code>).</li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a></strong> &mdash; Android Design guide for using multi-pane UI, including examples of how to flatten navigation and integrate more content into your tablet UI.</li>
-<li><strong><a href="{@docRoot}training/design-navigation/multiple-sizes.html">Planning for Multiple Touchscreen Sizes</a></strong> &mdash; Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
-<li><strong><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></strong> &mdash; Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
-</ul>
-</td>
-</tr>
-</table>
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane
+ Layouts</a>&mdash;Android Design guide for using multi-pane UI, including
+ examples of how to flatten navigation and integrate more content into
+ your tablet UI.
+ </li>
+
+ <li>
+ <a href=
+ "{@docRoot}training/design-navigation/multiple-sizes.html">Planning for Multiple
+ Touchscreen Sizes</a>&mdash;Android Training class that walks you through
+ the essentials of planning an intuitive, effective navigation for tablets
+ and other devices.
+ </li>
+
+ <li>
+ <a href="{@docRoot}training/multiscreen/index.html">Designing for
+ Multiple Screens</a>&mdash;Android Training class that walks you through
+ the essentials of planning an intuitive, effective navigation for tablets
+ and other devices.
+ </li>
+ </ul>
+</div>
-<h2 id="use-tablet-icons">4. Use Icons and other assets that are designed for tablet screens</h2>
+<h2 id="use-tablet-icons">4. Use Icons and other assets that are designed
+for tablet screens</h2>
<p>So that your app looks its best, make sure to use icons and other bitmap
assets that are created specifically for the densities used by tablet screens.
@@ -268,18 +312,43 @@ resource qualifiers</a> to ensure that the proper set of alternative resources
gets loaded.</li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="{@docRoot}design/style/iconography.html">Iconography</a></strong> &mdash; Android Design document that shows how to use various types of icons.</li>
-<li><strong><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></strong> &mdash; Developer documentation on how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
-<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; API Guide documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
-<li><strong><a href="{@docRoot}training/basics/supporting-devices/screens.html">Supporting Different Screens</a></strong> &mdash; Android Training class that takes you through the process of optimizing the user experience for different screen sizes and densities.</li>
-</ul>
-</td>
-</tr>
-</table>
+<p>At a minimum, your app should supply custom drawables and assets for common tablet screen densities, tagged with the qualifiers <code>hdpi</code>, <code>xhdpi</code>, or <code>xxhdpi</code>.</p>
+
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href="{@docRoot}design/style/iconography.html">Iconography</a>&mdash; Android
+ Design document that shows how to use various types of icons.
+ </li>
+
+ <li>
+ <a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">Providing
+ Resources</a>&mdash;Developer documentation on how to provide
+ sets of layouts and drawable resources for specific ranges of device
+ screens.
+ </li>
+
+ <li>
+ <a href="{@docRoot}guide/practices/screens_support.html">Supporting
+ Multiple Screens</a>&mdash;API Guide documentation that
+ explains the details of managing UI for best display on multiple screen
+ sizes.
+ </li>
+
+ <li>
+ <a href=
+ "{@docRoot}training/basics/supporting-devices/screens.html">Supporting Different
+ Screens</a>&mdash;Android Training class that takes you
+ through the process of optimizing the user experience for different
+ screen sizes and densities.
+ </li>
+ </ul>
+</div>
<h2 id="adjust-font-sizes">5. Adjust font sizes and touch targets for tablet screens</h2>
@@ -300,29 +369,49 @@ correspond to, and ensure that there are no improper line breaks in labels,
titles, and other elements.</li>
<li>The recommended touch-target size for onscreen elements is 48dp (32dp
minimum) &mdash; some adjustments may be needed in your tablet UI. Read <a
-href="http://developer.android.com/design/style/metrics-grids.html">Metrics and
+href="{@docRoot}design/style/metrics-grids.html">Metrics and
Grids
</a> to learn about implementation strategies to help most of your users. To
meet the accessibility needs of certain users, it may be appropriate to use
larger touch targets. </li>
<li>When possible, for smaller icons, expand the touchable area to more than
-48dp using {@link android.view.TouchDelegate} or just centering the icon within
-the transparent button.</li>
+48dp using {@link android.view.TouchDelegate}
+or just centering the icon within the transparent button.</li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
-</a></strong> &mdash; Android Design document that explains how to arrange and size touch targets and other UI elements on the screen.</li>
-<li><strong><a href="{@docRoot}design/style/typography.html">Typography</a></strong> &mdash; Android Design document that gives an overview of how to use typography in your apps. </li>
-<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
-<li><strong><a href="{@docRoot}training/multiscreen/screendensities.html">Supporting Different Densities</a></strong> &mdash; Android Training class that shows you how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
-</ul>
-</td>
-</tr>
-</table>
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href=
+ "{@docRoot}design/style/metrics-grids.html">Metrics
+ and Grids</a> &mdash;Android Design document that explains how to arrange
+ and size touch targets and other UI elements on the screen.
+ </li>
+
+ <li>
+ <a href="{@docRoot}design/style/typography.html">Typography</a>&mdash;Android
+ Design document that gives an overview of how to use typography in your
+ apps.
+ </li>
+
+ <li>
+ <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+ Screens</a>&mdash;Developer documentation that explains the details of
+ managing UI for best display on multiple screen sizes.
+ </li>
+
+ <li>
+ <a href="{@docRoot}training/multiscreen/screendensities.html">Supporting
+ Different Densities</a>&mdash;Android Training class that shows you how
+ to provide sets of layouts and drawable resources for specific ranges of
+ device screens.
+ </li>
+ </ul>
+</div>
<h2 id="adjust-widgets">6. Adjust sizes of home screen widgets for tablet screens</h2>
@@ -343,17 +432,25 @@ horizontal or square widget). </li>
possible.</li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="{@docRoot}guide/topics/appwidgets/index.html#MetaData">Adding the AppWidgetProviderInfo Metadata
-</a></strong> &mdash; API Guide that explains how to set the height and width dimensions of a widget.</li>
-<li><strong><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget Design Guidelines</a></strong> &mdash; API Guide that provides best practices and techniques for designing and managing the size of widgets. </li>
-</ul>
-</td>
-</tr>
-</table>
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href="{@docRoot}guide/topics/appwidgets/index.html#MetaData">Adding the
+ AppWidgetProviderInfo Metadata</a> &mdash;API Guide that explains how to
+ set the height and width dimensions of a widget.
+ </li>
+
+ <li>
+ <a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget
+ Design Guidelines</a>&mdash;API Guide that provides best practices and
+ techniques for designing and managing the size of widgets.
+ </li>
+ </ul>
+</div>
<h2 id="offer-full-feature-set">7. Offer the app's full feature set to tablet users</h2>
@@ -382,8 +479,25 @@ that it is not accessible to users or that it offers “graceful degradation”
to a replacement feature (also see the section below on hardware features).</li>
</ul>
+<h2 id="android-versions">8. Target Android versions properly</h2>
+
+<p>To ensure the broadest possible distribution to tablets, make sure that your
+app is targeting the Android versions that support tablets. You can declare
+the targeted range of Android versions in the
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+element in the app manifest.</p>
-<h2 id="hardware-requirements">8. Don’t require hardware features that might not be available on tablets</h2>
+<p>At a minimum, your app's
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+should declare support for Android versions as follows:</p>
+
+ <ul>
+ <li>If a <code>targetSdkVersion</code> attribute is declared, it should have a value of 11 or higher, OR</li>
+ <li>If a <code>minSdkVersion</code> attribute is declared, it should have a value of 11 or higher.</li>
+ <li>Also, if a <code>maxSdkVersion</code> attribute is declared, it must have a value of 12 or higher. Note that, in most cases, the use of <code>maxSdkVersion</code> is <em>not recommended</em>.</li>
+</ul>
+
+<h2 id="hardware-requirements">9. Declare hardware feature dependencies properly</h2>
<p>Handsets and tablets typically offer slightly different hardware support for
sensors, camera, telephony, and other features. For example, many tablets are
@@ -412,106 +526,290 @@ href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permiss
href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">imply
feature requirements</a> that might not be appropriate for tablets, except when
accompanied by a corresponding <code>&lt;uses-feature&gt;</code> element
-declared with the <code>android:required=”false”</code> attribute.</li>
+declared with the <code>android:required=”false”</code> attribute.
+<p>Here's an example of a dependency that's properly declared as "not required", so that
+it does not limit distribution to devices that do not support the dependency:</p>
+<p><code>&lt;uses-feature android:name="android.hardware.telephony"
+android:required="false" /&gt;</code></p></li>
</ul>
<p>In all cases, the app must function normally when the hardware features it
-uses are not available and should offer “graceful degradation” and alternative
+uses are not available and should offer "graceful degradation" and alternative
functionality where appropriate. For example, if GPS is not supported on the device,
your app could let the user set their location manually. The app should do
run-time checking for the hardware capability that it needs and handle as needed.</p>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions that Imply Feature Requirements</a></strong> &mdash; A list of permissions that may cause unwanted filtering if declared in your app's manifest.</li>
-<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a></strong> &mdash; Description and reference documentation for the <code>&lt;uses-feature&gt;</code> manifest element.</li>
-<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#testing">Testing the features required by your application</a></strong> &mdash; Description of how to determine the actual set of hardware and software requirements (explicit or implied) that your app requires.</li>
+<div class="rel-resources">
+<h3>
+ Related resources
+</h3>
+
+<ul>
+ <li>
+ <a href=
+ "{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions
+ that Imply Feature Requirements</a>&mdash;A list of permissions that may
+ cause unwanted filtering if declared in your app's manifest.
+ </li>
+ <li>
+ <a href=
+ "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>&mdash;Description
+ and reference documentation for the <code>&lt;uses-feature&gt;</code>
+ manifest element.
+ </li>
+
+ <li>
+ <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#testing">Testing
+ the features required by your application</a>&mdash;Description of how to
+ determine the actual set of hardware and software requirements (explicit or
+ implied) that your app requires.
+ </li>
</ul>
-</td>
-</tr>
-</table>
+</div>
+
+<h2 id="support-screens">10. Declare support for tablet screens</h2>
+
+<p>To ensure that you can distribute your app to a broad range of tablets, your app should
+declare support for tablet screen sizes in the
+<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+element in the app manifest, as follows:</p>
+
+<ul>
+ <li>A
+ <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ element, if declared, must not specify <code>android:largeScreens="false"</code>
+ or <code>android:xlargeScreens="false"</code>.</li>
+ <li>For apps targeting <code>minSdkVersion</code> value less than 13, a
+ <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ element must be declared with both <code>android:largeScreens="true"</code> and
+ <code>android:xlargeScreens="true"</code>.</li>
+</ul>
+
+<p>If the app declares a
+<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+element in the manifest, the element should include attributes that specify
+<em>all of the size and density combinations for tablet screens</em> that the
+app supports. Note that, if possible, you should avoid using the
+<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+element in your app.</p>
+
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href=
+ "{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring
+ Screen Size Support</a>&mdash;Developer documentation that explains the
+ details of managing UI for best display on multiple screen sizes.
+ </li>
+ </ul>
+</div>
+
+
+<h2 id="google-play">11. Showcase your tablet UI in Google Play</h2>
+
+<p>
+ After you've done the work to create an rich, optimized UI for your tablet
+ app, make sure that you let your customers know about it! Here are some key
+ ways to promote your tablet app to users on Google Play.
+</p>
+
+<h5>
+ Upload screenshots of your tablet UI
+</h5>
+
+<p>
+ Tablet users want to know what your app is like on a tablet device, not on a
+ phone. If you developed a tablet app, make sure to upload screenshots
+ of your tablet UI to the Developer Console. Here are some guidelines:
+ </p>
+
+<ul style="margin-top:0;">
+ <li>Your screenshots should show the core functionality of your app, not a
+ startup or sign-in page. Wherever users will spend most of their time, that's
+ what you should show in your screenshots.
+ </li>
+
+ <li>Add screenshots taken on both 7-inch and 10-inch tablets.
+ </li>
+
+ <li>It's recommended that you add screenshots taken in both landscape and
+ portrait orientations, if possible.
+ </li>
+
+ <li>Use screen captures if possible. Avoid showing actual device hardware in your
+ screenshots.</li>
+ <li>The recommended resolution of your tablet screenshots is <strong>1280 x 720</strong>
+ or higher in each orientation.
+ </li>
-<h2 id="support-screens">9. Declare support for tablet screen configurations</h2>
+ <li>You can upload as many as 8 screenshots of your tablet UI for 7-inch tablets
+ and an additional 8 for 10-inch tablets.
+ </li>
+</ul>
-<p>To ensure that you can distribute your app to a broad range of tablets,
-declare all the screen sizes that your app supports in its manifest:</p>
+<h5>
+ Update your app description and release notes
+</h5>
<ul>
-<li>Declare a <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> element
-with appropriate attributes, as needed.</li>
-<li>If the app declares a <code>&lt;compatible-screens&gt;</code> element in the
-manifest, the element must include attributes that specify <em>all of the size and
-density combinations for tablet screens</em> that the app supports. Note that, if possible,
-you should avoid using this element in your app.</li>
+ <li>In your app description, make sure to highlight that your app offers
+ tablet-optimized UI and great features for tablet users. Consider adding some
+ detail about how your tablet UI works and why users will like it.
+ </li>
+
+ <li>Include information about tablet support in the app's release notes and
+ update information.
+ </li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a></strong>
-&mdash; Description and reference documentation for the <code>&lt;supports-screens&gt;</code>
-manifest element.</li>
-<li><strong><a href="{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring Screen Size
-Support</a></strong> &mdash; Developer documentation that explains the details of managing UI
-for best display on multiple screen sizes.</li>
+<h5>
+ Update your promotional video
+</h5>
+
+<p>
+ Many users view an app's promotional video to get an idea of what the app is
+ like and whether they'll enjoy it. For tablet users, capitalize on this
+ interest by highlighting your app's tablet UI in your promotional video. Here
+ are some tips and guidelines:
+</p>
+
+<ul>
+ <li>Add one or more shots of your app running on a tablet. To engage with
+ tablet users most effectively, it's recommended that you promote your tablet
+ UI in approximately equal proportion to your phone UI.
+ </li>
+
+ <li>Show your tablet UI as early as possible in the video. Don't assume that
+ tablet users will wait patiently through a feature walkthrough on a phone UI.
+ Ideally, you should engage them immediately by showing the tablet UI within
+ the first 10 seconds, or at the same point that you introduce the phone UI.
+ </li>
+
+ <li>To make it clear that you are showing a tablet UI, include shots of your
+ app running on a hand-held tablet device.
+ </li>
+
+ <li>Highlight your app's tablet UI in the video's narrative or voiceover.
+ </li>
</ul>
-</td>
-</tr>
-</table>
+<h5>
+ Feature your tablet UI in your promotional campaigns
+</h5>
-<h2 id="google-play">10. Follow best practices for publishing in Google Play</h2>
+<p>
+ Make sure to let tablet users know about your tablet UI in your promotional
+ campaigns, web site, social posts, advertisements, and elsewhere. Here are
+ some suggestions:
+</p>
<ul>
-<li>Publish your app as a single APK for all screen sizes (handsets
-and tablets), with a single Google Play listing:
- <ul style="margin-top:.25em;">
- <li>Easier for users to find your app from search, browsing, or promotions</li>
- <li>Easier for users to restore your app automatically if they get a new device.</li>
- <li>Your ratings and download stats are consolidated across all devices.</li>
- <li>Publishing a tablet app in a second listing can dilute ratings for your brand.</li>
- </ul>
-</li>
-<li>If necessary, you can alternatively choose to deliver your app using <a
-href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple APK Support</a>,
-although in most cases using a single APK to reach all devices is strongly recommended.</li>
-
-<li>Highlight your app’s tablet capabilities in the product details page:
- <ul style="margin-top:.25em;">
- <li>Add <strong>at least one screenshot taken while the app is running on a
- tablet</strong>. It's recommended that you add one screenshot of landscape orientation
- and one of portrait orientation, if possible. These screenshots make it clear to users
- that your app is designed for tablets and highlight all the effort you've put into designing
- a great tablet app experience.</li>
- <li>Mention tablet support in the app description.</li>
- <li>Include information about tablet support in the app's release notes and update
- information.</li>
- <li>In your app's promo video, add shots of your app running on a tablet.</li>
+ <li>Plan a marketing or advertising campaign that highlights the use of your
+ app on tablets.</li>
+
+ <li>Show your tablet app at its best in your promotional campaigns&mdash;use the <a href=
+ "{@docRoot}distribute/promote/device-art.html">Device Art Generator</a> to
+ quickly generate a high-quality promotional image of your app running on a
+ 7-inch or 10-inch tablet, in the orientation of your choice, with or without
+ drop-shadow and screen glare. It's as simple as capture, drag, and drop.
+ </li>
+
+ <li>Include a Google Play badge in your online promotions to let users link
+ directly to your app's store listing. You can generate a badge in a variety
+ of languages using the <a href=
+ "{@docRoot}distribute/googleplay/promote/badges.html">Badge Generator</a>.
+ </li>
+</ul>
+
+<div class="rel-resources">
+ <h3>
+ Related resources
+ </h3>
+
+ <ul>
+ <li>
+ <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing
+ Checklist</a>
+ &mdash;Recommendations on how to prepare your app for publishing, test
+ it, and launch successfully on Google Play.
+ </li>
+
+ <li>
+ <a href="https://play.google.com/apps/publish/">Google Play
+ Developer Console</a>&mdash;The tools console for publishing
+ your app to Android users.
+ </li>
+ <li>
+ <a href=
+ "{@docRoot}distribute/googleplay/promote/badges.html">Google Play
+ Badge Generator</a>&mdash;Create "Get it on Google Play" badges for your
+ app in a variety of languages with a single click.
+ </li>
+ <li>
+ <a href=
+ "{@docRoot}distribute/googleplay/promote/device-art.html">Device Art
+ Generator</a>&mdash;Drag and drop tool that lets you instantly create production-
+ ready art showing your app running on a tablet device.
+ </li>
</ul>
-</li>
-<li>Make sure you are distributing to tablet devices. Check the app's Supported Devices
-list in the <a href="https://play.google.com/apps/publish/">Developer Console</a>
-to make sure your app is not filtered from tablet devices that you want to target.</li>
+</div>
+
+<h2 id="google-play-bp">12. Follow best practices for publishing in Google Play</h2>
+
+Here are some best practices to consider when publishing a tablet app on Google Play.</p>
+
+<h5>Check the app's filtering</h5>
+
+<p>After you've uploaded the app to the <a href="https://play.google.com/apps/publish/">Developer Console</a>, check the APK's Supported Devices list to make sure that the app is not filtered from tablet devices that you want to target.</p>
+
+<h5>Distribute as a single APK</h5>
-<li>Let tablet users know about your app! Plan a marketing or advertising campaign that
-highlights the use of your app on tablets.</li>
+<p>
+ It's recommended that you publish your app as a single APK for all screen
+ sizes (phones and tablets), with a single Google Play listing. This approach
+ has several important advantages.
+</p>
+
+<ul style="margin-top:.25em;">
+ <li>Easier for users to find your app from search, browsing, or promotions
+ </li>
+
+ <li>Easier for users to restore your app automatically if they get a new
+ device.
+ </li>
+
+ <li>Your ratings and download stats are consolidated across all devices.
+ </li>
+
+ <li>Publishing a tablet app in a second listing can dilute ratings for your
+ brand.
+ </li>
</ul>
-<table>
-<tr>
-<td><p>Related resources:</p>
-<ul style="margin-top:-.5em;">
-<li><strong><a href="https://play.google.com/apps/publish/">Publishing Checklist</a></strong> &mdash; Recommendations on how to prepare your app for publishing, test it, and launch successfully on Google Play.</li>
-<li><strong><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></strong> &mdash; The tools console for publishing your app to Android users.</li>
+<p>
+ If necessary, you can alternatively choose to deliver your app using <a href=
+ "{@docRoot}google/play/publishing/multiple-apks.html">Multiple APK Support</a>,
+ although in most cases using a single APK to reach all devices is strongly
+ recommended.
+</p>
+
+<div class="rel-resources">
+<h3>Related resources</h3>
+<ul>
+<li><a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing
+ Checklist</a>&mdash;
+ Recommendations on how to prepare your app for publishing, test it, and launch
+ successfully on Google Play.</li>
+<li><a href="https://play.google.com/apps/publish/">Google Play Developer
+ Console</a>&mdash;The tools console for publishing your app to Android users.</li>
</ul>
-</td>
-</tr>
-</table>
+</div>
+
<h2 id="test-environment">Setting Up a Test Environment for Tablets</h2>
@@ -541,7 +839,7 @@ and quality criteria. </p>
<p class="table-caption"><strong>Table 1</strong>. A typical tablet test environment might
include one or two devices from each row in the table below, with one of the
-listed chipsets, platform versions, and hardware feature configurations.</p>
+listed platform versions, screen configurations, and hardware feature configurations.</p>
<table>
<tr>
@@ -556,14 +854,14 @@ listed chipsets, platform versions, and hardware feature configurations.</p>
<td>7-inch tablet</td>
<td><span style="white-space:nowrap"><code>large</code> or</span><br /><code>-sw600</code></td>
<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
-<td>Android 4.0+</td>
+<td>Android 4.0+ (API level 14 and higher)</td>
<td>WXGA800-7in</td>
</tr>
<tr>
<td><span style="white-space:nowrap">10-inch</span> tablet</td>
<td><span style="white-space:nowrap"><code>xlarge</code> or</span><br /><code>-sw800</code></td>
-<td><code>mdpi</code>,<br /><code>hdpi</code></td>
-<td>Android 3.2+</td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2+ (API level 13 and higher)</td>
<td>WXGA800</td>
</tr>
</table> \ No newline at end of file
diff --git a/docs/html/google/backup/signup.jd b/docs/html/google/backup/signup.jd
index d5c26a1..70f7de2 100644
--- a/docs/html/google/backup/signup.jd
+++ b/docs/html/google/backup/signup.jd
@@ -225,7 +225,7 @@ onclick="onRegister(); return false;" >Register with Android Backup Service</a><
} else if ($("input#agree").is(':checked')
&& packagename.length
&& packagename != DEFAULT_TEXT) {
- window.location = "http://play.google.com/apps/publish/GetBackupApiKey?p=" +
+ window.location = "https://play.google.com/apps/publish/v2/GetBackupApiKey?p=" +
encodeURIComponent(packagename);
} else {
$("label#agreeLabel,label#pnameLabel").parent().stop().animate({color: "#258AAF"}, 200,
diff --git a/docs/html/google/gcm/gs.jd b/docs/html/google/gcm/gs.jd
index 5d34641..e96b204 100644
--- a/docs/html/google/gcm/gs.jd
+++ b/docs/html/google/gcm/gs.jd
@@ -1,4 +1,5 @@
page.title=GCM: Getting Started
+page.tags="cloud","push","messaging"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/google/play-services/auth.jd b/docs/html/google/play-services/auth.jd
index 8e11131..3ccc81a 100644
--- a/docs/html/google/play-services/auth.jd
+++ b/docs/html/google/play-services/auth.jd
@@ -1,4 +1,5 @@
page.title=Authorization
+page.tags="AccountManager","oauth2"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/google/play-services/maps.jd b/docs/html/google/play-services/maps.jd
index 5a4aaf4..965444a 100644
--- a/docs/html/google/play-services/maps.jd
+++ b/docs/html/google/play-services/maps.jd
@@ -1,4 +1,5 @@
page.title=Google Maps Android API
+page.tags="mapview","location"
header.hide=1
@jd:body
diff --git a/docs/html/google/play-services/plus.jd b/docs/html/google/play-services/plus.jd
index de921be..e126dad 100644
--- a/docs/html/google/play-services/plus.jd
+++ b/docs/html/google/play-services/plus.jd
@@ -1,4 +1,5 @@
page.title=Google+ Platform for Android
+page.tags="authentication","signin","social"
header.hide=1
@jd:body
diff --git a/docs/html/google/play-services/setup.jd b/docs/html/google/play-services/setup.jd
index 0cf2df3..a960a18 100644
--- a/docs/html/google/play-services/setup.jd
+++ b/docs/html/google/play-services/setup.jd
@@ -1,4 +1,4 @@
-page.title=Setup
+page.title=Setup Google Play Services SDK
@jd:body
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index 3365cfc..57227a8 100755
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -19,6 +19,7 @@ parent.link=index.html
<li><a href="#Subs">Implementing Subscriptions</a><li>
</ol>
</li>
+ <li><a href="#billing-security">Securing Your App</a>
</ol>
<h2>Reference</h2>
<ol>
@@ -361,6 +362,34 @@ Bundle activeSubs = mService.getPurchases(3, "com.example.myapp",
the user. Once a subscription expires without renewal, it will no longer appear
in the returned {@code Bundle}.</p>
+<h2 id="billing-security">Securing Your Application</h2>
+
+<p>To help ensure the integrity of the transaction information that is sent to
+your application, Google Play signs the JSON string that contains the response
+data for a purchase order. Google Play uses the private key that is associated
+with your application in the Developer Console to create this signature. The
+Developer Console generates an RSA key pair for each application.<p>
+
+<p class="note"><strong>Note:</strong>To find the public key portion of this key
+pair, open your application's details in the Developer Console, then click on
+<strong>Services & APIs</strong>, and look at the field titled
+<strong>Your License Key for This Application</strong>.</p>
+
+<p>The Base64-encoded RSA public key generated by Google Play is in binary
+encoded, X.509 subjectPublicKeyInfo DER SEQUENCE format. It is the same public
+key that is used with Google Play licensing.</p>
+
+<p>When your application receives this signed response you can
+use the public key portion of your RSA key pair to verify the signature.
+By performing signature verification you can detect responses that have
+been tampered with or that have been spoofed. You can perform this signature
+verification step in your application; however, if your application connects
+to a secure remote server then we recommend that you perform the signature
+verification on that server.</p>
+
+<p>For more information about best practices for security and design, see <a
+href="{@docRoot}google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
+
diff --git a/docs/html/google/play/billing/billing_reference.jd b/docs/html/google/play/billing/billing_reference.jd
index 1410e65..e168d70 100755
--- a/docs/html/google/play/billing/billing_reference.jd
+++ b/docs/html/google/play/billing/billing_reference.jd
@@ -143,7 +143,9 @@ does not include tax.</td>
</tr>
<tr>
<td>{@code INAPP_DATA_SIGNATURE}</td>
- <td>String containing the signature of the purchase data that was signed with the private key of the developer.</td>
+ <td>String containing the signature of the purchase data that was signed
+with the private key of the developer. The data signature uses the
+RSASSA-PKCS1-v1_5 scheme.</td>
</tr>
</table>
</p>
diff --git a/docs/html/google/play/billing/v2/api.jd b/docs/html/google/play/billing/v2/api.jd
index 9d3a045..7e386a2 100644
--- a/docs/html/google/play/billing/v2/api.jd
+++ b/docs/html/google/play/billing/v2/api.jd
@@ -1,4 +1,5 @@
page.title=In-app Billing Version 2
+excludeFromSuggestions=true
@jd:body
<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div>
diff --git a/docs/html/google/play/billing/v2/billing_integrate.jd b/docs/html/google/play/billing/v2/billing_integrate.jd
index defe265..1581315 100755
--- a/docs/html/google/play/billing/v2/billing_integrate.jd
+++ b/docs/html/google/play/billing/v2/billing_integrate.jd
@@ -1,4 +1,5 @@
page.title=Implementing In-app Billing <span style="font-size:16px;">(IAB Version 2)</span>
+excludeFromSuggestions=true
@jd:body
<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div>
diff --git a/docs/html/google/play/billing/v2/billing_reference.jd b/docs/html/google/play/billing/v2/billing_reference.jd
index 84576bc..a946295 100644
--- a/docs/html/google/play/billing/v2/billing_reference.jd
+++ b/docs/html/google/play/billing/v2/billing_reference.jd
@@ -1,4 +1,5 @@
page.title=In-app Billing Reference <span style="font-size:16px;">(IAB Version 2)</span>
+excludeFromSuggestions=true
@jd:body
<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div>
diff --git a/docs/html/google/play/billing/v2/billing_subscriptions.jd b/docs/html/google/play/billing/v2/billing_subscriptions.jd
index 5e3bd28..3bcf212 100755
--- a/docs/html/google/play/billing/v2/billing_subscriptions.jd
+++ b/docs/html/google/play/billing/v2/billing_subscriptions.jd
@@ -1,4 +1,5 @@
page.title=Implementing Subscriptions <span style="font-size:16px;">(IAB Version 2)</span>
+excludeFromSuggestions=true
@jd:body
<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div>
diff --git a/docs/html/google/play/licensing/adding-licensing.jd b/docs/html/google/play/licensing/adding-licensing.jd
index 3f2460f..93561f6 100644
--- a/docs/html/google/play/licensing/adding-licensing.jd
+++ b/docs/html/google/play/licensing/adding-licensing.jd
@@ -853,37 +853,39 @@ sample application calls <code>checkAccess()</code> from a
<h3 id="account-key">Embed your public key for licensing</h3>
-<p>For each publisher account, the Google Play service automatically
-generates a 2048-bit RSA public/private key pair that is used exclusively for
-licensing. The key pair is uniquely associated with the publisher account and is
-shared across all applications that are published through the account. Although
-associated with a publisher account, the key pair is <em>not</em> the same as
-the key that you use to sign your applications (or derived from it).</p>
+<p>For each application, the Google Play service automatically
+generates a 2048-bit RSA public/private key pair that is used for
+licensing and in-app billing. The key pair is uniquely associated with the
+application. Although associated with the application, the key pair is
+<em>not</em> the same as the key that you use to sign your applications (or derived from it).</p>
<p>The Google Play Developer Console exposes the public key for licensing to any
-developer signed in to the publisher account, but it keeps the private key
+developer signed in to the Developer Console, but it keeps the private key
hidden from all users in a secure location. When an application requests a
license check for an application published in your account, the licensing server
-signs the license response using the private key of your account's key pair.
+signs the license response using the private key of your application's key pair.
When the LVL receives the response, it uses the public key provided by the
application to verify the signature of the license response. </p>
-<p>To add licensing to an application, you must obtain your publisher account's
+<p>To add licensing to an application, you must obtain your application's
public key for licensing and copy it into your application. Here's how to find
-your account's public key for licensing:</p>
+your application's public key for licensing:</p>
<ol>
<li>Go to the Google Play <a
href="http://play.google.com/apps/publish">Developer Console</a> and sign in.
Make sure that you sign in to the account from which the application you are
licensing is published (or will be published). </li>
-<li>In the account home page, locate the "Edit profile" link and click it. </li>
-<li>In the Edit Profile page, locate the "Licensing" pane, shown below. Your
-public key for licensing is given in the "Public key" text box. </li>
+<li>In the application details page, locate the <strong>Services & APIs</strong>
+link and click it. </li>
+<li>In the <strong>Services & APIs</strong> page, locate the
+<strong>Licensing & In-App Billing</strong> section. Your public key for
+licensing is given in the
+<strong>Your License Key For This Application</strong> field. </li>
</ol>
<p>To add the public key to your application, simply copy/paste the key string
-from the text box into your application as the value of the String variable
+from the field into your application as the value of the String variable
<code>BASE64_PUBLIC_KEY</code>. When you are copying, make sure that you have
selected the entire key string, without omitting any characters. </p>
@@ -965,16 +967,6 @@ application that they have legitimately purchased on another device.</li>
</ul>
</div>
-
-
-
-
-
-
-
-
-
-
<h2 id="app-obfuscation">Obfuscating Your Code</h2>
<p>To ensure the security of your application, particularly for a paid
diff --git a/docs/html/google/play/licensing/index.jd b/docs/html/google/play/licensing/index.jd
index a13be10..6632fc0 100644
--- a/docs/html/google/play/licensing/index.jd
+++ b/docs/html/google/play/licensing/index.jd
@@ -16,7 +16,7 @@ restrict use of the application to a specific device, in addition to any other c
<p>The licensing service is a secure means of controlling access to your applications. When an
application checks the licensing status, the Google Play server signs the licensing status
-response using a key pair that is uniquely associated with the publisher account. Your application
+response using a key pair that is uniquely associated with the application. Your application
stores the public key in its compiled <code>.apk</code> file and uses it to verify the licensing
status response.</p>
diff --git a/docs/html/google/play/licensing/licensing-reference.jd b/docs/html/google/play/licensing/licensing-reference.jd
index 4240097..7bfa61a 100644
--- a/docs/html/google/play/licensing/licensing-reference.jd
+++ b/docs/html/google/play/licensing/licensing-reference.jd
@@ -186,7 +186,7 @@ licensing server, possibly because of network availability problems. </td>
</tr>
<tr>
<td>{@code ERROR_SERVER_FAILURE}</td>
-<td>Server error &mdash; the server could not load the publisher account's key
+<td>Server error &mdash; the server could not load the application's key
pair for licensing.</td>
<td>No</td>
<td></td>
diff --git a/docs/html/google/play/licensing/overview.jd b/docs/html/google/play/licensing/overview.jd
index 2434a4c..4e1a9c9 100644
--- a/docs/html/google/play/licensing/overview.jd
+++ b/docs/html/google/play/licensing/overview.jd
@@ -38,13 +38,13 @@ the licensing server and receives the result. The Google Play application sends
the result to your application, which can allow or disallow further use of the
application as needed.</p>
-<p class="note"><strong>Note:</strong> If a paid application has been uploaded to Google Play but
-saved only as a draft application (the app is unpublished), the licensing server considers all users
-to be licensed users of the application (because it's not even possible to purchase the app).
-This exception is necessary in order for you to perform testing of your licensing
+<p class="note"><strong>Note:</strong> If a paid application has been uploaded
+to Google Play, but saved only as a draft application (the app is
+unpublished), the licensing server considers all users to be licensed users of
+the application (because it's not even possible to purchase the app). This
+exception is necessary in order for you to perform testing of your licensing
implementation.</p>
-
<div class="figure" style="width:469px">
<img src="{@docRoot}images/licensing_arch.png" alt=""/>
<p class="img-caption"><strong>Figure 1.</strong> Your application initiates a
@@ -102,10 +102,11 @@ response data using an RSA key pair that is shared exclusively between the Googl
server and you.</p>
<p>The licensing service generates a single licensing key pair for each
-publisher account and exposes the public key in your account's profile page. You must copy the
-public key from the web site and embed it in your application source code. The server retains the
-private key internally and uses it to sign license responses for the applications you
-publish with that account.</p>
+application and exposes the public key in your application's
+<strong>Services & APIs</strong> page in the Developer Console. You must copy
+the public key from the Developer Console and embed it in your application
+source code. The server retains the private key internally and uses it to sign
+license responses for the applications you publish with that account.</p>
<p>When your application receives a signed response, it uses the embedded public
key to verify the data. The use of public key cryptography in the licensing
@@ -221,7 +222,7 @@ gives you wider distribution potential for your applications. </p>
<p>Licensing lets you move to a license-based model that is enforceable on
all devices that have access to Google Play. Access is not bound to the
characteristics of the host device, but to your
-publisher account on Google Play (through the app's public key) and the
+application on Google Play (through the app's public key) and the
licensing policy that you define. Your application can be installed and
managed on any device on any storage, including SD card.</p>
diff --git a/docs/html/guide/appendix/app-intents.jd b/docs/html/guide/appendix/app-intents.jd
index 110196c..8898927 100644
--- a/docs/html/guide/appendix/app-intents.jd
+++ b/docs/html/guide/appendix/app-intents.jd
@@ -1,4 +1,5 @@
page.title=Reference of Available Intents
+excludeFromSuggestions=true
@jd:body
<p>This document describes the default applications and settings that Google provides
diff --git a/docs/html/guide/appendix/g-app-intents.jd b/docs/html/guide/appendix/g-app-intents.jd
index 10ec01e..9ec72db 100644
--- a/docs/html/guide/appendix/g-app-intents.jd
+++ b/docs/html/guide/appendix/g-app-intents.jd
@@ -1,4 +1,5 @@
page.title=Intents List: Invoking Google Applications on Android Devices
+excludeFromSuggestions=true
@jd:body
<div class="sidebox-wrapper">
diff --git a/docs/html/guide/appendix/glossary.jd b/docs/html/guide/appendix/glossary.jd
index 94cb0f0..af60eb7 100644
--- a/docs/html/guide/appendix/glossary.jd
+++ b/docs/html/guide/appendix/glossary.jd
@@ -1,4 +1,5 @@
page.title=Glossary
+excludeFromSuggestions=true
@jd:body
<p>The list below defines some of the basic terminology of the Android platform. </p>
diff --git a/docs/html/guide/basics/appmodel.jd b/docs/html/guide/basics/appmodel.jd
deleted file mode 100644
index 323fc9b..0000000
--- a/docs/html/guide/basics/appmodel.jd
+++ /dev/null
@@ -1,261 +0,0 @@
-page.title=Application Model
-@jd:body
-<h1>Android Application Model: Applications, Tasks, Processes, and Threads</h1>
-
-<p>In most operating systems, there is a strong 1-to-1 correlation between
-the executable image (such as the .exe on Windows) that an application lives in,
-the process it runs in, and the icon and application the user interacts with.
-In Android these associations are much more fluid, and it is important to
-understand how the various pieces can be put together.</p>
-
-<p>Because of the flexible nature of Android applications, there is some
-basic terminology that needs to be understood when implementing the
-various pieces of an application:</p>
-
-<ul>
-<li><p>An <strong>android package</strong> (or <strong>.apk</strong> for short)
-is the file containing an application's code and its resources. This is the
-file that an application is distributed in and downloaded by the user when
-installing that application on their device.</p></li>
-
-<li><p>A <strong>task</strong> is generally what the user perceives as
-an "application" that can be launched: usually a task has an icon in the
-home screen through which it is accessed, and it is available as a top-level
-item that can be brought to the foreground in front of other
-tasks.</p></li>
-
-<li><p>A <strong>process</strong> is a low-level kernel process in which
-an application's code is running. Normally all of the code in a
-.apk is run in one, dedicated process for that .apk; however, the
-{@link android.R.styleable#AndroidManifestApplication_process process} tag
-can be used to modify where that code is run, either for
-{@link android.R.styleable#AndroidManifestApplication the entire .apk}
-or for individual
-{@link android.R.styleable#AndroidManifestActivity activity},
-{@link android.R.styleable#AndroidManifestReceiver receiver},
-{@link android.R.styleable#AndroidManifestService service}, or
-{@link android.R.styleable#AndroidManifestProvider provider}, components.</p></li>
-</ul>
-
-<h2 id="Tasks">Tasks</h2>
-
-<p>A key point here is: <em>when the user sees as an "application," what
-they are actually dealing with is a task</em>. If you just create a .apk
-with a number of activities, one of which is a top-level entry point (via
-an {@link android.R.styleable#AndroidManifestIntentFilter intent-filter} for
-the action <code>android.intent.action.MAIN</code> and
-category <code>android.intent.category.LAUNCHER</code>), then there will indeed
-be one task created for your .apk, and any activities you start from there
-will also run as part of that task.</p>
-
-<p>A task, then, from the user's perspective your application; and from the
-application developer's perspective it is one or more activities the user
-has traversed through in that task and not yet closed, or an activity stack.
-A new task is created by
-starting an activity Intent with the {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
-Intent.FLAG_ACTIVITY_NEW_TASK} flag; this Intent will be used as the root Intent of
-the task, defining what task it is. Any activity started without this flag
-will run in the same task as the activity that is starting it (unless that
-activity has requested a special launch mode, as discussed later). Tasks can
-be re-ordered: if you use FLAG_ACTIVITY_NEW_TASK but there is already a task
-running for that Intent, the current task's activity stack will be brought
-to the foreground instead of starting a new task.</p>
-
-<p>FLAG_ACTIVITY_NEW_TASK must only be used with care: using it says that,
-from the user's perspective, a new application starts at this point. If this
-is not the behavior you desire, you should not be creating a new task. In
-addition, you should only use the new task flag if it is possible for the user
-to navigate from home back to where they are and launch the same Intent as a
-new task. Otherwise, if the user presses HOME instead of BACK from the task
-you have launched, your task and its activities will be ordered behind the
-home screen without a way to return to them.</p>
-
-<h3>Task Affinities</h3>
-
-<p>In some cases Android needs to know which task an activity belongs to even when
-it is not being launched in to a specific task. This is accomplished through
-task affinities, which provide a unique static name for the task that one or more
-activities are intended to run in. The default task affinity for an activity
-is the name of the .apk package name the activity is implemented in. This
-provides the normally expected behavior, where all of the activities in a
-particular .apk are part of a single application to the user.</p>
-
-<p>When starting a new activity without the
-{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
-Intent.FLAG_ACTIVITY_NEW_TASK} flag, task affinities have no impact on the
-task the new activity will run in: it will always run in the task of the
-activity that is starting it. However, if the NEW_TASK flag is being used,
-then the affinity will be used to determine if a task already exists with
-the same affinity. If so, that task will be brought to the front and the
-new activity launched at the top of that task.</p>
-
-<p>This behavior is most useful for situations where you must use the
-NEW_TASK flag, in particular launching activities from status bar notifications
-or home screen shortcuts. The result is that, when the user launches your
-application this way, its current task state will be brought to the foreground,
-and the activity they now want to look at placed on top of it.</p>
-
-<p>You can assign your own task affinities in your manifest's
-{@link android.R.styleable#AndroidManifestApplication application} tag for
-all activities in the .apk, or the
-{@link android.R.styleable#AndroidManifestActivity activity} tag of
-individual activities. Some examples of how this can be used are:</p>
-
-<ul>
-<li>If your .apk contains multiple top-level applications that the user can
-launch, then you will probably want to assign different affinities to each
-of the activities that the users sees for your .apk. A good convention for
-coming up with distinct names is to append your .apk's package name with
-a colon separated string. For example, the "com.android.contacts" .apk
-may have the affinities "com.android.contacts:Dialer" and
-"com.android.contacts:ContactsList".</ul>
-<li>If you are replacing a notification, shortcut, or other such "inner"
-activity of an application that can be launched from outside of it, you may
-need to explicitly set the taskAffinity of your replacement activity to be
-the same as the application you are replacing. For example, if you are
-replacing the contacts details view (which the user can make and invoke
-shortcuts to), you would want to set the taskAffinity to
-"com.android.contacts".</li>
-</ul>
-
-<h3>Launch Modes and Launch Flags</h3>
-
-<p>The main way you control how activities interact with tasks is through
-the activity's
-{@link android.R.styleable#AndroidManifestActivity_launchMode launchMode}
-attribute and the {@link android.content.Intent#setFlags flags} associated
-with an Intent. These two parameters can work together in various ways
-to control the outcome of the activity launch, as described in their
-associated documentation. Here we will look at some common use cases and
-combinations of these parameters.</p>
-
-<p>The most common launch mode you will use (besides the default
-<code>standard</code> mode) is <code>singleTop</code>. This does not have
-an impact on tasks; it just avoids starting the same activity multiple times
-on the top of a stack.
-
-<p>The <code>singleTask</code> launch mode has a major
-impact on tasks: it causes the activity to always be started in
-a new task (or its existing task to be brought to the foreground). Using
-this mode requires a lot of care in how you interact with the rest of the
-system, as it impacts every path in to the activity. It should only be used
-with activities that are front doors to the application (that is, which
-support the MAIN action and LAUNCHER category).</p>
-
-<p>The <code>singleInstance</code> launch mode is even more specialized, and
-should only be used in applications that are implemented entirely as one
-activity.</p>
-
-<p>A situation you will often run in to is when another entity (such as the
-{@link android.app.SearchManager} or {@link android.app.NotificationManager})
-starts one of your activities. In this case, the
-{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
-Intent.FLAG_ACTIVITY_NEW_TASK} flag must be used, because the activity is
-being started outside of a task (and the application/task may not even
-exist). As described previously, the standard behavior in this situation
-is to bring to the foreground the current task matching the new activity's
-affinity and start the new activity at the top of it. There are, however,
-other types of behavior that you can implement.</p>
-
-<p>One common approach is to also use the
-{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP
-Intent.FLAG_ACTIVITY_CLEAR_TOP} flag in conjunction with NEW_TASK. By doing so,
-if your task is already running, then it will be brought to the foreground,
-all of the activities on its stack cleared except the root activity, and the
-root activity's {@link android.app.Activity#onNewIntent} called with the
-Intent being started. Note that the activity often also use the <code>singleTop</code>
-or <code>singleTask</code> launch mode when using this approach, so that
-the current instance is given the new intent instead of requiring that it
-be destroyed and a new instance started.</p>
-
-<p>Another approach you can take is to set the notification activity's
-<code>android:taskAffinity</code> to the empty string "" (indicating no affinity)
-and setting the
-<code>{@link android.R.styleable#AndroidManifestActivity_noHistory
-android:noHistory}</code> and
-<code>{@link android.R.styleable#AndroidManifestActivity_excludeFromRecents
-android:excludeFromRecents}</code> attributes.
-This approach is useful if you would like the notification
-to take the user to a separate activity describing it, rather than return
-to the application's task. By specifying these attributes, the activity will
-be finished whether the user leaves it with BACK or HOME and it will not
-show up in the recent tasks list; if the <code>noHistory</code> attribute
-isn't specified, pressing HOME will result in the activity and its task
-remaining in the system, possibly with no way to return to it.</p>
-
-<p>Be sure to read the documentation on the
-{@link android.R.styleable#AndroidManifestActivity_launchMode launchMode attribute}
-and the {@link android.content.Intent#setFlags Intent flags} for the details
-on these options.</p>
-
-<h2 id="Processes">Processes</h2>
-
-<p>In Android, processes are entirely an implementation detail of applications
-and not something the user is normally aware of. Their main uses are simply:</p>
-
-<ul>
-<li> Improving stability or security by putting untrusted or unstable code
-into another process.
-<li> Reducing overhead by running the code of multiple .apks in the same
-process.
-<li> Helping the system manage resources by putting heavy-weight code in
-a separate process that can be killed independently of other parts of the
-application.
-</ul>
-
-<p>As described previously, the
-{@link android.R.styleable#AndroidManifestApplication_process process} attribute
-is used to control the process that particular application components run in.
-Note that this attribute can not be used to violate security of the system: if
-two .apks that are not sharing the same user ID try to run in the same process,
-this will not be allowed and different distinct processes will be created for
-each of them.</p>
-
-<p>See the <a href="{@docRoot}devel/security.html">security</a> document for
-more information on these security restrictions.</p>
-
-<h2 id="Threads">Threads</h2>
-
-<p>Every process has one or more threads running in it. In most situations, Android
-avoids creating additional threads in a process, keeping an application
-single-threaded unless it creates its own threads. An important repercussion
-of this is that all calls to {@link android.app.Activity},
-{@link android.content.BroadcastReceiver}, and {@link android.app.Service}
-instances are made only from the main thread of the process they are running in.</p>
-
-<p>Note that a new thread is <strong>not</strong> created for each
-Activity, BroadcastReceiver, Service, or ContentProvider instance:
-these application components are instantiated in the desired process (all in the
-same process unless otherwise specified), in the main thread of that process.
-This means that none of these components (including services) should perform
-long or blocking operations (such as networking calls or computation loops)
-when called by the system, since this will block
-all other components in the process. You can use the standard library
-{@link java.lang.Thread} class or Android's {@link android.os.HandlerThread}
-convenience class to perform long operations on another thread.</p>
-
-<p>There are a few important exceptions to this threading rule:</p>
-
-<ul>
-<li><p>Calls on to an {@link android.os.IBinder} or interface implemented on
-an IBinder are dispatched from the thread calling them or a thread pool in the
-local process if coming from another process, <em>not</em>
-from the main thread of their process. In particular, calls on to the IBinder
-of a {@link android.app.Service} will be called this way. (Though
-calls to methods on Service itself are done from the main thread.)
-This means that <em>implementations of IBinder interfaces must always be
-written in a thread-safe way, since they can be called from any number of
-arbitrary threads at the same time</em>.</p></li>
-
-<li><p>Calls to the main methods of {@link android.content.ContentProvider}
-are dispatched from the calling thread or main thread as with IBinder. The
-specific methods are documented in the ContentProvider class.
-This means that <em>implementations of these methods must always be
-written in a thread-safe way, since they can be called from any number of
-arbitrary threads at the same time</em>.</p></li>
-
-<li><p>Calls on {@link android.view.View} and its subclasses are made from the
-thread that the view's window is running in. Normally this will be the main
-thread of the process, however if you create a thread and show a window from
-there then the window's view hierarchy will be called from that thread.</p></li>
-</ul>
diff --git a/docs/html/guide/basics/building-blocks.jd b/docs/html/guide/basics/building-blocks.jd
deleted file mode 100644
index b8a609e..0000000
--- a/docs/html/guide/basics/building-blocks.jd
+++ /dev/null
@@ -1,76 +0,0 @@
-page.title=Building Blocks
-@jd:body
-<h1>Android Building Blocks</h1>
-
-<p>You can think of an Android application as a collection of components, of
-various kinds. These components are for the most part quite loosely coupled,
-to the degree where you can accurately describe them as a federation of
-components rather than a single cohesive application.</p>
-
-<p>Generally, these components all run in the same system process. It's
-possible (and quite common) to create multiple threads within that process,
-and it's also possible to create completely separate child processes if you
-need to. Such cases are pretty uncommon though, because Android tries very
-hard to make processes transparent to your code.</p>
-
-<p>These are the most important parts of the Android APIs:</p>
-
-<dl>
- <dt><a href="{@docRoot}devel/bblocks-manifest.html">AndroidManifest.xml</a></dt>
- <dd>The AndroidManifest.xml file is the control file that tells the system
- what to do with all the top-level components (specifically activities,
- services, intent receivers, and content providers described below)
- you've created. For instance, this is the
- "glue" that actually specifies which Intents your Activities receive.</dd>
-
- <dt>{@link android.app.Activity Activities}</dt>
- <dd>An Activity is, fundamentally, an object that has a life cycle. An
- Activity is a chunk of code that does some work; if necessary, that work
- can include displaying a UI to the user. It doesn't have to, though - some
- Activities never display UIs. Typically, you'll designate one of your
- application's Activities as the entry point to your application. </dd>
-
-
- <dt>{@link android.view.View Views}</dt>
- <dd>A View is an object that knows how to draw itself to the screen.
- Android user interfaces are comprised of trees of Views. If you want to
- perform some custom graphical technique (as you might if you're writing a
- game, or building some unusual new user interface widget) then you'd
- create a View.</dd>
-
-
- <dt>{@link android.content.Intent Intents}</dt>
- <dd>An Intent is a simple message object that represents an "intention" to
- do something. For example, if your application wants to display a web
- page, it expresses its "Intent" to view the URI by creating an Intent
- instance and handing it off to the system. The system locates some other
- piece of code (in this case, the Browser) that knows how to handle that
- Intent, and runs it. Intents can also be used to broadcast interesting
- events (such as a notification) system-wide.</dd>
-
-
- <dt>{@link android.app.Service Services}</dt>
- <dd>A Service is a body of code that runs in the background. It can run in
- its own process, or in the context of another application's process,
- depending on its needs. Other components "bind" to a Service and invoke
- methods on it via remote procedure calls. An example of a Service is a
- media player; even when the user quits the media-selection UI, she
- probably still intends for her music to keep playing. A Service keeps the
- music going even when the UI has completed.</dd>
-
-
- <dt>{@link android.app.NotificationManager Notifications}</dt>
- <dd>A Notification is a small icon that appears in the status bar. Users
- can interact with this icon to receive information. The most well-known
- notifications are SMS messages, call history, and voicemail, but
- applications can create their own. Notifications are the
- strongly-preferred mechanism for alerting the user of something that needs
- their attention.</dd>
-
- <dt>{@link android.content.ContentProvider ContentProviders}</dt>
- <dd>A ContentProvider is a data storehouse that provides access to data on
- the device; the classic example is the ContentProvider that's used to
- access the user's list of contacts. Your application can access data that
- other applications have exposed via a ContentProvider, and you can also
- define your own ContentProviders to expose data of your own.</dd>
-</dl>
diff --git a/docs/html/guide/basics/fixme-gs-core-packages.jd b/docs/html/guide/basics/fixme-gs-core-packages.jd
deleted file mode 100644
index 5281990..0000000
--- a/docs/html/guide/basics/fixme-gs-core-packages.jd
+++ /dev/null
@@ -1,92 +0,0 @@
-page.title=Getting Started
-@jd:body
-<h1>Getting Started with Android</h1>
-
-<p>To get started with Android, please read the following sections first:</p>
-<dl>
- <dt><a href="{@docRoot}intro/installing.html">Installing the SDK and
- Plugin</a></dt>
- <dd>How to install the Android SDK and Eclipse plugin.</dd>
- <dt><a href="{@docRoot}intro/develop-and-debug.html">Developing and Debugging</a></dt>
- <dd>An introduction to developing and debugging Android applications in Eclipse,
- plus information on using other IDEs.</dd>
- <dt><a href="{@docRoot}intro/hello-android.html">Hello Android</a></dt>
- <dd>Writing your first Android Application, the ever popular Hello World,
- Android style.</dd>
- <dt><a href="{@docRoot}intro/anatomy.html">Anatomy of an App</a></dt>
- <dd>A guide to the structure and architecture of an Android
- Application. This guide will help you understand the pieces that make up
- an Android app.</dd>
- <dt><a href="{@docRoot}intro/tutorial.html">Notepad Tutorial</a></dt>
- <dd>This tutorial document will lead you through
- constructing a real Android Application: A notepad which can create, edit
- and delete notes, and covers many of the basic concepts with practical
- examples.</dd>
- <dt><a href="{@docRoot}intro/tools.html">Development Tools</a></dt>
- <dd>The
- command line tools included with the SDK, what they do, and how to use
- them.</dd>
- <dt><a href="{@docRoot}intro/appmodel.html">Application Model</a></dt>
- <dd>A guide to Applications, Tasks, Processes, and Threads.
- These are the elements that define the way your application is run by the
- system and presented to the user.</dd>
- <dt><a href="{@docRoot}intro/lifecycle.html">Application Life Cycle</a></dt>
- <dd>The important life-cycle details for
- Applications and the Activities running inside of them.</dd>
-
-</dl>
-
-<h2>Other Introductory Material</h2>
-<p>After reading the sections above, the following Getting Started information is also very useful:</p>
-
-
-<h3>Core Packages</h3>
-<p> These are the basic packages that make up the Android SDK for writing
-applications. The packages are organized as layers, listed here from
-lowest-level to highest.</p>
-
-<dl>
- <dt>{@link android.util}</dt>
- <dd>contains various low-level utility classes, such
- as specialized container classes, XML utilities, etc.</dd>
- <dt>{@link android.os}</dt>
- <dd> provides basic operating system services, message
- passing, and inter-process communication.</dd>
- <dt>{@link android.graphics}</dt><dd>is the core rendering package.</dd>
- <dt>{@link android.text}, {@link android.text.method}, {@link
- android.text.style}, and {@link android.text.util} </dt>
- <dd>supply a rich set of
- text processing tools, supporting rich text, input methods, etc.</dd>
- <dt>{@link android.database}</dt>
- <dd>contains low-level APIs for working with
- databases.</dd>
- <dt>{@link android.content}</dt>
- <dd>provides various services for accessing data
- on the device: applications installed on the device and their associated
- resources, and content providers for persistent dynamic data.</dd>
- <dt>{@link android.view}</dt>
- <dd>is the core user-interface framework.</dd>
- <dt>{@link android.widget}</dt>
- <dd>supplies standard user interface elements
- (lists, buttons, layout managers, etc) built from the view package.</dd>
- <dt>{@link android.app}</dt>
- <dd>provides the high-level application model,
- implemented using Activities.</dd>
-</dl>
-
-<h3>Other Notable Packages</h3>
-
-<p> These packages provide additional domain-specific features of the Android
-platform. They are not necessary for basic application development.</p>
-
-<dl>
- <dt>{@link android.provider}</dt>
- <dd>contains definitions for various standard
- content providers included with the platform.</dd>
- <dt>{@link android.telephony}</dt>
- <dd>provides APIs for interacting with the
- device's phone stack.</dd>
- <dt>{@link android.webkit}</dt>
- <dd>includes various APIs for working with
- web-based content.</dd>
-</dl>
diff --git a/docs/html/guide/basics/index.html b/docs/html/guide/basics/index.html
deleted file mode 100644
index 4881acf..0000000
--- a/docs/html/guide/basics/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=../index.html">
-</head>
-<body>
-<a href="../index.html">click here</a> if you are not redirected.
-</body>
-</html> \ No newline at end of file
diff --git a/docs/html/guide/components/fragments.jd b/docs/html/guide/components/fragments.jd
index 7747b31..32c9f99 100644
--- a/docs/html/guide/components/fragments.jd
+++ b/docs/html/guide/components/fragments.jd
@@ -172,7 +172,7 @@ the user might not come back).</dd>
<p>Most applications should implement at least these three methods for every fragment, but there are
several other callback methods you should also use to handle various stages of the
-fragment lifecycle. All the lifecycle callback methods are discussed more later, in the section
+fragment lifecycle. All the lifecycle callback methods are discussed in more detail in the section
about <a href="#Lifecycle">Handling the Fragment Lifecycle</a>.</p>
diff --git a/docs/html/guide/components/fundamentals.jd b/docs/html/guide/components/fundamentals.jd
index 2c33a26..ce50022 100644
--- a/docs/html/guide/components/fundamentals.jd
+++ b/docs/html/guide/components/fundamentals.jd
@@ -345,7 +345,7 @@ receivers can be either declared in the manifest or created dynamically in code
{@link android.content.BroadcastReceiver} objects) and registered with the system by calling
{@link android.content.Context#registerReceiver registerReceiver()}.</p>
-<p>For more about how to structure the manifest file for your application, see the <a
+<p>For more about how to structure the manifest file for your application, see <a
href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>
documentation. </p>
diff --git a/docs/html/guide/components/processes-and-threads.jd b/docs/html/guide/components/processes-and-threads.jd
index 07a2667..1fed712 100644
--- a/docs/html/guide/components/processes-and-threads.jd
+++ b/docs/html/guide/components/processes-and-threads.jd
@@ -1,4 +1,6 @@
page.title=Processes and Threads
+page.tags="lifecycle","background"
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/components/tasks-and-back-stack.jd b/docs/html/guide/components/tasks-and-back-stack.jd
index ecaba8d..a21bf34 100644
--- a/docs/html/guide/components/tasks-and-back-stack.jd
+++ b/docs/html/guide/components/tasks-and-back-stack.jd
@@ -231,7 +231,7 @@ activities except for the root activity when the user leaves the task.</p>
&lt;activity&gt;}</a> manifest element and with flags in the intent that you pass to {@link
android.app.Activity#startActivity startActivity()}.</p>
-<p>In this regard, the the principal <a
+<p>In this regard, the principal <a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
attributes you can use are:</p>
@@ -319,7 +319,7 @@ each instance can belong to different tasks, and one task can have multiple inst
routes the intent to that instance through a call to its {@link
android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance of the
activity. The activity can be instantiated multiple times, each instance can
-belong to different tasks, and one task can have multiple instances (but only if the the
+belong to different tasks, and one task can have multiple instances (but only if the
activity at the top of the back stack is <em>not</em> an existing instance of the activity).
<p>For example, suppose a task's back stack consists of root activity A with activities B, C,
and D on top (the stack is A-B-C-D; D is on top). An intent arrives for an activity of type D.
diff --git a/docs/html/guide/practices/compatibility.jd b/docs/html/guide/practices/compatibility.jd
index bc58403..9e3d461 100644
--- a/docs/html/guide/practices/compatibility.jd
+++ b/docs/html/guide/practices/compatibility.jd
@@ -1,4 +1,5 @@
page.title=Android Compatibility
+excludeFromSuggestions=true
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/practices/index.jd b/docs/html/guide/practices/index.jd
index 48a849a..b61272b 100644
--- a/docs/html/guide/practices/index.jd
+++ b/docs/html/guide/practices/index.jd
@@ -1,4 +1,5 @@
page.title=Best Practices
+excludeFromSuggestions=true
page.landing=true
page.landing.intro=Design and build apps the right way. Learn how to create apps that look great and perform well on as many devices as possible, from phones to tablets and more.
page.landing.image=
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
index 0dd92d9..465a847 100644
--- a/docs/html/guide/practices/optimizing-for-3.0.jd
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -1,4 +1,5 @@
page.title=Optimizing Apps for Android 3.0
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/guide/practices/screen-compat-mode.jd b/docs/html/guide/practices/screen-compat-mode.jd
index 7f10914..e3160c3 100644
--- a/docs/html/guide/practices/screen-compat-mode.jd
+++ b/docs/html/guide/practices/screen-compat-mode.jd
@@ -1,4 +1,5 @@
page.title=Screen Compatibility Mode
+excludeFromSuggestions=true
parent.title=Supporting Multiple Screens
parent.link=screens_support.html
diff --git a/docs/html/guide/practices/screens-distribution.jd b/docs/html/guide/practices/screens-distribution.jd
index 29d2a8c..99eb04e 100644
--- a/docs/html/guide/practices/screens-distribution.jd
+++ b/docs/html/guide/practices/screens-distribution.jd
@@ -1,4 +1,5 @@
page.title=Distributing to Specific Screens
+excludeFromSuggestions=true
parent.title=Supporting Multiple Screens
parent.link=screens_support.html
diff --git a/docs/html/guide/practices/screens-support-1.5.jd b/docs/html/guide/practices/screens-support-1.5.jd
index 15f0695..ad680d9 100644
--- a/docs/html/guide/practices/screens-support-1.5.jd
+++ b/docs/html/guide/practices/screens-support-1.5.jd
@@ -1,4 +1,5 @@
page.title=Strategies for Android 1.5
+excludeFromSuggestions=true
parent.title=Supporting Multiple Screens
parent.link=screens_support.html
diff --git a/docs/html/guide/practices/seamlessness.jd b/docs/html/guide/practices/seamlessness.jd
index ec6b7fd..9679e2a 100644
--- a/docs/html/guide/practices/seamlessness.jd
+++ b/docs/html/guide/practices/seamlessness.jd
@@ -1,4 +1,5 @@
page.title=Designing for Seamlessness
+excludeFromSuggestions=true
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
index cb2bc37..f6669e4 100644
--- a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
@@ -1,4 +1,5 @@
page.title=Activity and Task Design Guidelines
+excludeFromSuggestions=true
parent.title=UI Guidelines
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design.jd b/docs/html/guide/practices/ui_guidelines/icon_design.jd
index 70ae862..0726660 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design.jd
@@ -1,4 +1,5 @@
page.title=Icon Design Guidelines
+excludeFromSuggestions=true
parent.title=UI Guidelines
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
index c12b789..831de45 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd
@@ -1,4 +1,5 @@
page.title=Action Bar Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
@@ -96,7 +97,7 @@ finished Action Bar icon dimensions for each generalized screen density.</p>
</th>
</tr>
<tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
+ <th>
Action Bar Icon Size
</th>
<td>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
index e02cdfc..c958ed9 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd
@@ -1,4 +1,5 @@
page.title=Dialog Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
@@ -51,36 +52,46 @@ for suggestions on how to work with multiple sets of icons.</p>
<p class="table-caption"><strong>Table 1.</strong> Summary of finished dialog
icon dimensions for each of the three generalized screen densities.</p>
- <table>
- <tbody>
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Low density screen <em>(ldpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Medium density screen <em>(mdpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>High density screen <em>(hdpi)</em><nobr>
- </th>
- </tr>
-
- <tr>
- <td>
- 24 x 24 px
- </td>
- <td>
- 32 x 32 px
- </td>
- <td>
- 48 x 48 px
- </td>
- </tr>
-
- </tbody>
- </table>
-
-
+<table>
+ <tbody>
+ <tr>
+ <th></th>
+ <th>
+ <code>ldpi</code> (120 dpi)<br>
+ <small style="font-weight: normal">(Low density screen)</small>
+ </th>
+ <th>
+ <code>mdpi</code> (160 dpi)<br>
+ <small style="font-weight: normal">(Medium density screen)</small>
+ </th>
+ <th>
+ <code>hdpi</code> (240 dpi)<br>
+ <small style="font-weight: normal">(High density screen)</small>
+ </th>
+ <th>
+ <code>xhdpi</code> (320 dpi)<br>
+ <small style="font-weight: normal">(Extra-high density screen)</small>
+ </th>
+ </tr>
+ <tr>
+ <th style="background-color:#f3f3f3;font-weight:normal">
+ Dialog Icon Size
+ </th>
+ <td>
+ 24 x 24 px
+ </td>
+ <td>
+ 32 x 32 px
+ </td>
+ <td>
+ 48 x 48 px
+ </td>
+ <td>
+ 64 x 64 px
+ </td>
+ </tr>
+ </tbody>
+</table>
<p><strong>Final art must be exported as a transparent PNG file. Do not include
a background color</strong>.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
index 200c135..f47e186 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
@@ -1,4 +1,5 @@
page.title=Launcher Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
@@ -213,7 +214,7 @@ finished launcher icon dimensions for each generalized screen density.</p>
</th>
</tr>
<tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
+ <th>
Launcher Icon Size
</th>
<td>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
index 4529797..2df3a22 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
@@ -1,4 +1,5 @@
page.title=Launcher Icons (Archive)
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
index 2fbce87..29e1a93 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd
@@ -1,4 +1,5 @@
page.title=List View Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
@@ -53,36 +54,46 @@ for suggestions on how to work with multiple sets of icons.</p>
<p class="table-caption"><strong>Table 1.</strong> Summary of finished list view
icon dimensions for each of the three generalized screen densities.</p>
- <table>
- <tbody>
- <tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Low density screen <em>(ldpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>Medium density screen <em>(mdpi)</em></nobr>
- </th>
- <th style="background-color:#f3f3f3;font-weight:normal">
- <nobr>High density screen <em>(hdpi)</em><nobr>
- </th>
- </tr>
-
- <tr>
- <td>
- 24 x 24 px
- </td>
- <td>
- 32 x 32 px
- </td>
- <td>
- 48 x 48 px
- </td>
- </tr>
-
- </tbody>
- </table>
-
-
+<table>
+ <tbody>
+ <tr>
+ <th></th>
+ <th>
+ <code>ldpi</code> (120 dpi)<br>
+ <small style="font-weight: normal">(Low density screen)</small>
+ </th>
+ <th>
+ <code>mdpi</code> (160 dpi)<br>
+ <small style="font-weight: normal">(Medium density screen)</small>
+ </th>
+ <th>
+ <code>hdpi</code> (240 dpi)<br>
+ <small style="font-weight: normal">(High density screen)</small>
+ </th>
+ <th>
+ <code>xhdpi</code> (320 dpi)<br>
+ <small style="font-weight: normal">(Extra-high density screen)</small>
+ </th>
+ </tr>
+ <tr>
+ <th style="background-color:#f3f3f3;font-weight:normal">
+ List View Icon Size
+ </th>
+ <td>
+ 24 x 24 px
+ </td>
+ <td>
+ 32 x 32 px
+ </td>
+ <td>
+ 48 x 48 px
+ </td>
+ <td>
+ 64 x 64 px
+ </td>
+ </tr>
+ </tbody>
+</table>
<p><strong>Final art must be exported as a transparent PNG file. Do not include
a background color</strong>.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
index 24bce51..a5b3597 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd
@@ -1,4 +1,5 @@
page.title=Menu Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
index 8c15777..4993adb 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd
@@ -1,4 +1,5 @@
page.title=Status Bar Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
@@ -155,7 +156,7 @@ finished icon dimensions for each generalized screen density.</p>
</th>
</tr>
<tr>
- <th style="background-color:#f3f3f3;font-weight:normal">
+ <th>
Status Bar Icon Size<br><small>(Android 3.0 and Later)</small>
</th>
<td>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
index 5338a4d..cbe6706 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd
@@ -1,4 +1,5 @@
page.title=Tab Icons
+excludeFromSuggestions=true
parent.title=Icon Design Guidelines
parent.link=icon_design.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/index.jd b/docs/html/guide/practices/ui_guidelines/index.jd
index 7603f6b..91a0725 100644
--- a/docs/html/guide/practices/ui_guidelines/index.jd
+++ b/docs/html/guide/practices/ui_guidelines/index.jd
@@ -1,4 +1,5 @@
page.title=User Interface Guidelines
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/menu_design.jd b/docs/html/guide/practices/ui_guidelines/menu_design.jd
index b4e2ea7..bf87bdd 100644
--- a/docs/html/guide/practices/ui_guidelines/menu_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/menu_design.jd
@@ -1,4 +1,5 @@
page.title=Menu Design Guidelines
+excludeFromSuggestions=true
parent.title=UI Guidelines
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd
index a48d17d..cf2cd64 100644
--- a/docs/html/guide/practices/ui_guidelines/widget_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd
@@ -1,4 +1,5 @@
page.title=App Widget Design Guidelines
+excludeFromSuggestions=true
parent.title=UI Guidelines
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/admin/device-admin.jd b/docs/html/guide/topics/admin/device-admin.jd
index 4a325db..a474498 100644
--- a/docs/html/guide/topics/admin/device-admin.jd
+++ b/docs/html/guide/topics/admin/device-admin.jd
@@ -1,4 +1,5 @@
page.title=Device Administration
+page.tags="devicepolicymanager","policy","security"
@jd:body
<div id="qv-wrapper">
@@ -339,7 +340,7 @@ a label.</li>
</code> is a permission that a {@link android.app.admin.DeviceAdminReceiver} subclass must
have, to ensure that only the system can interact with the receiver (no application can be granted this permission). This
prevents other applications from abusing your device admin app.</li>
-<li><code>android.app.action.DEVICE_ADMIN_ENABLED</code> is the the primary
+<li><code>android.app.action.DEVICE_ADMIN_ENABLED</code> is the primary
action that a {@link android.app.admin.DeviceAdminReceiver} subclass must handle to be
allowed to manage a device. This is set to the receiver when the user enables
the device admin app. Your code typically handles this in
diff --git a/docs/html/guide/topics/admin/keychain.jd b/docs/html/guide/topics/admin/keychain.jd
deleted file mode 100644
index 2ea2408..0000000
--- a/docs/html/guide/topics/admin/keychain.jd
+++ /dev/null
@@ -1,4 +0,0 @@
-page.title=Text and Input
-@jd:body
-
-<p>Add contnet here</p>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index 6e6fa28..cdbf827 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -1,4 +1,5 @@
page.title=App Widgets
+page.tags="home"
@jd:body
<div id="qv-wrapper">
@@ -1119,7 +1120,7 @@ initialize an array of <code>WidgetItem</code> objects. When your app widget is
active, the system accesses these objects using their index position in the
array and the text they contain is displayed </p>
-<p>Here is an excerpt from the the <a
+<p>Here is an excerpt from the <a
href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget</a>
sample's
{@link android.widget.RemoteViewsService.RemoteViewsFactory
diff --git a/docs/html/guide/topics/connectivity/bluetooth.jd b/docs/html/guide/topics/connectivity/bluetooth.jd
index 832b850..1c55d8b 100644
--- a/docs/html/guide/topics/connectivity/bluetooth.jd
+++ b/docs/html/guide/topics/connectivity/bluetooth.jd
@@ -1,4 +1,5 @@
page.title=Bluetooth
+page.tags="wireless","bluetoothadapter","bluetoothdevice"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/connectivity/sip.jd b/docs/html/guide/topics/connectivity/sip.jd
index a5f0e2e..526eb83 100644
--- a/docs/html/guide/topics/connectivity/sip.jd
+++ b/docs/html/guide/topics/connectivity/sip.jd
@@ -1,4 +1,5 @@
page.title=Session Initiation Protocol
+page.tags="sipmanager","sipprofile","sipaudiocall","telephony"
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/guide/topics/connectivity/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd
index bbf30fd..2167a0f 100644
--- a/docs/html/guide/topics/connectivity/wifip2p.jd
+++ b/docs/html/guide/topics/connectivity/wifip2p.jd
@@ -1,4 +1,5 @@
page.title=Wi-Fi Direct
+page.tags="wireless","WifiP2pManager"
@jd:body
@@ -433,7 +434,7 @@ if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
<p>The {@link android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()} method is also
asynchronous and can notify your activity when a list of peers is available with {@link
- android.net.wifi.p2p.WifiP2pManager.PeerListListener#onPeersAvailable onPeersAvailable()}, which is defined in the
+ android.net.wifi.p2p.WifiP2pManager.PeerListListener#onPeersAvailable onPeersAvailable()}, which is defined in
the {@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface. The {@link
android.net.wifi.p2p.WifiP2pManager.PeerListListener#onPeersAvailable onPeersAvailable()} method
provides you with an {@link android.net.wifi.p2p.WifiP2pDeviceList}, which you can iterate
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index 2603a06..385c116 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -1,4 +1,5 @@
page.title=Storage Options
+page.tags="database","sharedpreferences","sdcard"
@jd:body
diff --git a/docs/html/guide/topics/data/install-location.jd b/docs/html/guide/topics/data/install-location.jd
index 757cd19..2ec0d5a 100644
--- a/docs/html/guide/topics/data/install-location.jd
+++ b/docs/html/guide/topics/data/install-location.jd
@@ -1,4 +1,5 @@
page.title=App Install Location
+page.tags="sdcard","external"
@jd:body
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index 6114a4a..469eae2 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -1,6 +1,5 @@
page.title=OpenGL
-parent.title=Graphics
-parent.link=index.html
+page.tags="games"
@jd:body
<div id="qv-wrapper">
@@ -138,7 +137,7 @@ calling OpenGL APIs using the following classes:</p>
<li>{@link android.opengl.GLES10}</li>
<li>{@link android.opengl.GLES10Ext}</li>
<li>{@link android.opengl.GLES11}</li>
- <li>{@link android.opengl.GLES10Ext}</li>
+ <li>{@link android.opengl.GLES11Ext}</li>
</ul>
</li>
<li>{@link javax.microedition.khronos.opengles} - This package provides the standard
@@ -289,13 +288,14 @@ matrices to the coordinates of objects that use this shader.
private final String vertexShaderCode =
// This matrix member variable provides a hook to manipulate
- // the coordinates of objects that use this vertex shader
+ // the coordinates of objects that use this vertex shader.
"uniform mat4 uMVPMatrix; \n" +
"attribute vec4 vPosition; \n" +
"void main(){ \n" +
-
- // the matrix must be included as part of gl_Position
+ // The matrix must be included as part of gl_Position
+ // Note that the uMVPMatrix factor *must be first* in order
+ // for the matrix multiplication product to be correct.
" gl_Position = uMVPMatrix * vPosition; \n" +
"} \n";
@@ -444,7 +444,7 @@ investigate other texture compression formats available on your target devices.<
<p>Beyond the ETC1 format, Android devices have varied support for texture compression based on
their GPU chipsets and OpenGL implementations. You should investigate texture compression support on
-the the devices you are are targeting to determine what compression types your application should
+the devices you are are targeting to determine what compression types your application should
support. In order to determine what texture formats are supported on a given device, you must <a
href="#gl-extension-query">query the device</a> and review the <em>OpenGL extension names</em>,
which identify what texture compression formats (and other OpenGL features) are supported by the
diff --git a/docs/html/guide/topics/graphics/prop-animation.jd b/docs/html/guide/topics/graphics/prop-animation.jd
index b733624..22bf769 100644
--- a/docs/html/guide/topics/graphics/prop-animation.jd
+++ b/docs/html/guide/topics/graphics/prop-animation.jd
@@ -1,6 +1,5 @@
page.title=Property Animation
-parent.title=Animation
-parent.link=animation.html
+page.tags="valueanimator","objectanimator","layouttransition","ViewPropertyAnimator"
@jd:body
<div id="qv-wrapper">
@@ -479,7 +478,7 @@ ObjectAnimator.ofFloat(targetObject, "propName", 1f)
</li>
<li>Depending on what property or object you are animating, you might need to call the {@link
- android.view.View#invalidate invalidate()} method on a View force the screen to redraw itself with the
+ android.view.View#invalidate invalidate()} method on a View to force the screen to redraw itself with the
updated animated values. You do this in the
{@link android.animation.ValueAnimator.AnimatorUpdateListener#onAnimationUpdate onAnimationUpdate()}
callback. For example, animating the color property of a Drawable object only cause updates to the
@@ -825,7 +824,7 @@ rotationAnim.setDuration(5000ms);
<h2 id="views">Animating Views</h2>
- <p>The property animation system allow streamlined animation of View objects and offerse
+ <p>The property animation system allow streamlined animation of View objects and offers
a few advantages over the view animation system. The view
animation system transformed View objects by changing the way that they were drawn. This was
handled in the container of each View, because the View itself had no properties to manipulate.
diff --git a/docs/html/guide/topics/location/index.jd b/docs/html/guide/topics/location/index.jd
index 3217196..c4e8829 100644
--- a/docs/html/guide/topics/location/index.jd
+++ b/docs/html/guide/topics/location/index.jd
@@ -59,7 +59,9 @@ href="{@docRoot}guide/topics/location/strategies.html">Location Strategies</a> g
<h2 id="maps">Google Maps Android API</h2>
-<p>With the Google Maps Android API, you can add maps to your app that are based on Google
+<p>With the
+<a href="http://developers.google.com/maps/documentation/android/">Google Maps Android API</a>,
+you can add maps to your app that are based on Google
Maps data. The API automatically handles access to Google Maps servers, data downloading,
map display, and touch gestures on the map. You can also use API calls to add markers,
polygons and overlays, and to change the user's view of a particular map area.</p>
@@ -85,6 +87,6 @@ with the Google Play Store running Android 2.2 or higher, through
<p>To integrate Google Maps into your app, you need to install the Google Play services
libraries for your Android SDK. For more details, read about <a
-href="{@docRoot}google/play-services/index.html">Google Play services</a>.</p>
+href="{@docRoot}google/play-services/maps.html">Google Play services</a>.</p>
diff --git a/docs/html/guide/topics/location/strategies.jd b/docs/html/guide/topics/location/strategies.jd
index 6cc8f1a..2f7e6c3 100644
--- a/docs/html/guide/topics/location/strategies.jd
+++ b/docs/html/guide/topics/location/strategies.jd
@@ -1,6 +1,5 @@
page.title=Location Strategies
-parent.title=Location and Maps
-parent.link=index.html
+page.tags="geolocation","maps","mapview"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/manifest/activity-alias-element.jd b/docs/html/guide/topics/manifest/activity-alias-element.jd
index ba2c154..d3df08b 100644
--- a/docs/html/guide/topics/manifest/activity-alias-element.jd
+++ b/docs/html/guide/topics/manifest/activity-alias-element.jd
@@ -89,7 +89,7 @@ See the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&l
<dt><a name="label"></a>{@code android:label}</dt>
<dd>A user-readable label for the alias when presented to users through the alias.
-See the the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element's
+See the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element's
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#label">label</a></code> attribute for more information.
</p></dd>
@@ -132,4 +132,4 @@ the alias in the manifest.
<dt>see also:</dt>
<dd><code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code></dd>
-</dl> \ No newline at end of file
+</dl>
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index 2aedaec..c9f505f 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -217,7 +217,7 @@ separated by '{@code |}' &mdash; for example, "{@code locale|navigation|orientat
</tr><tr>
<td>"{@code uiMode}"</td>
<td>The user interface mode has changed &mdash; this can be caused when the user places the
-device into a desk/car dock or when the the night mode changes. See {@link
+device into a desk/car dock or when the night mode changes. See {@link
android.app.UiModeManager}.
<em>Added in API level 8</em>.</td>
</tr><tr>
diff --git a/docs/html/guide/topics/manifest/meta-data-element.jd b/docs/html/guide/topics/manifest/meta-data-element.jd
index 85a871d..56a214c 100644
--- a/docs/html/guide/topics/manifest/meta-data-element.jd
+++ b/docs/html/guide/topics/manifest/meta-data-element.jd
@@ -80,7 +80,7 @@ to the item. The ID can be retrieved from the meta-data Bundle by the
</tr><tr>
<td>Color value, in the form "{@code #rgb}", "{@code #argb}",
"{@code #rrggbb}", or "{@code #aarrggbb}"</td>
- <td>{@link android.os.Bundle#getString(String) getString()}</td>
+ <td>{@link android.os.Bundle#getInt(String) getInt()}</td>
</tr><tr>
<td>Float value, such as "{@code 1.23}"</td>
<td>{@link android.os.Bundle#getFloat(String) getFloat()}</td>
diff --git a/docs/html/guide/topics/media/audio-capture.jd b/docs/html/guide/topics/media/audio-capture.jd
index 75d294b..44c618f 100644
--- a/docs/html/guide/topics/media/audio-capture.jd
+++ b/docs/html/guide/topics/media/audio-capture.jd
@@ -1,6 +1,5 @@
page.title=Audio Capture
-parent.title=Multimedia and Camera
-parent.link=index.html
+page.tags="mediarecorder"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
index 3fe23f8..8ebb349 100644
--- a/docs/html/guide/topics/media/camera.jd
+++ b/docs/html/guide/topics/media/camera.jd
@@ -1,6 +1,5 @@
page.title=Camera
-parent.title=Multimedia and Camera
-parent.link=index.html
+page.tags="mediarecorder"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/media/mediaplayer.jd b/docs/html/guide/topics/media/mediaplayer.jd
index 45a58a7..fb272d2 100644
--- a/docs/html/guide/topics/media/mediaplayer.jd
+++ b/docs/html/guide/topics/media/mediaplayer.jd
@@ -1,6 +1,5 @@
page.title=Media Playback
-parent.title=Multimedia and Camera
-parent.link=index.html
+page.tags="mediaplayer","soundpool","audiomanager"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/providers/calendar-provider.jd b/docs/html/guide/topics/providers/calendar-provider.jd
index 5adc68c..3cd4511 100644
--- a/docs/html/guide/topics/providers/calendar-provider.jd
+++ b/docs/html/guide/topics/providers/calendar-provider.jd
@@ -816,7 +816,7 @@ zone.
<tr>
<td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td>
- <td>The end minute of the instance measured from midnight in the the
+ <td>The end minute of the instance measured from midnight in the
Calendar's time zone.</td>
</tr>
diff --git a/docs/html/guide/topics/resources/accessing-resources.jd b/docs/html/guide/topics/resources/accessing-resources.jd
index 0673b6f..8f99653 100644
--- a/docs/html/guide/topics/resources/accessing-resources.jd
+++ b/docs/html/guide/topics/resources/accessing-resources.jd
@@ -50,7 +50,7 @@ the {@code aapt} tool automatically generates.</p>
<p>When your application is compiled, {@code aapt} generates the {@code R} class, which contains
resource IDs for all the resources in your {@code
res/} directory. For each type of resource, there is an {@code R} subclass (for example,
-{@code R.drawable} for all drawable resources) and for each resource of that type, there is a static
+{@code R.drawable} for all drawable resources), and for each resource of that type, there is a static
integer (for example, {@code R.drawable.icon}). This integer is the resource ID that you can use
to retrieve your resource.</p>
@@ -68,7 +68,7 @@ resource is a simple value (such as a string).</li>
<p>There are two ways you can access a resource:</p>
<ul>
- <li><strong>In code:</strong> Using an static integer from a sub-class of your {@code R}
+ <li><strong>In code:</strong> Using a static integer from a sub-class of your {@code R}
class, such as:
<pre class="classic no-pretty-print">R.string.hello</pre>
<p>{@code string} is the resource type and {@code hello} is the resource name. There are many
@@ -264,11 +264,13 @@ reference a system resource, you would need to include the package name. For exa
android:text=&quot;&#64;string/hello&quot; /&gt;
</pre>
-<p class="note"><strong>Note:</strong> You should use string resources at all times, so that your
-application can be localized for other languages. For information about creating alternative
+<p class="note"><strong>Note:</strong> You should use string resources at
+all times, so that your application can be localized for other languages.
+For information about creating alternative
resources (such as localized strings), see <a
href="providing-resources.html#AlternativeResources">Providing Alternative
-Resources</a>.</p>
+Resources</a>. For a complete guide to localizing your application for other languages,
+see <a href="localization.html">Localization</a>.</p>
<p>You can even use resources in XML to create aliases. For example, you can create a
drawable resource that is an alias for another drawable resource:</p>
diff --git a/docs/html/guide/topics/resources/animation-resource.jd b/docs/html/guide/topics/resources/animation-resource.jd
index ef64f07..e5cac88 100644
--- a/docs/html/guide/topics/resources/animation-resource.jd
+++ b/docs/html/guide/topics/resources/animation-resource.jd
@@ -593,7 +593,7 @@ attribute, the value of which is a reference to an interpolator resource.</p>
<p>All interpolators available in Android are subclasses of the {@link
android.view.animation.Interpolator} class. For each interpolator class, Android
includes a public resource you can reference in order to apply the interpolator to an animation
-using the the {@code android:interpolator} attribute.
+using the {@code android:interpolator} attribute.
The following table specifies the resource to use for each interpolator:</p>
<table>
diff --git a/docs/html/guide/topics/resources/layout-resource.jd b/docs/html/guide/topics/resources/layout-resource.jd
index 380ab15..366ddc8 100644
--- a/docs/html/guide/topics/resources/layout-resource.jd
+++ b/docs/html/guide/topics/resources/layout-resource.jd
@@ -135,7 +135,7 @@ a reference of all available attributes,
</dd>
<dt id="requestfocus-element"><code>&lt;requestFocus&gt;</code></dt>
<dd>Any element representing a {@link android.view.View} object can include this empty element,
- which gives it's parent initial focus on the screen. You can have only one of these
+ which gives its parent initial focus on the screen. You can have only one of these
elements per file.</dd>
<dt id="include-element"><code>&lt;include&gt;</code></dt>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index b311b7f..5097cc4 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -376,7 +376,7 @@ res/
screen area. Specifically, the device's smallestWidth is the shortest of the screen's available
height and width (you may also think of it as the "smallest possible width" for the screen). You can
use this qualifier to ensure that, regardless of the screen's current orientation, your
-application's has at least {@code &lt;N&gt;} dps of width available for it UI.</p>
+application has at least {@code &lt;N&gt;} dps of width available for its UI.</p>
<p>For example, if your layout requires that its smallest dimension of screen area be at
least 600 dp at all times, then you can use this qualifer to create the layout resources, {@code
res/layout-sw600dp/}. The system will use these resources only when the smallest dimension of
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index 5f39aa5..45a548a 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -1,6 +1,5 @@
page.title=Handling Runtime Changes
-parent.title=Application Resources
-parent.link=index.html
+page.tags="activity","lifecycle"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/adding-custom-suggestions.jd b/docs/html/guide/topics/search/adding-custom-suggestions.jd
index 02ee084..47ad2fe 100644
--- a/docs/html/guide/topics/search/adding-custom-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-custom-suggestions.jd
@@ -1,6 +1,5 @@
page.title=Adding Custom Suggestions
-parent.title=Search
-parent.link=index.html
+page.tags="SearchRecentSuggestionsProvider",
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
index 2c9a461..c1d59d4 100644
--- a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
@@ -1,6 +1,6 @@
page.title=Adding Recent Query Suggestions
-parent.title=Search
-parent.link=index.html
+page.tags="SearchRecentSuggestions","SearchRecentSuggestionsProvider"
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index b9a26d6..fc722b2 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -1,6 +1,5 @@
page.title=Creating a Search Interface
-parent.title=Search
-parent.link=index.html
+page.tags="searchview"
@jd:body
<div id="qv-wrapper">
@@ -722,6 +721,7 @@ public boolean onCreateOptionsMenu(Menu menu) {
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) {@link android.app.Activity#getSystemService getSystemService}(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
+ // Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo({@link android.app.Activity#getComponentName()}));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
diff --git a/docs/html/guide/topics/search/searchable-config.jd b/docs/html/guide/topics/search/searchable-config.jd
index fb689f9..fc13c04 100644
--- a/docs/html/guide/topics/search/searchable-config.jd
+++ b/docs/html/guide/topics/search/searchable-config.jd
@@ -1,6 +1,5 @@
page.title=Searchable Configuration
-parent.title=Search
-parent.link=index.html
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/security/index.jd b/docs/html/guide/topics/security/index.jd
deleted file mode 100644
index 775fc03..0000000
--- a/docs/html/guide/topics/security/index.jd
+++ /dev/null
@@ -1,65 +0,0 @@
-page.title=Security and Permissions
-page.landing=true
-page.landing.intro=Android's security architecture gives the user full control over what resources are accessible to each app, protecting the system itself and all apps in it. Learn how to use system permissions to request access to the resources your app needs and design your app for optimal security.
-page.landing.image=
-
-@jd:body
-
-<div style="width=100%;padding-left:1em;">
-
- <div style="float:left;clear:both;padding-top:20px;">
- <p style="text-transform:uppercase;"><b style="color:#666;font-size:14px;">Blog Articles</b></p>
-
- <div class="" style="border-top:2px solid #DDD;margin:1em 0;background-color:#F7F7F7;width:336px">
-
- <div style="float:left;padding:8px;padding-right:16px;">
- <img src="/assets/images/resource-article.png">
- </div>
-
- <div class="caption">
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">Accessibility: Are You Serving All Your Users?</a></p>
- <p style="margin:0;padding:0">In the upcoming weeks, some of the older Client Login authentication keys will expire.
- If you generated the token you’re currently using to authenticate with the C2DM servers before October 2011, it will stop working.</p>
-
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">Android C2DM — Client Login key expiration</a></p>
- <p style="margin:0;padding:0">Accessibility is about making sure that Android users who have limited vision or other physical impairments can use your application just as well</p>
-
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">A Faster Emulator with Better Hardware Support</a></p>
- <p style="margin:0;padding:0">The Android emulator is a key tool for Android developers in building and testing their apps.
- As the power and diversity of Android devices has grown quickly, it’s been hard for the emulator keep pace. </p>
-
- <a href="">More &raquo;</a>
- </div>
- </div>
- </div>
-
- <div style="float:right;padding-top:20px;">
- <p style="text-transform:uppercase;"><b style="color:#666;font-size:14px;">Training</b></p>
-
- <div class="" style="border-top:2px solid #DDD;bordddser-top:2px solid #FF8800;margin:1em 0;background-color:#F7F7F7;width:336px">
-
- <div style="float:left;padding:8px;padding-right:16px;">
- <img src="/assets/images/resource-tutorial.png">
- </div>
-
- <div class="caption">
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">Managing the Activity Lifecycle</a></p>
- <p style="margin:0;padding:0">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>
-
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">Supporting Different Devices</a></p>
- <p style="margin:0;padding:0">This class teaches you how to use basic platform features that leverage alternative
- resources and other features so your app can provide an optimized user experience on a variety of Android-compatible devices,
- using a single application package (APK).</p>
-
- <p style="margin:0;padding:0;font-weight:bold;"><a href="">Sharing Content</a></p>
- <p style="margin:0;padding:0">This class covers some common ways you can send and receive content between
- applications using Intent APIs and the ActionProvider object.</p>
-
- <a href="">More &raquo;</a>
- </div>
- </div>
-</div>
-
-</div> \ No newline at end of file
diff --git a/docs/html/guide/topics/security/security.jd b/docs/html/guide/topics/security/security.jd
deleted file mode 100644
index 9cdccae..0000000
--- a/docs/html/guide/topics/security/security.jd
+++ /dev/null
@@ -1,767 +0,0 @@
-page.title=Designing for Security
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>In this document</h2>
-<ol>
-<li><a href="#Dalvik">Using Davlik Code</a></li>
-<li><a href="#Native">Using Native Code</a></li>
-<li><a href="#Data">Storing Data</a></li>
-<li><a href="#IPC">Using IPC</a></li>
-<li><a href="#Permissions">Using Permissions</a></li>
-<li><a href="#Networking">Using Networking</a></li>
-<li><a href="#DynamicCode">Dynamically Loading Code</a></li>
-<li><a href="#Input">Performing Input Validation</a></li>
-<li><a href="#UserData">Handling User Data</a></li>
-<li><a href="#Crypto">Using Cryptography</a></li>
-</ol>
-<h2>See also</h2>
-<ol>
-<li><a href="http://source.android.com/tech/security/index.html">Android
-Security Overview</a></li>
-<li><a href="{@docRoot}guide/topics/security/security.html">Android Security
-And Permissions</a></li>
-</ol>
-</div></div>
-<p>Android was designed so that most developers will be able to build
-applications using the default settings and not be confronted with difficult
-decisions about security. Android also has a number of security features built
-into the operating system that significantly reduce the frequency and impact of
-application security issues.</p>
-
-<p>Some of the security features that help developers build secure applications
-include:
-<ul>
-<li>The Android Application Sandbox that isolates data and code execution on a
-per-application basis.</li>
-<li>Android application framework with robust implementations of common
-security functionality such as cryptography, permissions, and secure IPC.</li>
-<li>Technologies like ASLR, NX, ProPolice, safe_iop, OpenBSD dlmalloc, OpenBSD
-calloc, and Linux mmap_min_addr to mitigate risks associated with common memory
-management errors</li>
-<li>An encrypted filesystem that can be enabled to protect data on lost or
-stolen devices.</li>
-</ul></p>
-
-<p>Nevertheless, it is important for developers to be familiar with Android
-security best practices to make sure they take advantage of these capabilities
-and to reduce the likelihood of inadvertently introducing security issues that
-can affect their applications.</p>
-
-<p>This document is organized around common APIs and development techniques
-that can have security implications for your application and its users. As
-these best practices are constantly evolving, we recommend you check back
-occasionally throughout your application development process.</p>
-
-<a name="Dalvik"></a>
-<h2>Using Dalvik Code</h2>
-<p>Writing secure code that runs in virtual machines is a well-studied topic
-and many of the issues are not specific to Android. Rather than attempting to
-rehash these topics, we’d recommend that you familiarize yourself with the
-existing literature. Two of the more popular resources are:
-<ul>
-<li><a href="http://www.securingjava.com/toc.html">
-http://www.securingjava.com/toc.html</a></li>
-<li><a
-href="https://www.owasp.org/index.php/Java_Security_Resources">
-https://www.owasp.org/index.php/Java_Security_Resources</a></li>
-</ul></p>
-
-<p>This document is focused on the areas which are Android specific and/or
-different from other environments. For developers experienced with VM
-programming in other environments, there are two broad issues that may be
-different about writing apps for Android:
-<ul>
-<li>Some virtual machines, such as the JVM or .net runtime, act as a security
-boundary, isolating code from the underlying operating system capabilities. On
-Android, the Dalvik VM is not a security boundary -- the application sandbox is
-implemented at the OS level, so Dalvik can interoperate with native code in the
-same application without any security constraints.</li>
-<li>Given the limited storage on mobile devices, it’s common for developers
-to want to build modular applications and use dynamic class loading. When
-doing this consider both the source where you retrieve your application logic
-and where you store it locally. Do not use dynamic class loading from sources
-that are not verified, such as unsecured network sources or external storage,
-since that code can be modified to include malicious behavior.</li>
-</ul></p>
-
-<a name="Native"></a>
-<h2>Using Native Code</h2>
-
-<p>In general, we encourage developers to use the Android SDK for most
-application development, rather than using native code. Applications built
-with native code are more complex, less portable, and more like to include
-common memory corruption errors such as buffer overflows.</p>
-
-<p>Android is built using the Linux kernel and being familiar with Linux
-development security best practices is especially useful if you are going to
-use native code. This document is too short to discuss all of those best
-practices, but one of the most popular resources is “Secure Programming for
-Linux and Unix HOWTO”, available at <a
-href="http://www.dwheeler.com/secure-programs">
-http://www.dwheeler.com/secure-programs</a>.</p>
-
-<p>An important difference between Android and most Linux environments is the
-Application Sandbox. On Android, all applications run in the Application
-Sandbox, including those written with native code. At the most basic level, a
-good way to think about it for developers familiar with Linux is to know that
-every application is given a unique UID with very limited permissions. This is
-discussed in more detail in the <a
-href="http://source.android.com/tech/security/index.html">Android Security
-Overview</a> and you should be familiar with application permissions even if
-you are using native code.</p>
-
-<a name="Data"></a>
-<h2>Storing Data</h2>
-
-<h3>Using internal files</h3>
-
-<p>By default, files created on <a
-href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">internal
-storage</a> are only accessible to the application that created the file. This
-protection is implemented by Android and is sufficient for most
-applications.</p>
-
-<p>Use of <a
-href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_WRITEABLE">
-world writable</a> or <a
-href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_READABLE">world
-readable</a> files for IPC is discouraged because it does not provide
-the ability to limit data access to particular applications, nor does it
-provide any control on data format. As an alternative, you might consider using
-a ContentProvider which provides read and write permissions, and can make
-dynamic permission grants on a case-by-case basis.</p>
-
-<p>To provide additional protection for sensitive data, some applications
-choose to encrypt local files using a key that is not accessible to the
-application. (For example, a key can be placed in a {@link java.security.KeyStore} and
-protected with a user password that is not stored on the device). While this
-does not protect data from a root compromise that can monitor the user
-inputting the password, it can provide protection for a lost device without <a
-href="http://source.android.com/tech/encryption/index.html">file system
-encryption</a>.</p>
-
-<h3>Using external storage</h3>
-
-<p>Files created on <a
-href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
-storage</a>, such as SD Cards, are globally readable and writable. Since
-external storage can be removed by the user and also modified by any
-application, applications should not store sensitive information using
-external storage.</p>
-
-<p>As with data from any untrusted source, applications should perform input
-validation when handling data from external storage (see Input Validation
-section). We strongly recommend that applications not store executables or
-class files on external storage prior to dynamic loading. If an application
-does retrieve executable files from external storage they should be signed and
-cryptographically verified prior to dynamic loading.</p>
-
-<h3>Using content providers</h3>
-
-<p>ContentProviders provide a structured storage mechanism that can be limited
-to your own application, or exported to allow access by other applications. By
-default, a <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code> is
-<a href="{@docRoot}guide/topics/manifest/provider-element.html#exported">exported
-</a> for use by other applications. If you do not intend to provide other
-applications with access to your<code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code>, mark them as <code><a
-href="{@docRoot}guide/topics/manifest/provider-element.html#exported">
-android:exported=false</a></code> in the application manifest.</p>
-
-<p>When creating a <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">ContentProvider
-</a></code> that will be exported for use by other applications, you can specify
-a single
-<a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission
-</a> for reading and writing, or distinct permissions for reading and writing
-within the manifest. We recommend that you limit your permissions to those
-required to accomplish the task at hand. Keep in mind that it’s usually
-easier to add permissions later to expose new functionality than it is to take
-them away and break existing users.</p>
-
-<p>If you are using a <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code> for sharing data between applications built by the
-same developer, it is preferable to use
-<a href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
-level permissions</a>. Signature permissions do not require user confirmation,
-so they provide a better user experience and more controlled access to the
-<code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code>.</p>
-
-<p>ContentProviders can also provide more granular access by declaring the <a
-href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
-grantUriPermissions</a> element and using the <code><a
-href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION">FLAG_GRANT_READ_URI_PERMISSION</a></code>
-and <code><a
-href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_WRITE_URI_PERMISSION">FLAG_GRANT_WRITE_URI_PERMISSION</a></code>
-flags in the Intent object
-that activates the component. The scope of these permissions can be further
-limited by the <code><a
-href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">
-grant-uri-permission element</a></code>.</p>
-
-<p>When accessing a <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code>, use parameterized query methods such as <code>
-<a href="{@docRoot}reference/android/content/ContentProvider.html#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String)">query()</a></code>, <code><a
-href="{@docRoot}reference/android/content/ContentProvider.html#update(android.net.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])">update()</a></code>, and <code><a
-href="{@docRoot}reference/android/content/ContentProvider.html#delete(android.net.Uri,%20java.lang.String,%20java.lang.String[])">delete()</a></code> to avoid
-potential <a href="http://en.wikipedia.org/wiki/SQL_injection">SQL
-Injection</a> from untrusted data. Note that using parameterized methods is not
-sufficient if the <code>selection</code> is built by concatenating user data
-prior to submitting it to the method.</p>
-
-<p>Do not have a false sense of security about the write permission. Consider
-that the write permission allows SQL statements which make it possible for some
-data to be confirmed using creative <code>WHERE</code> clauses and parsing the
-results. For example, an attacker might probe for presence of a specific phone
-number in a call-log by modifying a row only if that phone number already
-exists. If the content provider data has predictable structure, the write
-permission may be equivalent to providing both reading and writing.</p>
-
-<a name="IPC"></a>
-<h2>Using Interprocess Communication (IPC)</h2>
-
-<p>Some Android applications attempt to implement IPC using traditional Linux
-techniques such as network sockets and shared files. We strongly encourage the
-use of Android system functionality for IPC such as Intents, Binders, Services,
-and Receivers. The Android IPC mechanisms allow you to verify the identity of
-the application connecting to your IPC and set security policy for each IPC
-mechanism.</p>
-
-<p>Many of the security elements are shared across IPC mechanisms. <a
-href="{@docRoot}reference/android/content/BroadcastReceiver.html">
-Broadcast Receivers</a>, <a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestActivity">
-Activities</a>, and <a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestService">
-Services</a> are all declared in the application manifest. If your IPC mechanism is
-not intended for use by other applications, set the <a
-href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
-property to false. This is useful for applications that consist of multiple processes
-within the same UID, or if you decide late in development that you do not
-actually want to expose functionality as IPC but you don’t want to rewrite
-the code.</p>
-
-<p>If your IPC is intended to be accessible to other applications, you can
-apply a security policy by using the <a
-href="{@docRoot}reference/android/R.styleable.html#AndroidManifestPermission">
-Permission</a> tag. If IPC is between applications built by the same developer,
-it is preferable to use <a
-href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
-level permissions</a>. Signature permissions do not require user confirmation,
-so they provide a better user experience and more controlled access to the IPC
-mechanism.</p>
-
-<p>One area that can introduce confusion is the use of intent filters. Note
-that Intent filters should not be considered a security feature -- components
-can be invoked directly and may not have data that would conform to the intent
-filter. You should perform input validation within your intent receiver to
-confirm that it is properly formatted for the invoked receiver, service, or
-activity.</p>
-
-<h3>Using intents</h3>
-
-<p>Intents are the preferred mechanism for asynchronous IPC in Android.
-Depending on your application requirements, you might use <code><a
-href="{@docRoot}reference/android/content/Context.html#sendBroadcast(android.content.Intent)">sendBroadcast()</a></code>,
-<code><a
-href="{@docRoot}reference/android/content/Context.html#sendOrderedBroadcast(android.content.Intent,%20java.lang.String)">sendOrderedBroadcast()</a></code>,
-or direct an intent to a specific application component.</p>
-
-<p>Note that ordered broadcasts can be “consumed” by a recipient, so they
-may not be delivered to all applications. If you are sending an Intent where
-delivery to a specific receiver is required, the intent must be delivered
-directly to the receiver.</p>
-
-<p>Senders of an intent can verify that the recipient has a permission
-specifying a non-Null Permission upon sending. Only applications with that
-Permission will receive the intent. If data within a broadcast intent may be
-sensitive, you should consider applying a permission to make sure that
-malicious applications cannot register to receive those messages without
-appropriate permissions. In those circumstances, you may also consider
-invoking the receiver directly, rather than raising a broadcast.</p>
-
-<h3>Using binder and AIDL interfaces</h3>
-
-<p><a href="{@docRoot}reference/android/os/Binder.html">Binders</a> are the
-preferred mechanism for RPC-style IPC in Android. They provide a well-defined
-interface that enables mutual authentication of the endpoints, if required.</p>
-
-<p>We strongly encourage designing interfaces in a manner that does not require
-interface specific permission checks. Binders are not declared within the
-application manifest, and therefore you cannot apply declarative permissions
-directly to a Binder. Binders generally inherit permissions declared in the
-application manifest for the Service or Activity within which they are
-implemented. If you are creating an interface that requires authentication
-and/or access controls on a specific binder interface, those controls must be
-explicitly added as code in the interface.</p>
-
-<p>If providing an interface that does require access controls, use <code><a
-href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
-to verify whether the
-caller of the Binder has a required permission. This is especially important
-before accessing a Service on behalf of the caller, as the identify of your
-application is passed to other interfaces. If invoking an interface provided
-by a Service, the <code><a
-href="{@docRoot}reference/android/content/Context.html#bindService(android.content.Intent,%20android.content.ServiceConnection,%20int)">bindService()</a></code>
- invocation may fail if you do not have permission to access the given Service.
- If calling an interface provided locally by your own application, it may be
-useful to use the <code><a
-href="{@docRoot}reference/android/os/Binder.html#clearCallingIdentity()">
-clearCallingIdentity()</a></code> to satisfy internal security checks.</p>
-
-<h3>Using broadcast receivers</h3>
-
-<p>Broadcast receivers are used to handle asynchronous requests initiated via
-an intent.</p>
-
-<p>By default, receivers are exported and can be invoked by any other
-application. If your <code><a
-href="{@docRoot}reference/android/content/BroadcastReceiver.html">
-BroadcastReceivers</a></code> is intended for use by other applications, you
-may want to apply security permissions to receivers using the <code><a
-href="{@docRoot}guide/topics/manifest/receiver-element.html">
-&lt;receiver&gt;</a></code> element within the application manifest. This will
-prevent applications without appropriate permissions from sending an intent to
-the <code><a
-href="{@docRoot}reference/android/content/BroadcastReceiver.html">
-BroadcastReceivers</a></code>.</p>
-
-<h3>Using Services</h3>
-
-<p>Services are often used to supply functionality for other applications to
-use. Each service class must have a corresponding <service> declaration in its
-package's AndroidManifest.xml.</p>
-
-<p>By default, Services are exported and can be invoked by any other
-application. Services can be protected using the <a
-href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">{@code android:permission}</a>
-attribute
-within the manifest’s <code><a
-href="{@docRoot}guide/topics/manifest/service-element.html">
-&lt;service&gt;</a></code> tag. By doing so, other applications will need to declare
-a corresponding <code><a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a>
-</code> element in their own manifest to be
-able to start, stop, or bind to the service.</p>
-
-<p>A Service can protect individual IPC calls into it with permissions, by
-calling <code><a
-href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
-before executing
-the implementation of that call. We generally recommend using the
-declarative permissions in the manifest, since those are less prone to
-oversight.</p>
-
-<h3>Using Activities</h3>
-
-<p>Activities are most often used for providing the core user-facing
-functionality of an application. By default, Activities are exported and
-invokable by other applications only if they have an intent filter or binder
-declared. In general, we recommend that you specifically declare a Receiver or
-Service to handle IPC, since this modular approach reduces the risk of exposing
-functionality that is not intended for use by other applications.</p>
-
-<p>If you do expose an Activity for purposes of IPC, the <code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html#prmsn">android:permission</a></code>
-attribute in the <code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">
-&lt;activity&gt;</a></code> declaration in the application manifest can be used to
-restrict access to only those applications which have the stated
-permissions.</p>
-
-<a name="Permissions"></a>
-<h2>Using Permissions</h2>
-
-<h3>Requesting Permissions</h3>
-
-<p>We recommend minimizing the number of permissions requested by an
-application. Not having access to sensitive permissions reduces the risk of
-inadvertently misusing those permissions, can improve user adoption, and makes
-applications less attractive targets for attackers.</p>
-
-<p>If it is possible to design your application in a way that does not require
-a permission, that is preferable. For example, rather than requesting access
-to device information to create an identifier, create a <a
-href="{@docRoot}reference/java/util/UUID.html">GUID</a> for your application.
-(This specific example is also discussed in Handling User Data) Or, rather than
-using external storage, store data in your application directory.</p>
-
-<p>If a permission is not required, do not request it. This sounds simple, but
-there has been quite a bit of research into the frequency of over-requesting
-permissions. If you’re interested in the subject you might start with this
-research paper published by U.C. Berkeley: <a
-href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-48.pdf">
-http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-48.pdf</a></p>
-
-<p>In addition to requesting permissions, your application can use <a
-href="{@docRoot}guide/topics/manifest/permission-element.html">permissions</a>
-to protect IPC that is security sensitive and will be exposed to other
-applications -- such as a <code><a
-href="{@docRoot}reference/android/content/ContentProvider.html">
-ContentProvider</a></code>. In general, we recommend using access controls
-other than user confirmed permissions where possible since permissions can
-be confusing for users. For example, consider using the <a
-href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
-protection level</a> on permissions for IPC communication between applications
-provided by a single developer.</p>
-
-<p>Do not cause permission re-delegation. This occurs when an app exposes data
-over IPC that is only available because it has a specific permission, but does
-not require that permission of any clients of it’s IPC interface. More
-details on the potential impacts, and frequency of this type of problem is
-provided in this research paper published at USENIX: <a
-href="http://www.cs.berkeley.edu/~afelt/felt_usenixsec2011.pdf">http://www.cs.be
-rkeley.edu/~afelt/felt_usenixsec2011.pdf</a></p>
-
-<h3>Creating Permissions</h3>
-
-<p>Generally, you should strive to create as few permissions as possible while
-satisfying your security requirements. Creating a new permission is relatively
-uncommon for most applications, since <a
-href="{@docRoot}reference/android/Manifest.permission.html">system-defined
-permissions</a> cover many situations. Where appropriate,
-perform access checks using existing permissions.</p>
-
-<p>If you must create a new permission, consider whether you can accomplish
-your task with a Signature permission. Signature permissions are transparent
-to the user and only allow access by applications signed by the same developer
-as application performing the permission check. If you create a Dangerous
-permission, then the user needs to decide whether to install the application.
-This can be confusing for other developers, as well as for users.</p>
-
-<p>If you create a Dangerous permission, there are a number of complexities
-that you need to consider.
-<ul>
-<li>The permission must have a string that concisely expresses to a user the
-security decision they will be required to make.</li>
-<li>The permission string must be localized to many different languages.</li>
-<li>Uses may choose not to install an application because a permission is
-confusing or perceived as risky.</li>
-<li>Applications may request the permission when the creator of the permission
-has not been installed.</li>
-</ul></p>
-
-<p>Each of these poses a significant non-technical challenge for an application
-developer, which is why we discourage the use of Dangerous permission.</p>
-
-<a name="Networking"></a>
-<h2>Using Networking</h2>
-
-<h3>Using IP Networking</h3>
-
-<p>Networking on Android is not significantly different from Linux
-environments. The key consideration is making sure that appropriate protocols
-are used for sensitive data, such as <a
-href="{@docRoot}reference/javax/net/ssl/HttpsURLConnection.html">HTTPS</a> for
-web traffic. We prefer use of HTTPS over HTTP anywhere that HTTPS is
-supported on the server, since mobile devices frequently connect on networks
-that are not secured, such as public WiFi hotspots.</p>
-
-<p>Authenticated, encrypted socket-level communication can be easily
-implemented using the <code><a
-href="{@docRoot}reference/javax/net/ssl/SSLSocket.html">SSLSocket</a></code>
-class. Given the frequency with which Android devices connect to unsecured
-wireless networks using WiFi, the use of secure networking is strongly
-encouraged for all applications.</p>
-
-<p>We have seen some applications use <a
-href="http://en.wikipedia.org/wiki/Localhost">localhost</a> network ports for
-handling sensitive IPC. We discourage this approach since these interfaces are
-accessible by other applications on the device. Instead, use an Android IPC
-mechanism where authentication is possible such as a Service and Binder. (Even
-worse than using loopback is to bind to INADDR_ANY since then your application
-may receive requests from anywhere. We’ve seen that, too.)</p>
-
-<p>Also, one common issue that warrants repeating is to make sure that you do
-not trust data downloaded from HTTP or other insecure protocols. This includes
-validation of input in <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code> and
-any responses to intents issued against HTTP.</p>
-
-<h3>Using Telephony Networking</h3>
-
-<p>SMS is the telephony protocol most frequently used by Android developers.
-Developers should keep in mind that this protocol was primarily designed for
-user-to-user communication and is not well-suited for some application
-purposes. Due to the limitations of SMS, we strongly recommend the use of <a
-href="http://code.google.com/android/c2dm/">C2DM</a> and IP networking for
-sending data messages to devices.</p>
-
-<p>Many developers do not realize that SMS is not encrypted or strongly
-authenticated on the network or on the device. In particular, any SMS receiver
-should expect that a malicious user may have sent the SMS to your application
--- do not rely on unauthenticated SMS data to perform sensitive commands.
-Also, you should be aware that SMS may be subject to spoofing and/or
-interception on the network. On the Android-powered device itself, SMS
-messages are transmitted as Broadcast intents, so they may be read or captured
-by other applications that have the READ_SMS permission.</p>
-
-<a name="DynamicCode"></a>
-<h2>Dynamically Loading Code</h2>
-
-<p>We strongly discourage loading code from outside of the application APK.
-Doing so significantly increases the likelihood of application compromise due
-to code injection or code tampering. It also adds complexity around version
-management and application testing. Finally, it can make it impossible to
-verify the behavior of an application, so it may be prohibited in some
-environments.</p>
-
-<p>If your application does dynamically load code, the most important thing to
-keep in mind about dynamically loaded code is that it runs with the same
-security permissions as the application APK. The user made a decision to
-install your application based on your identity, and they are expecting that
-you provide any code run within the application, including code that is
-dynamically loaded.</p>
-
-<p>The major security risk associated with dynamically loading code is that the
-code needs to come from a verifiable source. If the modules are included
-directly within your APK, then they cannot be modified by other applications.
-This is true whether the code is a native library or a class being loaded using
-<a href="{@docRoot}reference/dalvik/system/DexClassLoader.html">
-<code>DexClassLoader</code></a>. We have seen many instances of applications
-attempting to load code from insecure locations, such as downloaded from the
-network over unencrypted protocols or from world writable locations such as
-external storage. These locations could allow someone on the network to modify
-the content in transit, or another application on a users device to modify the
-content, respectively.</p>
-
-
-<h3>Using WebView</h3>
-
-<p>Since WebView consumes web content that can include HTML and JavaScript,
-improper use can introduce common web security issues such as <a
-href="http://en.wikipedia.org/wiki/Cross_site_scripting">cross-site-scripting</a
-> (JavaScript injection). Android includes a number of mechanisms to reduce
-the scope of these potential issues by limiting the capability of WebView to
-the minimum functionality required by your application.</p>
-
-<p>If your application does not directly use JavaScript within a <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, do
-not call
-<a href="{@docRoot}reference/android/webkit/WebSettings.html#setJavaScriptEnabled(boolean)">
-<code>setJavaScriptEnabled()</code></a>. We have seen this method invoked
-in sample code that might be repurposed in production application -- so
-remove it if necessary. By default, <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code> does
-not execute JavaScript so cross-site-scripting is not possible.</p>
-
-<p>Use <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> with
-particular care because it allows JavaScript to invoke operations that are
-normally reserved for Android applications. Only expose <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
-sources from which all input is trustworthy. If untrusted input is allowed,
-untrusted JavaScript may be able to invoke Android methods. In general, we
-recommend only exposing <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
-JavaScript that is contained within your application APK.</p>
-
-<p>Do not trust information downloaded over HTTP, use HTTPS instead. Even if
-you are connecting only to a single website that you trust or control, HTTP is
-subject to <a
-href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack">MiTM</a> attacks
-and interception of data. Sensitive capabilities using <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> should
-not ever be exposed to unverified script downloaded over HTTP. Note that even
-with the use of HTTPS,
-<code><a
-href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code>
-increases the attack surface of your application to include the server
-infrastructure and all CAs trusted by the Android-powered device.</p>
-
-<p>If your application accesses sensitive data with a <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, you
-may want to use the <code><a
-href="{@docRoot}reference/android/webkit/WebView.html#clearCache(boolean)">
-clearCache()</a></code> method to delete any files stored locally. Server side
-headers like no-cache can also be used to indicate that an application should
-not cache particular content.</p>
-
-<a name="Input"></a>
-<h2>Performing Input Validation</h2>
-
-<p>Insufficient input validation is one of the most common security problems
-affecting applications, regardless of what platform they run on. Android does
-have platform-level countermeasures that reduce the exposure of applications to
-input validation issues, you should use those features where possible. Also
-note that selection of type-safe languages tends to reduce the likelihood of
-input validation issues. We strongly recommend building your applications with
-the Android SDK.</p>
-
-<p>If you are using native code, then any data read from files, received over
-the network, or received from an IPC has the potential to introduce a security
-issue. The most common problems are <a
-href="http://en.wikipedia.org/wiki/Buffer_overflow">buffer overflows</a>, <a
-href="http://en.wikipedia.org/wiki/Double_free#Use_after_free">use after
-free</a>, and <a
-href="http://en.wikipedia.org/wiki/Off-by-one_error">off-by-one errors</a>.
-Android provides a number of technologies like ASLR and DEP that reduce the
-exploitability of these errors, but they do not solve the underlying problem.
-These can be prevented by careful handling of pointers and managing of
-buffers.</p>
-
-<p>Dynamic, string based languages such as JavaScript and SQL are also subject
-to input validation problems due to escape characters and <a
-href="http://en.wikipedia.org/wiki/Code_injection">script injection</a>.</p>
-
-<p>If you are using data within queries that are submitted to SQL Database or a
-Content Provider, SQL Injection may be an issue. The best defense is to use
-parameterized queries, as is discussed in the ContentProviders section.
-Limiting permissions to read-only or write-only can also reduce the potential
-for harm related to SQL Injection.</p>
-
-<p>If you are using <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, then
-you must consider the possibility of XSS. If your application does not
-directly use JavaScript within a <code><a
-href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, do
-not call setJavaScriptEnabled() and XSS is no longer possible. If you must
-enable JavaScript then the WebView section provides other security best
-practices.</p>
-
-<p>If you cannot use the security features above, we strongly recommend the use
-of well-structured data formats and verifying that the data conforms to the
-expected format. While blacklisting of characters or character-replacement can
-be an effective strategy, these techniques are error-prone in practice and
-should be avoided when possible.</p>
-
-<a name="UserData"></a>
-<h2>Handling User Data</h2>
-
-<p>In general, the best approach is to minimize use of APIs that access
-sensitive or personal user data. If you have access to data and can avoid
-storing or transmitting the information, do not store or transmit the data.
-Finally, consider if there is a way that your application logic can be
-implemented using a hash or non-reversible form of the data. For example, your
-application might use the hash of an an email address as a primary key, to
-avoid transmitting or storing the email address. This reduces the chances of
-inadvertently exposing data, and it also reduces the chance of attackers
-attempting to exploit your application.</p>
-
-<p>If your application accesses personal information such as passwords or
-usernames, keep in mind that some jurisdictions may require you to provide a
-privacy policy explaining your use and storage of that data. So following the
-security best practice of minimizing access to user data may also simplify
-compliance.</p>
-
-<p>You should also consider whether your application might be inadvertently
-exposing personal information to other parties such as third-party components
-for advertising or third-party services used by your application. If you don't
-know why a component or service requires a personal information, don’t
-provide it. In general, reducing the access to personal information by your
-application will reduce the potential for problems in this area.</p>
-
-<p>If access to sensitive data is required, evaluate whether that information
-must be transmitted to a server, or whether the operation can be performed on
-the client. Consider running any code using sensitive data on the client to
-avoid transmitting user data.</p>
-
-<p>Also, make sure that you do not inadvertently expose user data to other
-application on the device through overly permissive IPC, world writable files,
-or network sockets. This is a special case of permission redelegation,
-discussed in the Requesting Permissions section.</p>
-
-<p>If a GUID is required, create a large, unique number and store it. Do not
-use phone identifiers such as the phone number or IMEI which may be associated
-with personal information. This topic is discussed in more detail in the <a
-href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">Android Developer Blog</a>.</p>
-
-<p>Application developers should be careful writing to on-device logs.
-In Android, logs are a shared resource, and are available
-to an application with the
-<a href="{@docRoot}reference/android/Manifest.permission.html#READ_LOGS">
-<code>READ_LOGS</code></a> permission. Even though the phone log data
-is temporary and erased on reboot, inappropriate logging of user information
-could inadvertently leak user data to other applications.</p>
-
-
-<h3>Handling Credentials</h3>
-
-<p>In general, we recommend minimizing the frequency of asking for user
-credentials -- to make phishing attacks more conspicuous, and less likely to be
-successful. Instead use an authorization token and refresh it.</p>
-
-<p>Where possible, username and password should not be stored on the device.
-Instead, perform initial authentication using the username and password
-supplied by the user, and then use a short-lived, service-specific
-authorization token.</p>
-
-<p>Services that will be accessible to multiple applications should be accessed
-using <code>
-<a href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a></code>. If possible, use the <code><a
-href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a></code> class to invoke a cloud-based service and do not store
-passwords on the device.</p>
-
-<p>After using <code><a
-href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a></code> to retrieve an Account, check the <code><a
-href="{@docRoot}reference/android/accounts/Account.html#CREATOR">CREATOR</a>
-</code> before passing in any credentials, so that you do not inadvertently pass
-credentials to the wrong application.</p>
-
-<p>If credentials are to be used only by applications that you create, then you
-can verify the application which accesses the <code><a
-href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a></code> using <code><a
-href="{@docRoot}reference/android/content/pm/PackageManager.html#checkSignatures(java.lang.String,%20java.lang.String)">checkSignature()</a></code>.
-Alternatively, if only one application will use the credential, you might use a
-{@link java.security.KeyStore} for
-storage.</p>
-
-<a name="Crypto"></a>
-<h2>Using Cryptography</h2>
-
-<p>In addition to providing data isolation, supporting full-filesystem
-encryption, and providing secure communications channels Android provides a
-wide array of algorithms for protecting data using cryptography.</p>
-
-<p>In general, try to use the highest level of pre-existing framework
-implementation that can support your use case. If you need to securely
-retrieve a file from a known location, a simple HTTPS URI may be adequate and
-require no knowledge of cryptography on your part. If you need a secure
-tunnel, consider using
-<a href="{@docRoot}reference/javax/net/ssl/HttpsURLConnection.html">
-<code>HttpsURLConnection</code></a> or <code><a
-href="{@docRoot}reference/javax/net/ssl/SSLSocket.html">SSLSocket</a></code>,
-rather than writing your own protocol.</p>
-
-<p>If you do find yourself needing to implement your own protocol, we strongly
-recommend that you not implement your own cryptographic algorithms. Use
-existing cryptographic algorithms such as those in the implementation of AES or
-RSA provided in the <code><a
-href="{@docRoot}reference/javax/crypto/Cipher.html">Cipher</a></code> class.</p>
-
-<p>Use a secure random number generator (
-<a href="{@docRoot}reference/java/security/SecureRandom.html">
-<code>SecureRandom</code></a>) to initialize any cryptographic keys (<a
-href="{@docRoot}reference/javax/crypto/KeyGenerator.html">
-<code>KeyGenerator</code></a>). Use of a key that is not generated with a secure random
-number generator significantly weakens the strength of the algorithm, and may
-allow offline attacks.</p>
-
-<p>If you need to store a key for repeated use, use a mechanism like {@link java.security.KeyStore} that
-provides a mechanism for long term storage and retrieval of cryptographic
-keys.</p>
-
-<h2>Conclusion</h2>
-
-<p>Android provides developers with the ability to design applications with a
-broad range of security requirements. These best practices will help you make
-sure that your application takes advantage of the security benefits provided by
-the platform.</p>
-
-<p>You can receive more information on these topics and discuss security best
-practices with other developers in the <a
-href="http://groups.google.com/group/android-security-discuss">Android Security
-Discuss</a> Google Group</p>
diff --git a/docs/html/guide/topics/sensors/sensors_motion.jd b/docs/html/guide/topics/sensors/sensors_motion.jd
index b6c3cb4..289c639 100644
--- a/docs/html/guide/topics/sensors/sensors_motion.jd
+++ b/docs/html/guide/topics/sensors/sensors_motion.jd
@@ -1,6 +1,5 @@
page.title=Motion Sensors
-parent.title=Sensors
-parent.link=index.html
+page.tags="sensorevent","accelerometer","gyroscope","gravity","rotation"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/sensors/sensors_position.jd b/docs/html/guide/topics/sensors/sensors_position.jd
index 869109b..55b282b 100644
--- a/docs/html/guide/topics/sensors/sensors_position.jd
+++ b/docs/html/guide/topics/sensors/sensors_position.jd
@@ -1,6 +1,5 @@
page.title=Position Sensors
-parent.title=Sensors
-parent.link=index.html
+page.tags="sensorevent","orientation","proximity"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/text/copy-paste.jd b/docs/html/guide/topics/text/copy-paste.jd
index 6c86f47..b34f0fa 100644
--- a/docs/html/guide/topics/text/copy-paste.jd
+++ b/docs/html/guide/topics/text/copy-paste.jd
@@ -1,4 +1,5 @@
page.title=Copy and Paste
+page.tags="clipboardmanager","clipdata","input"
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/guide/topics/text/creating-input-method.jd b/docs/html/guide/topics/text/creating-input-method.jd
index 7086824..7254594 100644
--- a/docs/html/guide/topics/text/creating-input-method.jd
+++ b/docs/html/guide/topics/text/creating-input-method.jd
@@ -1,5 +1,5 @@
page.title=Creating an Input Method
-parent.title=Articles
+page.tags="ime","keyboard","inputmethodservice"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/text/spell-checker-framework.jd b/docs/html/guide/topics/text/spell-checker-framework.jd
index 7f7a0b8..366f9cc 100644
--- a/docs/html/guide/topics/text/spell-checker-framework.jd
+++ b/docs/html/guide/topics/text/spell-checker-framework.jd
@@ -1,5 +1,5 @@
page.title=Spelling Checker Framework
-parent.title=Articles
+page.tags="input","spellcheckerservice"
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index 678a512..db09e7d 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -674,7 +674,7 @@ action view still appears in the action bar when the user selects the item. You
view collapsible by adding {@code "collapseActionView"} to the {@code android:showAsAction}
attribute, as shown in the XML above.</p>
-<p>Because the system will expand the action view when the user selects the item, so you
+<p>Because the system will expand the action view when the user selects the item, you
<em>do not</em> need to respond to the item in the {@link
android.app.Activity#onOptionsItemSelected onOptionsItemSelected} callback. The system still calls
{@link android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} when the user selects it,
diff --git a/docs/html/guide/topics/ui/controls/button.jd b/docs/html/guide/topics/ui/controls/button.jd
index 8d48e9c..41b67b7 100644
--- a/docs/html/guide/topics/ui/controls/button.jd
+++ b/docs/html/guide/topics/ui/controls/button.jd
@@ -1,6 +1,5 @@
page.title=Buttons
-parent.title=Input Controls
-parent.link=../controls.html
+page.tags="button","imagebutton"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/checkbox.jd b/docs/html/guide/topics/ui/controls/checkbox.jd
index ea70980..99140b5 100644
--- a/docs/html/guide/topics/ui/controls/checkbox.jd
+++ b/docs/html/guide/topics/ui/controls/checkbox.jd
@@ -1,6 +1,5 @@
page.title=Checkboxes
-parent.title=Input Controls
-parent.link=../controls.html
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/pickers.jd b/docs/html/guide/topics/ui/controls/pickers.jd
index cf90f1d..a0e7afb 100644
--- a/docs/html/guide/topics/ui/controls/pickers.jd
+++ b/docs/html/guide/topics/ui/controls/pickers.jd
@@ -1,6 +1,5 @@
-page.title= Pickers
-parent.title=Form Controls
-parent.link=controls-form.html
+page.title=Pickers
+page.tags="datepicker","timepicker"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/radiobutton.jd b/docs/html/guide/topics/ui/controls/radiobutton.jd
index c96e576..d0c48ed 100644
--- a/docs/html/guide/topics/ui/controls/radiobutton.jd
+++ b/docs/html/guide/topics/ui/controls/radiobutton.jd
@@ -1,6 +1,5 @@
page.title=Radio Buttons
-parent.title=Input Controls
-parent.link=../controls.html
+page.tags="radiobutton","radiogroup"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/spinner.jd b/docs/html/guide/topics/ui/controls/spinner.jd
index deba3e6..85714b6 100644
--- a/docs/html/guide/topics/ui/controls/spinner.jd
+++ b/docs/html/guide/topics/ui/controls/spinner.jd
@@ -1,6 +1,5 @@
-page.title= Spinners
-parent.title=Input Controls
-parent.link=../controls.html
+page.title=Spinners
+page.tags="adapterview","spinneradapter"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/text.jd b/docs/html/guide/topics/ui/controls/text.jd
index 654883d..c0b9873 100644
--- a/docs/html/guide/topics/ui/controls/text.jd
+++ b/docs/html/guide/topics/ui/controls/text.jd
@@ -1,6 +1,5 @@
page.title=Text Fields
-parent.title=Input Controls
-parent.link=../controls.html
+page.tags="edittext","autocompletetextview"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/togglebutton.jd b/docs/html/guide/topics/ui/controls/togglebutton.jd
index dd7634b..3119cd9 100644
--- a/docs/html/guide/topics/ui/controls/togglebutton.jd
+++ b/docs/html/guide/topics/ui/controls/togglebutton.jd
@@ -1,6 +1,5 @@
page.title=Toggle Buttons
-parent.title=Input Controls
-parent.link=../controls.html
+page.tags="switch","togglebutton"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/custom-components.jd b/docs/html/guide/topics/ui/custom-components.jd
index be82dbc..703a5ce 100644
--- a/docs/html/guide/topics/ui/custom-components.jd
+++ b/docs/html/guide/topics/ui/custom-components.jd
@@ -1,6 +1,5 @@
page.title=Custom Components
-parent.title=User Interface
-parent.link=index.html
+page.tags="view","widget"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/declaring-layout.jd b/docs/html/guide/topics/ui/declaring-layout.jd
index e229f23..ab674e6 100644
--- a/docs/html/guide/topics/ui/declaring-layout.jd
+++ b/docs/html/guide/topics/ui/declaring-layout.jd
@@ -1,6 +1,5 @@
page.title=Layouts
-parent.title=User Interface
-parent.link=index.html
+page.tags="view","viewgroup"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index 3cfed13..7f48eac 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -1,4 +1,6 @@
page.title=Dialogs
+page.tags="alertdialog","dialogfragment"
+
@jd:body
diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd
index cacdf5c..e989374 100644
--- a/docs/html/guide/topics/ui/drag-drop.jd
+++ b/docs/html/guide/topics/ui/drag-drop.jd
@@ -1,6 +1,5 @@
page.title=Drag and Drop
-parent.title=User Interface
-parent.link=index.html
+page.tags="clipdata","dragevent","onlongclicklistener"
@jd:body
<div id="qv-wrapper">
@@ -750,7 +749,7 @@ imageView.setOnLongClickListener(new View.OnLongClickListener() {
A{@link android.view.DragEvent#ACTION_DRAG_EXITED} event, it receives a new
{@link android.view.DragEvent#ACTION_DRAG_LOCATION} event every time the touch point moves.
The {@link android.view.DragEvent#getX()} and {@link android.view.DragEvent#getY()} methods
- return the the X and Y coordinates of the touch point.
+ return the X and Y coordinates of the touch point.
</li>
<li>
{@link android.view.DragEvent#ACTION_DRAG_EXITED}: This event is sent to a listener that
@@ -995,4 +994,4 @@ protected class myDragEventListener implements View.OnDragEventListener {
};
};
};
-</pre> \ No newline at end of file
+</pre>
diff --git a/docs/html/guide/topics/ui/layout-objects.jd b/docs/html/guide/topics/ui/layout-objects.jd
deleted file mode 100644
index 1d15ad6..0000000
--- a/docs/html/guide/topics/ui/layout-objects.jd
+++ /dev/null
@@ -1,6 +0,0 @@
-page.title=Layouts
-parent.title=User Interface
-parent.link=index.html
-@jd:body
-
-<p>You should have been redirected to <a href="declaring-layout.html">Layouts</a>.</p> \ No newline at end of file
diff --git a/docs/html/guide/topics/ui/layout/gridview.jd b/docs/html/guide/topics/ui/layout/gridview.jd
index 84c3dab..bc189c4 100644
--- a/docs/html/guide/topics/ui/layout/gridview.jd
+++ b/docs/html/guide/topics/ui/layout/gridview.jd
@@ -1,6 +1,5 @@
page.title=Grid View
-parent.title=Layouts
-parent.link=layout-objects.html
+page.tags="gridview"
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/guide/topics/ui/layout/linear.jd b/docs/html/guide/topics/ui/layout/linear.jd
index 8e33706..444dc71 100644
--- a/docs/html/guide/topics/ui/layout/linear.jd
+++ b/docs/html/guide/topics/ui/layout/linear.jd
@@ -1,6 +1,5 @@
page.title=Linear Layout
-parent.title=Layouts
-parent.link=layout-objects.html
+page.tags="linearlayout"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/layout/listview.jd b/docs/html/guide/topics/ui/layout/listview.jd
index fee5292..6cdd725 100644
--- a/docs/html/guide/topics/ui/layout/listview.jd
+++ b/docs/html/guide/topics/ui/layout/listview.jd
@@ -1,6 +1,5 @@
page.title=List View
-parent.title=Layouts
-parent.link=declaring-layout.html
+page.tags="listview"
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/guide/topics/ui/layout/relative.jd b/docs/html/guide/topics/ui/layout/relative.jd
index 47f9417..65c5617 100644
--- a/docs/html/guide/topics/ui/layout/relative.jd
+++ b/docs/html/guide/topics/ui/layout/relative.jd
@@ -1,6 +1,5 @@
page.title=Relative Layout
-parent.title=Layouts
-parent.link=layout-objects.html
+page.tags="relativelayout"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index 01d373e..dfcea52 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -834,7 +834,7 @@ android.view.Menu#setGroupCheckable(int,boolean,boolean) setGroupCheckable()}</l
</ul>
<p>You can create a group by nesting {@code &lt;item&gt;} elements inside a {@code &lt;group&gt;}
-element in your menu resource or by specifying a group ID with the the {@link
+element in your menu resource or by specifying a group ID with the {@link
android.view.Menu#add(int,int,int,int) add()} method.</p>
<p>Here's an example menu resource that includes a group:</p>
diff --git a/docs/html/guide/topics/ui/notifiers/index.jd b/docs/html/guide/topics/ui/notifiers/index.jd
deleted file mode 100644
index caf0df7..0000000
--- a/docs/html/guide/topics/ui/notifiers/index.jd
+++ /dev/null
@@ -1,92 +0,0 @@
-page.title=Notifications
-parent.title=User Interface
-parent.link=../index.html
-@jd:body
-
-<p>Several types of situations may arise that require you to notify the user
-about an event that occurs in your application. Some events require the user to respond
-and others do not. For example:</p>
-<ul>
- <li>When an event such as saving a file is complete, a small message
-should appear to confirm that the save was successful.</li>
- <li>If the application is running in the background and needs the user's attention,
-the application should create a notification that allows the user to respond at
-his or her convenience.</li>
- <li>If the application is
-performing work that the user must wait for (such as loading a file),
-the application should show a hovering progress wheel or bar.</li>
-</ul>
-
-<p>Each of these notification tasks can be achieved using a different technique:</p>
-<ul>
- <li>A <a href="#Toast">Toast Notification</a>, for brief messages that come
- from the background.</li>
- <li>A <a href="#StatusBar">Status Notification</a>, for persistent reminders
- that come from the background and request the user's response.</li>
- <li>A <a href="#Dialog">Dialog Notification</a>, for Activity-related notifications.</li>
-</ul>
-
-<p>This document summarizes each of these techniques for notifying the user and includes
-links to full documentation.</p>
-
-
-<h2 id="Toast">Toast Notification</h2>
-
-<img src="{@docRoot}images/toast.png" alt="" style="float:right" />
-
-<p>A toast notification is a message that pops up on the surface of the window.
-It only fills the amount of space required for the message and the user's current
-activity remains visible and interactive. The notification automatically fades in and
-out, and does not accept interaction events. Because a toast can be created from a background
-{@link android.app.Service}, it appears even if the application isn't visible.</p>
-
-<p>A toast is best for short text messages, such as "File saved,"
-when you're fairly certain the user is paying attention
-to the screen. A toast can not accept user interaction events; if you'd like
-the user to respond and take action, consider using a
-<a href="#StatusBar">Status Notification</a> instead.</p>
-
-<p>For more information, refer to <a href="toasts.html">Toast Notifications</a>.</p>
-
-
-<h2 id="StatusBar">Status Notification</h2>
-
-<img src="{@docRoot}images/notifications_window.png" alt="" style="float:right; clear:right;" />
-
-<p>A status notification adds an icon to the system's status bar
-(with an optional ticker-text message) and an expanded message in the "Notifications" window.
-When the user selects the expanded message, Android fires an
-{@link android.content.Intent} that is defined by the notification (usually to launch an
-{@link android.app.Activity}).
-You can also configure the notification to alert the user with a sound, a vibration, and flashing
-lights on the device.</p>
-
-<p>This kind of notification is ideal when your application is working in
-a background {@link android.app.Service} and needs to
-notify the user about an event. If you need to alert the user about an event that occurs
-while your Activity is still in focus, consider using a
-<a href="#Dialog">Dialog Notification</a> instead.</p>
-
-<p>For more information, refer to
-<a href="notifications.html">Status Notifications</a>.</p>
-
-
-<h2 id="Dialog">Dialog Notification</h2>
-
-<img src="{@docRoot}images/dialog_progress_spinning.png" alt="" style="float:right" />
-
-<p>A dialog is usually a small window that appears in front of the current Activity.
-The underlying Activity loses focus and the dialog accepts all user interaction.
-Dialogs are normally used
-for notifications and short activities that directly relate to the application in progress.</p>
-
-<p>You should use a dialog when you need to show a progress bar or a short
-message that requires confirmation from the user (such as an alert with "OK" and "Cancel" buttons).
-You can use also use dialogs as integral components
-in your application's UI and for other purposes besides notifications.
-For a complete discussion on all the available types of dialogs,
-including its uses for notifications, refer to
-<a href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a>.</p>
-
-
-
diff --git a/docs/html/guide/topics/ui/notifiers/toasts.jd b/docs/html/guide/topics/ui/notifiers/toasts.jd
index 92c146a..e5d4a0a 100644
--- a/docs/html/guide/topics/ui/notifiers/toasts.jd
+++ b/docs/html/guide/topics/ui/notifiers/toasts.jd
@@ -105,7 +105,7 @@ with the following XML (saved as <em>toast_layout.xml</em>):</p>
&lt;/LinearLayout>
</pre>
-<p>Notice that the ID of the LinearLayout element is "toast_layout". You must use this
+<p>Notice that the ID of the LinearLayout element is "toast_layout_root". You must use this
ID to inflate the layout from the XML, as shown here:</p>
<pre>
diff --git a/docs/html/guide/topics/ui/settings.jd b/docs/html/guide/topics/ui/settings.jd
index 33e164b..d96447d 100644
--- a/docs/html/guide/topics/ui/settings.jd
+++ b/docs/html/guide/topics/ui/settings.jd
@@ -1,4 +1,6 @@
page.title=Settings
+page.tags="preference","preferenceactivity","preferencefragment"
+
@jd:body
diff --git a/docs/html/images/example-bad.png b/docs/html/images/example-bad.png
new file mode 100644
index 0000000..b19a9f7
--- /dev/null
+++ b/docs/html/images/example-bad.png
Binary files differ
diff --git a/docs/html/images/example-good.png b/docs/html/images/example-good.png
new file mode 100644
index 0000000..6bd2408
--- /dev/null
+++ b/docs/html/images/example-good.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-eula-violation.png b/docs/html/images/gp-policy-ads-eula-violation.png
new file mode 100644
index 0000000..e8ffa5b
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-eula-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-eula.png b/docs/html/images/gp-policy-ads-eula.png
new file mode 100644
index 0000000..68a6b95
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-eula.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-impersonate-violation.png b/docs/html/images/gp-policy-ads-impersonate-violation.png
new file mode 100644
index 0000000..385ae6e
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-impersonate-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-maturity-violation.png b/docs/html/images/gp-policy-ads-maturity-violation.png
new file mode 100644
index 0000000..d41870e
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-maturity-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-notif-attr-violation.png b/docs/html/images/gp-policy-ads-notif-attr-violation.png
new file mode 100644
index 0000000..af53f10
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-notif-attr-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-notif-attr.png b/docs/html/images/gp-policy-ads-notif-attr.png
new file mode 100644
index 0000000..4934d21
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-notif-attr.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-paywall-violation.png b/docs/html/images/gp-policy-ads-paywall-violation.png
new file mode 100644
index 0000000..8bbfd1b
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-paywall-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-paywall.png b/docs/html/images/gp-policy-ads-paywall.png
new file mode 100644
index 0000000..e7b1e19
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-paywall.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-terms.png b/docs/html/images/gp-policy-ads-terms.png
new file mode 100644
index 0000000..dcbdf4a
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-terms.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ip-copyright-violation.png b/docs/html/images/gp-policy-ip-copyright-violation.png
new file mode 100644
index 0000000..a4e96a8
--- /dev/null
+++ b/docs/html/images/gp-policy-ip-copyright-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ip-impersonation-violation.png b/docs/html/images/gp-policy-ip-impersonation-violation.png
new file mode 100644
index 0000000..b1d9923
--- /dev/null
+++ b/docs/html/images/gp-policy-ip-impersonation-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ip-trademark-violation.png b/docs/html/images/gp-policy-ip-trademark-violation.png
new file mode 100644
index 0000000..c05b67b
--- /dev/null
+++ b/docs/html/images/gp-policy-ip-trademark-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-spam-negreview.png b/docs/html/images/gp-policy-spam-negreview.png
new file mode 100644
index 0000000..f68eba3
--- /dev/null
+++ b/docs/html/images/gp-policy-spam-negreview.png
Binary files differ
diff --git a/docs/html/images/gp-policy-spam-reqrating.png b/docs/html/images/gp-policy-spam-reqrating.png
new file mode 100644
index 0000000..aaf9e53
--- /dev/null
+++ b/docs/html/images/gp-policy-spam-reqrating.png
Binary files differ
diff --git a/docs/html/sdk/1.0_r1/index.jd b/docs/html/sdk/1.0_r1/index.jd
index b380483..dea6620 100644
--- a/docs/html/sdk/1.0_r1/index.jd
+++ b/docs/html/sdk/1.0_r1/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.0 SDK, release 1
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.0_r1/upgrading.jd b/docs/html/sdk/1.0_r1/upgrading.jd
index d6d5dc4..d6a7ed5 100644
--- a/docs/html/sdk/1.0_r1/upgrading.jd
+++ b/docs/html/sdk/1.0_r1/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.0_r1
+excludeFromSuggestions=true
@jd:body
<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
diff --git a/docs/html/sdk/1.0_r2/index.jd b/docs/html/sdk/1.0_r2/index.jd
index c29c148..8556e3c 100644
--- a/docs/html/sdk/1.0_r2/index.jd
+++ b/docs/html/sdk/1.0_r2/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.0 SDK, release 2
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.0_r2/upgrading.jd b/docs/html/sdk/1.0_r2/upgrading.jd
index 409e30e..243950d 100644
--- a/docs/html/sdk/1.0_r2/upgrading.jd
+++ b/docs/html/sdk/1.0_r2/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.0_r2
+excludeFromSuggestions=true
@jd:body
<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
diff --git a/docs/html/sdk/1.1_r1/index.jd b/docs/html/sdk/1.1_r1/index.jd
index 63fe51d..44231ee 100644
--- a/docs/html/sdk/1.1_r1/index.jd
+++ b/docs/html/sdk/1.1_r1/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.1 SDK, Release 1
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.1_r1/upgrading.jd b/docs/html/sdk/1.1_r1/upgrading.jd
index bc71149..840ae6b 100644
--- a/docs/html/sdk/1.1_r1/upgrading.jd
+++ b/docs/html/sdk/1.1_r1/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.1_r1
+excludeFromSuggestions=true
@jd:body
<!--
diff --git a/docs/html/sdk/1.5_r1/index.jd b/docs/html/sdk/1.5_r1/index.jd
index 60dfc14..7232f57 100644
--- a/docs/html/sdk/1.5_r1/index.jd
+++ b/docs/html/sdk/1.5_r1/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.5 SDK, Release 1
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.5_r1/upgrading.jd b/docs/html/sdk/1.5_r1/upgrading.jd
index 0a12d62..0377069 100644
--- a/docs/html/sdk/1.5_r1/upgrading.jd
+++ b/docs/html/sdk/1.5_r1/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.5_r1
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.5_r2/index.jd b/docs/html/sdk/1.5_r2/index.jd
index 4fb99b6..fac4f13 100644
--- a/docs/html/sdk/1.5_r2/index.jd
+++ b/docs/html/sdk/1.5_r2/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.5 SDK, Release 2
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.5_r2/upgrading.jd b/docs/html/sdk/1.5_r2/upgrading.jd
index bb5fc60..31b2358 100644
--- a/docs/html/sdk/1.5_r2/upgrading.jd
+++ b/docs/html/sdk/1.5_r2/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.5_r2
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.5_r3/index.jd b/docs/html/sdk/1.5_r3/index.jd
index eb10f5e..e8cfaa1 100644
--- a/docs/html/sdk/1.5_r3/index.jd
+++ b/docs/html/sdk/1.5_r3/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.5 SDK, Release 3
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.5_r3/upgrading.jd b/docs/html/sdk/1.5_r3/upgrading.jd
index 18c1314..62b9a78 100644
--- a/docs/html/sdk/1.5_r3/upgrading.jd
+++ b/docs/html/sdk/1.5_r3/upgrading.jd
@@ -1,6 +1,7 @@
page.title=Upgrading the SDK
sdk.version=1.5
sdk.rel.id=3
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.6_r1/index.jd b/docs/html/sdk/1.6_r1/index.jd
index e7f9112..671d1cd 100644
--- a/docs/html/sdk/1.6_r1/index.jd
+++ b/docs/html/sdk/1.6_r1/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.6 SDK, Release 1
sdk.redirect=true
sdk.redirect.path=index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/1.6_r1/upgrading.jd b/docs/html/sdk/1.6_r1/upgrading.jd
index 49535c9..e6dded0 100644
--- a/docs/html/sdk/1.6_r1/upgrading.jd
+++ b/docs/html/sdk/1.6_r1/upgrading.jd
@@ -1,5 +1,6 @@
page.title=Upgrading the SDK
sdk.version=1.6
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/sdk/OLD_RELEASENOTES.jd b/docs/html/sdk/OLD_RELEASENOTES.jd
index 6865db2..b7fd12f 100644
--- a/docs/html/sdk/OLD_RELEASENOTES.jd
+++ b/docs/html/sdk/OLD_RELEASENOTES.jd
@@ -1,4 +1,5 @@
page.title=Release Notes for Older SDK Versions
+excludeFromSuggestions=true
@jd:body
<div class="special">
diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd
index c7ece42..cbcbb12 100644
--- a/docs/html/sdk/RELEASENOTES.jd
+++ b/docs/html/sdk/RELEASENOTES.jd
@@ -1,4 +1,5 @@
page.title=SDK Release Notes
+excludeFromSuggestions=true
@jd:body
<p>This document provides version-specific information about Android SDK
diff --git a/docs/html/sdk/download.jd b/docs/html/sdk/download.jd
index 8005009..4329102 100644
--- a/docs/html/sdk/download.jd
+++ b/docs/html/sdk/download.jd
@@ -1,4 +1,5 @@
page.title=Download an Archived Android SDK
+excludeFromSuggestions=true
hide_license_footer=true
@jd:body
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 315c977..e1d7557 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,4 +1,5 @@
page.title=Android SDK
+page.tags="download"
page.template=sdk
header.hide=1
page.metaDescription=Download the official Android SDK to develop apps for Android-powered devices.
diff --git a/docs/html/sdk/installing/next.jd b/docs/html/sdk/installing/next.jd
deleted file mode 100644
index cb974a4..0000000
--- a/docs/html/sdk/installing/next.jd
+++ /dev/null
@@ -1,51 +0,0 @@
-page.title=Next Steps
-
-@jd:body
-
-
-<p>Now that you've installed the Android SDK, here are are a few ways to learn Android
-and start developing: </p>
-
-<h3>Start coding</h3>
-<ul>
- <li>Follow the training class for <a
-href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>.
- <p>This class is an essential first step for new Android developers.</p>
- <p>It gives you step by step instructions for building a simple app. You’ll learn how to
-create an Android project and run a debuggable version of the app. You'll also learn some
-fundamentals of Android app design, including how to build a simple user interface and handle user
-input.</p>
-</li>
-</ul>
-
-
-<h3>Learn how to design your app</h3>
-<ul>
- <li>Learn the best practices for Android design and user experience by reading the Android <a
-href="{@docRoot}design/index.html">Design</a> guidelines.</li>
-</ul>
-
-
-<h3>Read up on the API framework</h3>
-<ul>
- <li>Start reading about fundamental framework topics in the collection of <a
-href="{@docRoot}guide/components/index.html">API Guides</a>.</li>
- <li>Browse the API specifications in the <a
- href="{@docRoot}reference/packages.html">Reference</a>.</li>
-</ul>
-
-
-<h3>Explore the development tools</h3>
-<ul>
- <li>Learn about developing an app with the Android Developer Tools plugin for Eclipse
- and other tools from the <a
- href="{@docRoot}tools/workflow/index.html">Workflow</a>.</li>
-</ul>
-
-
-<h3>Explore some code</h3>
-
-<ul>
- <li>Browse the sample apps available from the Android SDK Manager. You'll find them in
-<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform-version&gt;/</em></code>. </li>
-</ul>
diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd
index bb274b6..94baa92 100644
--- a/docs/html/sdk/older_releases.jd
+++ b/docs/html/sdk/older_releases.jd
@@ -1,4 +1,5 @@
page.title=SDK Archives
+excludeFromSuggestions=true
@jd:body
<p>This page provides a full list of archived and obsolete SDK releases,
diff --git a/docs/html/support.jd b/docs/html/support.jd
index 89acd5d..86427b4 100644
--- a/docs/html/support.jd
+++ b/docs/html/support.jd
@@ -46,7 +46,7 @@ uppercase;border-bottom: 1px solid #CCC;margin: 0 0 20px;">Google Play Support</
<h5 id="contact">Direct support contacts for developers</h5>
<p style="color:#888">
- <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=dev_registration">Registration, account issues</a><br />
+ <a href=" https://support.google.com/googleplay/android-developer/troubleshooter/3049653">Registration, account issues</a><br />
<a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=publishing">Publishing, app distribution issues</a><br />
<a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=bugs">Developer Console issues</a><br />
<a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=takedown">Inappropriate apps</a><br />
diff --git a/docs/html/tools/debugging/ddms.jd b/docs/html/tools/debugging/ddms.jd
index 3d6324b..f641aad 100644
--- a/docs/html/tools/debugging/ddms.jd
+++ b/docs/html/tools/debugging/ddms.jd
@@ -54,7 +54,7 @@ parent.link=index.html
<p>When DDMS starts, it connects to <a href="{@docRoot}tools/help/adb.html">adb</a>.
When a device is connected, a VM monitoring service is created between
<code>adb</code> and DDMS, which notifies DDMS when a VM on the device is started or terminated. Once a VM
- is running, DDMS retrieves the the VM's process ID (pid), via <code>adb</code>, and opens a connection to the
+ is running, DDMS retrieves the VM's process ID (pid), via <code>adb</code>, and opens a connection to the
VM's debugger, through the adb daemon (adbd) on the device. DDMS can now talk to the VM using a
custom wire protocol.</p>
diff --git a/docs/html/tools/debugging/debugging-ui.jd b/docs/html/tools/debugging/debugging-ui.jd
index 8ca5192..f927d08 100644
--- a/docs/html/tools/debugging/debugging-ui.jd
+++ b/docs/html/tools/debugging/debugging-ui.jd
@@ -60,7 +60,9 @@ Sometimes your application's layout can slow down your application.
<p>The Hierarchy Viewer application allows you to debug and optimize your user interface. It
provides a visual representation of the layout's View hierarchy (the View Hierarchy window)
- and a magnified view of the display (the Pixel Perfect window).</p>
+ with performance information for each node in the layout,
+ and a magnified view of the display (the Pixel Perfect window) to closely examine the pixels
+ in your layout.</p>
<p>Android <code>lint</code> is a static code scanning tool that helps you optimize the layouts and layout
hierarchies of your applications, as well as detect other common coding problems. You can run it against your layout files or resource
diff --git a/docs/html/tools/device.jd b/docs/html/tools/device.jd
index 9bdaf47..c7827b2 100644
--- a/docs/html/tools/device.jd
+++ b/docs/html/tools/device.jd
@@ -30,7 +30,7 @@ device directly from Eclipse or from the command line with ADB. If
you don't yet have a device, check with the service providers in your area to determine which
Android-powered devices are available.</p>
-<p>If you want a SIM-unlocked phone, then you might consider the Google Nexus S. To find a place
+<p>If you want a SIM-unlocked phone, then you might consider a Nexus phone. To find a place
to purchase the Nexus S and other Android-powered devices, visit <a
href="http://www.google.com/phone/detail/nexus-s">google.com/phone</a>.</p>
diff --git a/docs/html/tools/devices/emulator.jd b/docs/html/tools/devices/emulator.jd
index bae3985..fda233d 100644
--- a/docs/html/tools/devices/emulator.jd
+++ b/docs/html/tools/devices/emulator.jd
@@ -898,7 +898,7 @@ to a specified guest port on the router, while the router directs traffic
to/from that port to the emulated device's host port. </p>
<p>To set up the network redirection, you create a mapping of host and guest
-ports/addresses on the the emulator instance. There are two ways to set up
+ports/addresses on the emulator instance. There are two ways to set up
network redirection: using emulator console commands and using the ADB tool, as
described below. </p>
diff --git a/docs/html/tools/extras/oem-usb.jd b/docs/html/tools/extras/oem-usb.jd
index 774fe87..87734a1 100644
--- a/docs/html/tools/extras/oem-usb.jd
+++ b/docs/html/tools/extras/oem-usb.jd
@@ -306,6 +306,10 @@ href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.mot
<tr><td>MTK</td> <td><a
href="http://online.mediatek.com/Public%20Documents/MTK_Android_USB_Driver.zip">http://online.mediatek.com/Public%20Documents/MTK_Android_USB_Driver.zip</a></td>
</tr>
+<tr><td>Oppo</td> <td><a
+href="http://www.oppo.com/index.php?q=software/view&sw_id=631"
+>http://www.oppo.com/index.php?q=software/view&sw_id=631</a></td>
+</tr>
<tr><td>Pantech</td> <td><a
href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/software/software.sky?fromUrl=index</a></td>
</tr><tr><td>Pegatron</td> <td><a
@@ -327,6 +331,9 @@ href="http://www.teleepoch.com/android.html">http://www.teleepoch.com/android.ht
href="http://www.yulong.com/product/product/product/downloadList.html#downListUL">http://www.yulong.com/product/product/product/downloadList.html#downListUL</a></td>
</tr>
+<tr><td>Xiaomi</td> <td><a
+href="http://www.xiaomi.com/c/driver/index.html">http://www.xiaomi.com/c/driver/index.html</a></td>
+</tr>
<tr>
<td>ZTE</td> <td><a
href="http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442">http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442</a></td></tr>
diff --git a/docs/html/tools/help/index.jd b/docs/html/tools/help/index.jd
index 0f94395..bed14d1 100644
--- a/docs/html/tools/help/index.jd
+++ b/docs/html/tools/help/index.jd
@@ -1,4 +1,4 @@
-page.title=Tools
+page.title=Tools Help
@jd:body
diff --git a/docs/html/tools/projects/index.jd b/docs/html/tools/projects/index.jd
index 6a49ac9..439d3be 100644
--- a/docs/html/tools/projects/index.jd
+++ b/docs/html/tools/projects/index.jd
@@ -68,12 +68,12 @@ page.title=Managing Projects
<code>src<em>/your/package/namespace/ActivityName</em>.java</code>. All other source code
files (such as <code>.java</code> or <code>.aidl</code> files) go here as well.</dd>
- <dt><code>bin</code></dt>
+ <dt><code>bin/</code></dt>
<dd>Output directory of the build. This is where you can find the final <code>.apk</code> file and other
compiled resources.</dd>
- <dt><code>jni</code></dt>
+ <dt><code>jni/</code></dt>
<dd>Contains native code sources developed using the Android NDK. For more information, see the
<a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK documentation</a>.</dd>
@@ -88,7 +88,7 @@ page.title=Managing Projects
<dd>This is empty. You can use it to store raw asset files. Files that you save here are
compiled into an <code>.apk</code> file as-is, and the original filename is preserved. You can navigate this
directory in the same way as a typical file system using URIs and read files as a stream of
- bytes using the the {@link android.content.res.AssetManager}. For example, this is a good
+ bytes using the {@link android.content.res.AssetManager}. For example, this is a good
location for textures and game data.</dd>
<dt><code>res/</code></dt>
@@ -114,7 +114,7 @@ page.title=Managing Projects
<dt><code>drawable/</code></dt>
<dd>For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe
- Drawable shapes or a Drawable objects that contain multiple states (normal, pressed, or
+ Drawable shapes or Drawable objects that contain multiple states (normal, pressed, or
focused). See the <a href=
"{@docRoot}guide/topics/resources/drawable-resource.html">Drawable</a> resource type.</dd>
@@ -251,7 +251,7 @@ used.</dd>
code and resources as a standard Android project, stored in the same way. For example, source
code in the library project can access its own resources through its <code>R</code> class.</p>
- <p>However, a library project differs from an standard Android application project in that you
+ <p>However, a library project differs from a standard Android application project in that you
cannot compile it directly to its own <code>.apk</code> and run it on an Android device.
Similarly, you cannot export the library project to a self-contained JAR file, as you would do
for a true library. Instead, you must compile the library indirectly, by referencing the
diff --git a/docs/html/tools/sdk/OLD_RELEASENOTES.jd b/docs/html/tools/sdk/OLD_RELEASENOTES.jd
index 6865db2..b7fd12f 100644
--- a/docs/html/tools/sdk/OLD_RELEASENOTES.jd
+++ b/docs/html/tools/sdk/OLD_RELEASENOTES.jd
@@ -1,4 +1,5 @@
page.title=Release Notes for Older SDK Versions
+excludeFromSuggestions=true
@jd:body
<div class="special">
diff --git a/docs/html/tools/sdk/RELEASENOTES.jd b/docs/html/tools/sdk/RELEASENOTES.jd
index c7ece42..cbcbb12 100644
--- a/docs/html/tools/sdk/RELEASENOTES.jd
+++ b/docs/html/tools/sdk/RELEASENOTES.jd
@@ -1,4 +1,5 @@
page.title=SDK Release Notes
+excludeFromSuggestions=true
@jd:body
<p>This document provides version-specific information about Android SDK
diff --git a/docs/html/tools/sdk/addons.jd b/docs/html/tools/sdk/addons.jd
deleted file mode 100644
index 8c5e1ed..0000000
--- a/docs/html/tools/sdk/addons.jd
+++ /dev/null
@@ -1,9 +0,0 @@
-page.title=SDK Add-Ons
-
-@jd:body
-
-
-
-<p>A page that lists SDK addons and links to release notes. Links to dashboards etc.</p>
-
-
diff --git a/docs/html/tools/sdk/adt-notes.jd b/docs/html/tools/sdk/adt-notes.jd
deleted file mode 100644
index 291b543..0000000
--- a/docs/html/tools/sdk/adt-notes.jd
+++ /dev/null
@@ -1,5 +0,0 @@
-page.title=ADT Plugin for Eclipse
-sdk.redirect=true
-sdk.redirect.path=eclipse-adt.html
-
-@jd:body
diff --git a/docs/html/tools/sdk/adt_download.html b/docs/html/tools/sdk/adt_download.html
deleted file mode 100644
index 5ba2ef5..0000000
--- a/docs/html/tools/sdk/adt_download.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/sdk/eclipse-adt.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/sdk/eclipse-adt.html">click here</a>.</p>
-</body>
-</html> \ No newline at end of file
diff --git a/docs/html/tools/sdk/download.jd b/docs/html/tools/sdk/download.jd
deleted file mode 100644
index af25609..0000000
--- a/docs/html/tools/sdk/download.jd
+++ /dev/null
@@ -1,93 +0,0 @@
-page.title=Download an Archived Android SDK
-hide_license_footer=true
-
-@jd:body
-
-<script type="text/javascript">
- function verify() {
- document.getElementById('download-button').disabled =
-!document.getElementById('checkbox').checked;
- }
- function submit() {
- var location = window.location.href;
- if (location.indexOf('?v=') != -1) {
- var filename = location.substring(location.indexOf('=')+1,location.length);
- if (document.getElementById('checkbox').checked) {
- document.location = "http://dl.google.com/android/" + filename;
- }
- document.getElementById('click-download').setAttribute("href", "http://dl.google.com/android/"
-+ filename);
- $("#terms-form").hide(500);
- $("#next-steps").show(500);
- document.getElementById('checkbox').disabled=true;
- document.getElementById('download-button').disabled=true;
- } else {
- alert("You have not selected an SDK version. Please return to the SDK Archives page");
- }
- }
-</script>
-
-<div id="terms-form">
- <p>Please carefully review the Android SDK License Agreement before downloading the SDK.
-The License Agreement constitutes a contract between you and Google with respect to your use of the
-SDK.</p>
- <p class="note"><strong>Note:</strong> You must agree to this license agreement in order to
-download one of the archived SDKs, because these SDK packages contain Google software (whereas, the
-<a href="http://developer.android.com/sdk/index.html">current SDK</a> packages do not require a
-license agreement, because they contain only the open sourced SDK tools).</p>
-
- <iframe id="terms" style="border:1px solid #888;margin:0 0 1em;height:400px;width:95%;"
-src="terms_body.html">
- </iframe>
-
- <p>
- <input type="checkbox" id="checkbox" onclick="verify()" />
- <label for="checkbox">I agree to the terms of the Android SDK License Agreement.</label>
- </p>
- <p>
- <input type="submit" value="Download" id="download-button" disabled="disabled"
-onclick="submit()" />
- </p>
- <p>
- <script language="javascript">
- var loc = window.location.href;
- if (loc.indexOf('?v=') != -1) {
- var filename = loc.substring(loc.indexOf('=')+1,loc.length).replace(/</g,"&lt;").replace(/>/g,"&gt;");
- document.write("File: " + filename);
- }
- </script>
- </p>
-</div><!-- end terms-form -->
-
-<noscript>
- <p><strong>Please enable Javascript in your browser in order to agree to the terms and download
-the SDK.</strong></p>
-</noscript>
-
-<div class="special" id="next-steps" style="display:none">
- <p>Your download should be underway. If not, <a id="click-download">click here to start the
-download</a>.</p>
- <p>Beware that you've just downloaded a very old version of the Android SDK, which is not
-recommended. We no longer maintain documentation about how to install these archived SDKs nor
-support the tools contained within.</p>
- <p>We recommend that you instead download the latest <a
-href="http://developer.android.com/sdk/index.html">Android SDK starter package</a>, which includes
-the latest SDK tools and allows you to develop against any version of the Android platform, back to
-Android 1.1.</p>
-</div>
-
-<script type="text/javascript">
- var loc = window.location.href;
- var filename = loc.substring(loc.indexOf('=')+1,loc.length);
- version = filename.substring(filename.indexOf('.')-1,filename.lastIndexOf('.'));
- $(".addVersionPath").each(function(i) {
- var oldHref = $(this).attr("href");
- $(this).attr({href: "/sdk/" + version + "/" + oldHref});
- });
-</script>
-
-
-
-
-
-
diff --git a/docs/html/tools/sdk/libraries.jd b/docs/html/tools/sdk/libraries.jd
deleted file mode 100644
index 9e47c4a..0000000
--- a/docs/html/tools/sdk/libraries.jd
+++ /dev/null
@@ -1,9 +0,0 @@
-page.title=Libraries
-
-@jd:body
-
-
-
-<p>A page that lists libraries and links to release notes. Links to dashboards etc.</p>
-
-
diff --git a/docs/html/tools/sdk/ndk/1.5_r1/index.jd b/docs/html/tools/sdk/ndk/1.5_r1/index.jd
index 4c70a8a..2f6764b 100644
--- a/docs/html/tools/sdk/ndk/1.5_r1/index.jd
+++ b/docs/html/tools/sdk/ndk/1.5_r1/index.jd
@@ -1,6 +1,7 @@
page.title=Android 1.5 NDK, Release 1
sdk.redirect=true
sdk.redirect.path=ndk/index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/tools/sdk/ndk/1.6_r1/index.jd b/docs/html/tools/sdk/ndk/1.6_r1/index.jd
index 090dcdc..1dc5b6f 100644
--- a/docs/html/tools/sdk/ndk/1.6_r1/index.jd
+++ b/docs/html/tools/sdk/ndk/1.6_r1/index.jd
@@ -1,5 +1,6 @@
page.title=Android 1.6 NDK, Release 1
sdk.redirect=true
sdk.redirect.path=ndk/index.html
+excludeFromSuggestions=true
@jd:body
diff --git a/docs/html/tools/sdk/ndk/overview.jd b/docs/html/tools/sdk/ndk/overview.jd
deleted file mode 100644
index 98ef1fc..0000000
--- a/docs/html/tools/sdk/ndk/overview.jd
+++ /dev/null
@@ -1,588 +0,0 @@
-page.title=What is the NDK?
-@jd:body
-
- <div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
-
- <ol>
- <li><a href="#choosing">When to Develop in Native Code</a></li>
- <li>
- <a href="#contents">Contents of the NDK</a>
- <ol>
- <li><a href="#tools">Development tools</a></li>
-
- <li><a href="#docs">Documentation</a></li>
-
- <li><a href="#samples">Sample applications</a></li>
- </ol>
- </li>
- <li><a href="#reqs">System and Software Requirements</a></li>
- </ol>
- </div>
- </div>
-
- <p>The Android NDK is a toolset that lets you embed components that make use of native code in
- your Android applications.</p>
-
- <p>Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts
- of your applications using native-code languages such as C and C++. This can provide benefits to
- certain classes of applications, in the form of reuse of existing code and in some cases
- increased speed.</p>
-
- <p>The NDK provides:</p>
-
- <ul>
- <li>A set of tools and build files used to generate native code libraries from C and C++
- sources</li>
-
- <li>A way to embed the corresponding native libraries into an application package file
- (<code>.apk</code>) that can be deployed on Android devices</li>
-
- <li>A set of native system headers and libraries that will be supported in all future versions
- of the Android platform, starting from Android 1.5. Applications that use native activities
- must be run on Android 2.3 or later.</li>
-
- <li>Documentation, samples, and tutorials</li>
- </ul>
-
- <p>The latest release of the NDK supports the following instruction sets:</p>
-
- <ul>
- <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
-information)</li>
-
- <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
- NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>
-
- <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>
-
- <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
- </ul>
-
- <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
- devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
- difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
- NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
- default, but switching to ARMv7-A is as easy as adding a single line to the application's
- <code>Application.mk</code> file, without needing to change anything else in the file. You can also build for
- both architectures at the same time and have everything stored in the final <code>.apk</code>.
- Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>
-
- <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
- (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
- "#tools">Development Tools</a> section.</p>
-
- <h2 id="choosing">When to Develop in Native Code</h2>
-
- <p>The NDK will not benefit most applications. As a developer, you need to balance its benefits
- against its drawbacks; notably, using native code does not result in an automatic performance
- increase, but always increases application complexity. In general, you should only use native
- code if it is essential to your application, not just because you prefer to program in C/C++.</p>
-
- <p>Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't
- allocate much memory, such as signal processing, physics simulation, and so on. Simply re-coding
- a method to run in C usually does not result in a large performance increase. When examining
- whether or not you should develop in native code, think about your requirements and see if the
- Android framework APIs provide the functionality that you need. The NDK can, however, can be an
- effective way to reuse a large corpus of existing C/C++ code.</p>
-
- <p>The Android framework provides two ways to use native code:</p>
-
- <ul>
- <li>Write your application using the Android framework and use JNI to access the APIs provided
- by the Android NDK. This technique allows you to take advantage of the convenience of the
- Android framework, but still allows you to write native code when necessary. If you use this
- approach, your application must target specific, minimum Android platform levels, see <a
- href="#platform-compat">Android platform compatibility</a> for more information.</li>
-
- <li>
- <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
- code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
- convenience class that notifies your
- native code of any activity lifecycle callbacks (<code>onCreate()</code>, <code>onPause()</code>,
- <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
- these events when they occur. Applications that use native activities must be run on Android
- 2.3 (API Level 9) or later.</p>
-
- <p>You cannot access features such as Services and Content Providers natively, so if you want
- to use them or any other framework API, you can still write JNI code to do so.</p>
- </li>
- </ul>
-
- <h2 id="contents">Contents of the NDK</h2>The NDK contains the APIs, documentation, and sample
- applications that help you write your native code.
-
- <h3 id="tools">Development tools</h3>
-
- <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that can generate
- native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>
-
- <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
- in all later releases of the platform:</p>
-
- <ul>
- <li>libc (C library) headers</li>
-
- <li>libm (math library) headers</li>
-
- <li>JNI interface headers</li>
-
- <li>libz (Zlib compression) headers</li>
-
- <li>liblog (Android logging) header</li>
-
- <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>
-
- <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>
-
- <li>A Minimal set of headers for C++ support</li>
-
- <li>OpenSL ES native audio libraries</li>
-
- <li>Android native application APIS</li>
- </ul>
-
- <p>The NDK also provides a build system that lets you work efficiently with your sources, without
- having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
- describe which sources to compile and which Android application will use them &mdash; the build
- system compiles the sources and places the shared libraries directly in your application
- project.</p>
-
- <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
- native system libraries in the Android platform are <em>not</em> stable and may change in future
- platform versions. Your applications should <em>only</em> make use of the stable native system
- libraries provided in this NDK.</p>
-
- <h3 id="docs">Documentation</h3>
-
- <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
- how to use it to create shared libraries for your Android applications. In this release, the
- documentation is provided only in the downloadable NDK package. You can find the documentation in
- the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>
-
- <ul>
- <li>
- INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
- system</li>
-
- <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>
-
- <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
- sources you want to compile</li>
-
- <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
- the native sources required by your Android application</li>
- <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>
- <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
- them.</li>
-
- <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
- lets your application code detect the target device's CPU family and the optional features at
- runtime.</li>
-
- <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>
-
- <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for it</li>
-
- <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>
-
- <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>
-
- <li>LICENSES.HTML &mdash; information about the various open source licenses that govern the Android NDK</li>
-
- <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>
-
- <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>
-
- <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>
-
- <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>
-
- <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
- compiler (still in beta).</li>
-
- <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
- aware of, if you are developing using the NDK.</li>
-
- <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
- NDK.</li>
-
- </ul>
-
- <p>Additionally, the package includes detailed information about the "bionic" C library provided
- with the Android platform that you should be aware of, if you are developing using the NDK. You
- can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
-
- <ul>
- <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
- offers.</li>
- </ul>
-
- <h3 id="samples">Sample applications</h3>
-
-<p>The NDK includes sample applications that illustrate how to use native code in your Android
- applications:</p>
-
- <ul>
- <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
- method implemented in a shared library and then displays it in the application UI.</li>
-
- <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
- and calls a native method provided by the library. In this case, the method is implemented in a
- static library imported by the shared library.</li>
-
- <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
- native OpenGL ES APIs, while managing activity lifecycle with a {@link
- android.opengl.GLSurfaceView} object.</li>
-
- <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
- 2.0 vertex and fragment shaders.</li>
-
- <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
- <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
- if supported by the CPU. Specifically, the application implements two versions of a tiny
- benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
- support it.</li>
-
- <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
- pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
- this to generate an old-school "plasma" effect.</li>
-
- <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
- native-app-glue static library to create a native activity</li>
-
- <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
- activity.</li>
- </ul>
-
- <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
- and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
- and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>
-
- <p>You can build the shared libraries for the sample apps by going into
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
- The generated shared libraries will be located under
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>
-
- <p>Next, build the sample Android applications that use the shared libraries:</p>
-
- <ul>
- <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
- Android project for each sample, using the "Import from Existing Source" option and importing
- the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
- if necessary, and build/run the application in the emulator.</li>
-
- <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
- for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
- Then set up an AVD, if necessary, build your project in the usual way, and run it in the
- emulator.</li>
-
- </ul>
-
- <p>For more information about developing with the Android SDK tools and what
- you need to do to create, build, and run your applications, see
- the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
- section for developing on Android.</p>
-
- <h4 id="hello-jni">Exploring the hello-jni Sample</h4>
-
- <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
- The HelloJni activity receives a string from a simple C function and displays it in a
- TextView.</p>
-
- <p>The main components of the sample include:</p>
-
- <ul>
- <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
- file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>
-
- <li>A <code>jni/</code> directory that includes the implemented source file for the native code
- as well as the Android.mk file</li>
-
- <li>A <code>tests/</code> directory that contains unit test code.</li>
- </ul>
-
- <ol>
- <li>Create a new project in Eclipse from the existing sample source or use the
- <code>android</code> tool to update the project so it generates a build.xml file that you can
- use to build the sample.
-
- <ul>
- <li>In Eclipse:
-
- <ol type="a">
- <li>Click <strong>File &gt; New Android Project...</strong></li>
-
- <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
- <li>Select any API level above Android 1.5.</li>
-
- <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
- the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
- <li>Click <strong>Finish</strong>.</li>
- </ol>
- </li>
-
- <li>On the command line:
-
- <ol type="a">
- <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
- <li>Run the following command to generate a build.xml file:
- <pre class="no-pretty-print">android update project -p . -s</pre>
- </li>
- </ol>
- </li>
- </ul>
- </li>
-
- <li>Compile the native code using the <code>ndk-build</code> command.
- <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/samples/hello-jni
-&lt;ndk_root&gt;/ndk-build
-</pre>
- </li>
-
- <li>Build and install the application as you would a normal Android application. If you are
- using Eclipse, run the application to build and install it on a device. If you are using Ant,
- run the following commands from the project directory:
- <pre class="no-pretty-print">
-ant debug
-adb install bin/HelloJni-debug.apk
-</pre>
- </li>
- </ol>
-
- <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
- your device. You can explore the rest of the samples that are located in the
- <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>
-
- <h4 id="native-activity">Exploring the native-activity Sample Application</h4>
-
- <p>The native-activity sample provided with the Android NDK demonstrates how to use the
- android_native_app_glue static library. This static library makes creating a native activity
- easier by providing you with an implementation that handles your callbacks in another thread, so
- you do not have to worry about them blocking your main UI thread. The main parts of the sample
- are described below:</p>
-
- <ul>
- <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
- file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
- that the application is native and specifies the .so file of the native activity. See {@link
- android.app.NativeActivity} for the source or see the
- <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>
-
- <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
- <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
- describes the native module to the build system also exists here.</li>
- </ul>
-
- <p>To build this sample application:</p>
-
- <ol>
- <li>Create a new project in Eclipse from the existing sample source or use the
- <code>android</code> tool to update the project so it generates a build.xml file that you can
- use to build the sample.
-
- <ul>
- <li>In Eclipse:
-
- <ol type="a">
- <li>Click <strong>File &gt; New Android Project...</strong></li>
-
- <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
- <li>Select any API level above Android 2.3.</li>
-
- <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
- the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
- <li>Click <strong>Finish</strong>.</li>
- </ol>
- </li>
-
- <li>On the command line:
-
- <ol type="a">
- <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
- <li>Run the following command to generate a build.xml file:
- <pre class="no-pretty-print">
-android update project -p . -s
-</pre>
- </li>
- </ol>
- </li>
- </ul>
- </li>
-
- <li>Compile the native code using the <code>ndk-build</code> command.
- <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
-&lt;ndk_root&gt;/ndk-build
-</pre>
- </li>
-
- <li>Build and install the application as you would a normal Android application. If you are
- using Eclipse, run the application to build and install it on a device. If you are using Ant,
- run the following commands in the project directory, then run the application on the device:
- <pre class="no-pretty-print">
-ant debug
-adb install bin/NativeActivity-debug.apk
-</pre>
- </li>
- </ol>
-
-
- <h2 id="reqs">System and Software Requirements</h2>
-
- <p>The sections below describe the system and software requirements for using the Android NDK, as
- well as platform compatibility considerations that affect appplications using libraries produced
- with the NDK.</p>
-
- <h4>The Android SDK</h4>
-
- <ul>
- <li>A complete Android SDK installation (including all dependencies) is required.</li>
-
- <li>Android 1.5 SDK or later version is required.</li>
- </ul>
-
- <h4>Supported operating systems</h4>
-
- <ul>
- <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
-
- <li>Mac OS X 10.4.8 or later (x86 only)</li>
-
- <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
-later)</li>
- </ul>
-
- <h4>Required development tools</h4>
-
- <ul>
- <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
- Make might work but have not been tested.</li>
-
- <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>
-
- <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
- will <em>not</em> work with Cygwin 1.5 installations.</li>
- </ul>
-
- <h4 id="platform-compat">Android platform compatibility</h4>
-
- <ul>
- <li>The native libraries created by the Android NDK can only be used on devices running
- specific minimum Android platform versions. The minimum required platform version depends on
- the CPU architecture of the devices you are targeting. The following table details which
- Android platform versions are compatible with native code developed for specific CPU
- architectures.
-
- <table style="margin:1em;">
- <tr>
- <th>Native Code CPU Architecture Used</th>
- <th>Compatible Android Platform(s)</th>
- </tr>
-
- <tr>
- <td>ARM, ARM-NEON</td>
- <td>Android 1.5 (API Level 3) and higher</td>
- </tr>
-
- <tr>
- <td>x86</td>
- <td>Android 2.3 (API Level 9) and higher</td>
- </tr>
-
- <tr>
- <td>MIPS</td>
- <td>Android 2.3 (API Level 9) and higher</td>
- </tr>
- </table>
-
- <p>These requirements mean you can use native libraries produced with the NDK in
- applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
- deploying native libraries to x86 and MIPS-based devices, your application must target Android
- 2.3 or later.</p>
- </li>
-
- <li>To ensure compatibility, an application using a native library produced with the NDK
- <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
- &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
- <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:
-
-<pre style="margin:1em;">
-&lt;manifest&gt;
- &lt;uses-sdk android:minSdkVersion="3" /&gt;
- ...
-&lt;/manifest&gt;
-</pre>
- </li>
-
- <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
- application containing the library can be deployed only to devices running the minimum platform
- versions described in the table below. To ensure compatibility, make sure that your application
- declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
- following table.</li>
-
- <li style="list-style: none; display: inline">
- <table style="margin:1em;">
- <tr>
- <th>OpenGL ES Version Used</th>
-
- <th>Compatible Android Platform(s)</th>
-
- <th>Required uses-sdk Attribute</th>
- </tr>
-
- <tr>
- <td>OpenGL ES 1.1</td>
-
- <td>Android 1.6 (API Level 4) and higher</td>
-
- <td><code>android:minSdkVersion="4"</code></td>
- </tr>
-
- <tr>
- <td>OpenGL ES 2.0</td>
-
- <td>Android 2.0 (API Level 5) and higher</td>
-
- <td><code>android:minSdkVersion="5"</code></td>
- </tr>
- </table>
-
- <p>For more information about API Level and its relationship to Android platform versions,
- see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a>.</p>
- </li>
-
- <li>Additionally, an application using the OpenGL ES APIs should declare a
- <code>&lt;uses-feature&gt;</code> element in its manifest, with an
- <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
- required by the application. This ensures that Google Play will show your application only
- to users whose devices are capable of supporting your application. For example:
- <pre style="margin:1em;">
-&lt;manifest&gt;
-<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
- to run only on devices that support OpenGL ES 2.0 or higher. -->
- &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
- ...
-&lt;/manifest&gt;
-</pre>
-
- <p>For more information, see the <a href=
- "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
- documentation.</p>
- </li>
-
- <li>If you use this NDK to create a native library that uses the API to access Android {@link
- android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
- containing the library can be deployed only to devices running Android 2.2 (API level 8) or
- higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
- android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
- </ul>
diff --git a/docs/html/tools/sdk/older_releases.jd b/docs/html/tools/sdk/older_releases.jd
index bb274b6..94baa92 100644
--- a/docs/html/tools/sdk/older_releases.jd
+++ b/docs/html/tools/sdk/older_releases.jd
@@ -1,4 +1,5 @@
page.title=SDK Archives
+excludeFromSuggestions=true
@jd:body
<p>This page provides a full list of archived and obsolete SDK releases,
diff --git a/docs/html/tools/sdk/platforms.jd b/docs/html/tools/sdk/platforms.jd
deleted file mode 100644
index 27e89de..0000000
--- a/docs/html/tools/sdk/platforms.jd
+++ /dev/null
@@ -1,9 +0,0 @@
-page.title=Android Development Platforms
-
-@jd:body
-
-
-
-<p>A page that lists platforms and links to release notes. Links to dashboards etc.</p>
-
-
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
index 7d121844..4d8aa34 100644
--- a/docs/html/tools/sdk/tools-notes.jd
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -1,4 +1,5 @@
page.title=SDK Tools
+excludeFromSuggestions=true
@jd:body
<p>SDK Tools is a downloadable component for the Android SDK. It includes the
diff --git a/docs/html/tools/sdk/usb-drivers.jd b/docs/html/tools/sdk/usb-drivers.jd
deleted file mode 100644
index 27e89de..0000000
--- a/docs/html/tools/sdk/usb-drivers.jd
+++ /dev/null
@@ -1,9 +0,0 @@
-page.title=Android Development Platforms
-
-@jd:body
-
-
-
-<p>A page that lists platforms and links to release notes. Links to dashboards etc.</p>
-
-
diff --git a/docs/html/tools/testing/activity_test.jd b/docs/html/tools/testing/activity_test.jd
index 8288249..096aea5 100644
--- a/docs/html/tools/testing/activity_test.jd
+++ b/docs/html/tools/testing/activity_test.jd
@@ -537,7 +537,7 @@ import android.widget.Spinner;
import android.widget.SpinnerAdapter;
</pre>
<p>
- You now have the the complete <code>setUp()</code> method.
+ You now have the complete <code>setUp()</code> method.
</p>
<h3 id="AddPreConditionsTest">Adding an initial conditions test</h3>
<p>
@@ -1266,7 +1266,7 @@ $ adb install Spinner/bin/SpinnerActivity-debug.apk
</li>
<li>
Follow the tutorial, starting with the section <a href="#CreateTestCaseClass">Creating the Test Case Class</a>. When you are prompted to
- run the sample application, go the the Launcher screen in your device or emulator and select SpinnerActivity.
+ run the sample application, go to the Launcher screen in your device or emulator and select SpinnerActivity.
When you are prompted to run the test application, return here to continue with the following instructions.
</li>
<li>
diff --git a/docs/html/tools/testing/activity_testing.jd b/docs/html/tools/testing/activity_testing.jd
index 7190b98..88ac9b2 100644
--- a/docs/html/tools/testing/activity_testing.jd
+++ b/docs/html/tools/testing/activity_testing.jd
@@ -77,7 +77,7 @@ parent.link=index.html
</div>
</div>
<p>
- Activity testing is particularly dependent on the the Android instrumentation framework.
+ Activity testing is particularly dependent on the Android instrumentation framework.
Unlike other components, activities have a complex lifecycle based on callback methods; these
can't be invoked directly except by instrumentation. Also, the only way to send events to the
user interface from a program is through instrumentation.
@@ -322,7 +322,7 @@ parent.link=index.html
the published application.
</p>
<p>
- To add the the permission, add the element
+ To add the permission, add the element
<code>&lt;uses-permission android:name="android.permission.DISABLE_KEYGUARD"/&gt;</code>
as a child of the <code>&lt;manifest&gt;</code> element. To disable the KeyGuard, add the
following code to the <code>onCreate()</code> method of activities you intend to test:
diff --git a/docs/html/tools/testing/testing_android.jd b/docs/html/tools/testing/testing_android.jd
index acf5ec2..10843e8 100755
--- a/docs/html/tools/testing/testing_android.jd
+++ b/docs/html/tools/testing/testing_android.jd
@@ -111,14 +111,14 @@ parent.link=index.html
</li>
<li>
The SDK tools for building and tests are available in Eclipse with ADT, and also in
- command-line form for use with other IDES. These tools get information from the project of
+ command-line form for use with other IDEs. These tools get information from the project of
the application under test and use this information to automatically create the build files,
manifest file, and directory structure for the test package.
</li>
<li>
The SDK also provides
<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">monkeyrunner</a>, an API
- testing devices with Python programs, and <a
+ for testing devices with Python programs, and <a
href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a>,
a command-line tool for stress-testing UIs by sending pseudo-random events to a device.
</li>
diff --git a/docs/html/tools/workflow/index.jd b/docs/html/tools/workflow/index.jd
index 5ae06e6..784b212 100644
--- a/docs/html/tools/workflow/index.jd
+++ b/docs/html/tools/workflow/index.jd
@@ -34,7 +34,7 @@ development steps encompass four development phases, which include:</p>
</li>
<li><strong>Development</strong>
<p>During this phase you set up and develop your Android project, which contains all of the
- source code and resource files for your application. For more informations, see
+ source code and resource files for your application. For more information, see
<a href="{@docRoot}tools/projects/index.html">Create an Android project</a>.</p>
</li>
<li><strong>Debugging and Testing</strong>
diff --git a/docs/html/training/accessibility/index.jd b/docs/html/training/accessibility/index.jd
index 333f9f2..0af1d87 100644
--- a/docs/html/training/accessibility/index.jd
+++ b/docs/html/training/accessibility/index.jd
@@ -1,9 +1,8 @@
page.title=Implementing Accessibility
+page.tags="navigation","input"
trainingnavtop=true
startpage=true
-next.title=Developing Accessible Applications
-next.link=accessible-app.html
@jd:body
diff --git a/docs/html/training/accessibility/service.jd b/docs/html/training/accessibility/service.jd
index 373ddbb..953c558 100644
--- a/docs/html/training/accessibility/service.jd
+++ b/docs/html/training/accessibility/service.jd
@@ -204,7 +204,7 @@ public void onAccessibilityEvent(AccessibilityEvent event) {
<p>This step is optional, but highly useful. One of the new features in Android
4.0 (API Level 14) is the ability for an
{@link android.accessibilityservice.AccessibilityService} to query the view
-hierarchy, collecting information about the the UI component that generated an event, and
+hierarchy, collecting information about the UI component that generated an event, and
its parent and children. In order to do this, make sure that you set the
following line in your XML configuration:</p>
<pre>
diff --git a/docs/html/training/animation/cardflip.jd b/docs/html/training/animation/cardflip.jd
index 1477f9f..48fbbd8 100644
--- a/docs/html/training/animation/cardflip.jd
+++ b/docs/html/training/animation/cardflip.jd
@@ -70,7 +70,7 @@ trainingnavtop=true
<code>animator/card_flip_right_out.xml</code>
</li>
<li>
- <code>animator/card_flip_right_in.xml</code>
+ <code>animator/card_flip_left_in.xml</code>
</li>
<li>
<code>animator/card_flip_left_out.xml</code>
@@ -372,4 +372,4 @@ private void flipCard() {
// Commit the transaction.
.commit();
}
-</pre> \ No newline at end of file
+</pre>
diff --git a/docs/html/training/articles/perf-anr.jd b/docs/html/training/articles/perf-anr.jd
index abef545..d3b2318 100644
--- a/docs/html/training/articles/perf-anr.jd
+++ b/docs/html/training/articles/perf-anr.jd
@@ -1,4 +1,6 @@
page.title=Keeping Your App Responsive
+page.tags="threads","asynctask"
+
page.article=true
@jd:body
diff --git a/docs/html/training/articles/perf-jni.jd b/docs/html/training/articles/perf-jni.jd
index 2abb000..0d1f04e 100644
--- a/docs/html/training/articles/perf-jni.jd
+++ b/docs/html/training/articles/perf-jni.jd
@@ -1,4 +1,6 @@
page.title=JNI Tips
+page.tags="ndk","native"
+
page.article=true
@jd:body
diff --git a/docs/html/training/articles/security-ssl.jd b/docs/html/training/articles/security-ssl.jd
index 9a6320b..d3f68e2 100644
--- a/docs/html/training/articles/security-ssl.jd
+++ b/docs/html/training/articles/security-ssl.jd
@@ -1,4 +1,6 @@
page.title=Security with HTTPS and SSL
+page.tags="network","certificates"
+
page.article=true
@jd:body
diff --git a/docs/html/training/articles/smp.jd b/docs/html/training/articles/smp.jd
index d46787d..0f667d7 100644
--- a/docs/html/training/articles/smp.jd
+++ b/docs/html/training/articles/smp.jd
@@ -1,4 +1,6 @@
page.title=SMP Primer for Android
+page.tags="ndk","native"
+
page.article=true
@jd:body
diff --git a/docs/html/training/backward-compatible-ui/index.jd b/docs/html/training/backward-compatible-ui/index.jd
index f81b5a7..82087a6 100644
--- a/docs/html/training/backward-compatible-ui/index.jd
+++ b/docs/html/training/backward-compatible-ui/index.jd
@@ -1,9 +1,8 @@
page.title=Creating Backward-Compatible UIs
+page.tags="widgets","support"
trainingnavtop=true
startpage=true
-next.title=Abstracting the New Implementation
-next.link=abstracting.html
@jd:body
diff --git a/docs/html/training/basics/firstapp/building-ui.jd b/docs/html/training/basics/firstapp/building-ui.jd
index 0f18861..2615bee 100644
--- a/docs/html/training/basics/firstapp/building-ui.jd
+++ b/docs/html/training/basics/firstapp/building-ui.jd
@@ -240,7 +240,7 @@ the "hello_world" string.)</p>
&lt;string name="app_name">My First App&lt;/string>
&lt;string name="edit_message">Enter a message&lt;/string>
&lt;string name="button_send">Send&lt;/string>
- &lt;string name="menu_settings">Settings&lt;/string>
+ &lt;string name="action_settings">Settings&lt;/string>
&lt;string name="title_activity_main">MainActivity&lt;/string>
&lt;/resources>
</pre>
diff --git a/docs/html/training/basics/fragments/fragment-ui.jd b/docs/html/training/basics/fragments/fragment-ui.jd
index d648938..db3119b 100644
--- a/docs/html/training/basics/fragments/fragment-ui.jd
+++ b/docs/html/training/basics/fragments/fragment-ui.jd
@@ -41,7 +41,7 @@ tablet which has a wider screen size to display more information to the user.</p
<img src="{@docRoot}images/training/basics/fragments-screen-mock.png" alt="" />
<p class="img-caption"><strong>Figure 1.</strong> Two fragments, displayed in different
-configurations for the same activity on different screen sizes. On a large screen, both fragment
+configurations for the same activity on different screen sizes. On a large screen, both fragments
fit side by side, but on a handset device, only one fragment fits at a time so the fragments must
replace each other as the user navigates.</p>
diff --git a/docs/html/training/basics/location/index.jd b/docs/html/training/basics/location/index.jd
index 48cfbc3..240bbb2 100644
--- a/docs/html/training/basics/location/index.jd
+++ b/docs/html/training/basics/location/index.jd
@@ -1,9 +1,8 @@
page.title=Making Your App Location Aware
+page.tags="geolocation","maps"
trainingnavtop=true
startpage=true
-next.title=Using the Location Manager
-next.link=locationmanager.html
@jd:body
diff --git a/docs/html/training/basics/network-ops/connecting.jd b/docs/html/training/basics/network-ops/connecting.jd
index ac8d993..50a9e1b 100644
--- a/docs/html/training/basics/network-ops/connecting.jd
+++ b/docs/html/training/basics/network-ops/connecting.jd
@@ -136,7 +136,7 @@ public class HttpExampleActivity extends Activity {
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null &amp;&amp; networkInfo.isConnected()) {
- new DownloadWebpageText().execute(stringUrl);
+ new DownloadWebpageTask().execute(stringUrl);
} else {
textView.setText("No network connection available.");
}
@@ -147,7 +147,7 @@ public class HttpExampleActivity extends Activity {
// has been established, the AsyncTask downloads the contents of the webpage as
// an InputStream. Finally, the InputStream is converted into a string, which is
// displayed in the UI by the AsyncTask's onPostExecute method.
- private class DownloadWebpageText extends AsyncTask<String, Void, String> {
+ private class DownloadWebpageTask extends AsyncTask&lt;String, Void, String&gt; {
&#64;Override
protected String doInBackground(String... urls) {
diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd
index 0f3d495..990b8cb 100644
--- a/docs/html/training/basics/network-ops/managing.jd
+++ b/docs/html/training/basics/network-ops/managing.jd
@@ -269,7 +269,7 @@ returns to the main activity:</p>
// When the user changes the preferences selection,
// onSharedPreferenceChanged() restarts the main activity as a new
- // task. Sets the the refreshDisplay flag to "true" to indicate that
+ // task. Sets the refreshDisplay flag to "true" to indicate that
// the main activity should update its display.
// The main activity queries the PreferenceManager to get the latest settings.
diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd
index cec75b4..1c09e66 100644
--- a/docs/html/training/custom-views/index.jd
+++ b/docs/html/training/custom-views/index.jd
@@ -1,9 +1,8 @@
page.title=Creating Custom Views
+page.tags="widgets","ui","layout"
trainingnavtop=true
startpage=true
-next.title=Creating a View Class
-next.link=create-view.html
@jd:body
diff --git a/docs/html/training/design-navigation/index.jd b/docs/html/training/design-navigation/index.jd
index af60717..f888c93 100644
--- a/docs/html/training/design-navigation/index.jd
+++ b/docs/html/training/design-navigation/index.jd
@@ -2,8 +2,6 @@ page.title=Designing Effective Navigation
trainingnavtop=true
startpage=true
-next.title=Planning Screens and Their Relationships
-next.link=screen-planning.html
@jd:body
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd
index 0db9009..ac1b565 100644
--- a/docs/html/training/enterprise/index.jd
+++ b/docs/html/training/enterprise/index.jd
@@ -1,4 +1,5 @@
page.title=Developing for Enterprise
+page.tags="policy","privacy"
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/gestures/index.jd b/docs/html/training/gestures/index.jd
index 16ca7b0..9d21b08 100644
--- a/docs/html/training/gestures/index.jd
+++ b/docs/html/training/gestures/index.jd
@@ -1,8 +1,8 @@
page.title=Using Touch Gestures
+page.tags="input","navigation","gesturedetector","scroller"
+
trainingnavtop=true
startpage=true
-next.title=Detect Built-in Gestures
-next.link=detector.html
@jd:body
diff --git a/docs/html/training/gestures/scroll.jd b/docs/html/training/gestures/scroll.jd
index bd1537a..3e3aa14 100644
--- a/docs/html/training/gestures/scroll.jd
+++ b/docs/html/training/gestures/scroll.jd
@@ -56,7 +56,7 @@ scrolling animation in response to a touch event. They are similar, but
{@link android.widget.OverScroller}
includes methods for indicating to users that they've reached the content edges
after a pan or fling gesture. The {@code InteractiveChart} sample
-uses the the {@link android.widget.EdgeEffect} class
+uses the {@link android.widget.EdgeEffect} class
(actually the {@link android.support.v4.widget.EdgeEffectCompat} class)
to display a "glow" effect when users reach the content edges.</p>
diff --git a/docs/html/training/id-auth/index.jd b/docs/html/training/id-auth/index.jd
index 140545c..2bae9c4 100644
--- a/docs/html/training/id-auth/index.jd
+++ b/docs/html/training/id-auth/index.jd
@@ -1,9 +1,8 @@
page.title=Remembering Users
+page.tags="privacy","oauth","accounts"
trainingnavtop=true
startpage=true
-next.title=Remembering Your User
-next.link=identify.html
@jd:body
diff --git a/docs/html/training/implementing-navigation/index.jd b/docs/html/training/implementing-navigation/index.jd
index ebb4995..990bcfe 100644
--- a/docs/html/training/implementing-navigation/index.jd
+++ b/docs/html/training/implementing-navigation/index.jd
@@ -1,9 +1,8 @@
page.title=Implementing Effective Navigation
+page.tags="viewpager","tasks","back","up"
trainingnavtop=true
startpage=true
-next.title=Implementing Lateral Navigation
-next.link=lateral.html
@jd:body
diff --git a/docs/html/training/improving-layouts/index.jd b/docs/html/training/improving-layouts/index.jd
index a0ac13e..af29d3f 100644
--- a/docs/html/training/improving-layouts/index.jd
+++ b/docs/html/training/improving-layouts/index.jd
@@ -1,4 +1,5 @@
page.title=Improving Layout Performance
+page.tags="include","merge","viewstub","listview"
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/in-app-billing/index.jd b/docs/html/training/in-app-billing/index.jd
index 3d07481..94708b8 100644
--- a/docs/html/training/in-app-billing/index.jd
+++ b/docs/html/training/in-app-billing/index.jd
@@ -1,4 +1,5 @@
page.title=Selling In-app Products
+page.tags="billing"
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/in-app-billing/list-iab-products.jd b/docs/html/training/in-app-billing/list-iab-products.jd
index 36ff34a..c423fc1 100644
--- a/docs/html/training/in-app-billing/list-iab-products.jd
+++ b/docs/html/training/in-app-billing/list-iab-products.jd
@@ -54,7 +54,7 @@ next.link=purchase-iab-products.html
<li>The {@code List} argument consists of one or more product IDs (also called SKUs) for the products that you want to query.</li>
<li>Finally, the {@code QueryInventoryFinishedListener} argument specifies a listener is notified when the query operation has completed and handles the query response.</li>
</ul>
-If you use the the convenience classes provided in the sample, the classes will handle background thread management for In-app Billing requests, so you can safely make queries from the main thread of your application.
+If you use the convenience classes provided in the sample, the classes will handle background thread management for In-app Billing requests, so you can safely make queries from the main thread of your application.
</p>
<p>The following code shows how you can retrieve the details for two products with IDs {@code SKU_APPLE} and {@code SKU_BANANA} that you previously defined in the Developer Console.</p>
diff --git a/docs/html/training/keyboard-input/index.jd b/docs/html/training/keyboard-input/index.jd
index ba4e598..7ac79e6 100644
--- a/docs/html/training/keyboard-input/index.jd
+++ b/docs/html/training/keyboard-input/index.jd
@@ -1,4 +1,5 @@
page.title=Handling Keyboard Input
+page.tags="edittext","accessibility"
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/load-data-background/index.jd b/docs/html/training/load-data-background/index.jd
index dc9d84a..221ae57 100644
--- a/docs/html/training/load-data-background/index.jd
+++ b/docs/html/training/load-data-background/index.jd
@@ -1,4 +1,6 @@
page.title=Loading Data in the Background
+page.tags="cursorloader"
+
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/monitoring-device-state/battery-monitoring.jd b/docs/html/training/monitoring-device-state/battery-monitoring.jd
index c963a18..a202566 100644
--- a/docs/html/training/monitoring-device-state/battery-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/battery-monitoring.jd
@@ -65,9 +65,9 @@ boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// How are we charging?
-int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
-boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
-boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;</pre>
<p>Typically you should maximize the rate of your background updates in the case where the device is
connected to an AC charger, reduce the rate if the charge is over USB, and lower it
@@ -105,8 +105,8 @@ the current charging state and method as described in the previous step.</p>
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
- boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
- boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+ boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
+ boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
}
}</pre>
@@ -119,8 +119,8 @@ the rate of your background updates if the battery charge is below a certain lev
<p>You can find the current battery charge by extracting the current battery level and scale from
the battery status intent as shown here:</p>
-<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
-int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+<pre>int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;</pre>
diff --git a/docs/html/training/monitoring-device-state/docking-monitoring.jd b/docs/html/training/monitoring-device-state/docking-monitoring.jd
index 3787a55..5c8bfd6 100644
--- a/docs/html/training/monitoring-device-state/docking-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/docking-monitoring.jd
@@ -79,7 +79,7 @@ boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
<h2 id="MonitorDockState">Monitor for Changes in the Dock State or Type</h2>
-<p>Whenever the the device is docked or undocked, the {@link
+<p>Whenever the device is docked or undocked, the {@link
android.content.Intent#ACTION_DOCK_EVENT} action is broadcast. To monitor changes in the
device's dock-state, simply register a broadcast receiver in your application manifest as shown in
the snippet below:</p>
diff --git a/docs/html/training/monitoring-device-state/index.jd b/docs/html/training/monitoring-device-state/index.jd
index 585b669..c3d700a 100644
--- a/docs/html/training/monitoring-device-state/index.jd
+++ b/docs/html/training/monitoring-device-state/index.jd
@@ -1,9 +1,8 @@
page.title=Optimizing Battery Life
+page.tags="network","internet"
trainingnavtop=true
startpage=true
-next.title=Monitoring the Battery Level and Charging State
-next.link=battery-monitoring.html
@jd:body
diff --git a/docs/html/training/multiple-apks/index.jd b/docs/html/training/multiple-apks/index.jd
index 37286c3..5754da9 100644
--- a/docs/html/training/multiple-apks/index.jd
+++ b/docs/html/training/multiple-apks/index.jd
@@ -1,9 +1,8 @@
page.title=Maintaining Multiple APKs
+page.tags="support"
trainingnavtop=true
startpage=true
-next.title=Creating Multiple APKs for Different API Levels
-next.link=api.html
@jd:body
diff --git a/docs/html/training/multiple-threads/define-runnable.jd b/docs/html/training/multiple-threads/define-runnable.jd
index 17640a9..40853d3 100644
--- a/docs/html/training/multiple-threads/define-runnable.jd
+++ b/docs/html/training/multiple-threads/define-runnable.jd
@@ -98,7 +98,7 @@ class PhotoDecodeRunnable implements Runnable {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
...
/*
- * Stores the current Thread in the the PhotoTask instance,
+ * Stores the current Thread in the PhotoTask instance,
* so that the instance
* can interrupt the Thread.
*/
diff --git a/docs/html/training/multiple-threads/index.jd b/docs/html/training/multiple-threads/index.jd
index 3ea57c5..cbd42b4 100644
--- a/docs/html/training/multiple-threads/index.jd
+++ b/docs/html/training/multiple-threads/index.jd
@@ -1,4 +1,5 @@
page.title=Sending Operations to Multiple Threads
+page.tags="threadpool","runnable"
trainingnavtop=true
startpage=true
diff --git a/docs/html/training/multiscreen/index.jd b/docs/html/training/multiscreen/index.jd
index 23f6564..d09540e 100644
--- a/docs/html/training/multiscreen/index.jd
+++ b/docs/html/training/multiscreen/index.jd
@@ -1,9 +1,8 @@
page.title=Designing for Multiple Screens
+page.tags="tablet","tv","fragments","support"
trainingnavtop=true
startpage=true
-next.title=Supporting Different Screen Sizes
-next.link=screensizes.html
@jd:body
diff --git a/docs/html/training/notify-user/index.jd b/docs/html/training/notify-user/index.jd
index 510f2c4..51f058f 100644
--- a/docs/html/training/notify-user/index.jd
+++ b/docs/html/training/notify-user/index.jd
@@ -1,8 +1,8 @@
page.title=Notifying the User
+page.tags="notifications"
+
trainingnavtop=true
startpage=true
-next.title=Build a Notification
-next.link=build-notification.html
@jd:body
diff --git a/docs/html/training/run-background-service/index.jd b/docs/html/training/run-background-service/index.jd
index 173b87a..3360df5 100644
--- a/docs/html/training/run-background-service/index.jd
+++ b/docs/html/training/run-background-service/index.jd
@@ -1,7 +1,11 @@
page.title=Running in a Background Service
+page.tags="intentservice"
+
trainingnavtop=true
startpage=true
+
@jd:body
+
<div id="tb-wrapper">
<div id="tb">
<h2>Dependencies and prerequisites</h2>
diff --git a/docs/html/training/search/index.jd b/docs/html/training/search/index.jd
index bfd1618..4070372 100644
--- a/docs/html/training/search/index.jd
+++ b/docs/html/training/search/index.jd
@@ -1,8 +1,8 @@
page.title=Adding Search Functionality
+page.tags="searchview","database"
+
trainingnavtop=true
startpage=true
-next.title=Setting Up the Search Interface
-next.link=setup.html
@jd:body
diff --git a/docs/html/training/tv/index.jd b/docs/html/training/tv/index.jd
index ae13c4a..9d15f46 100644
--- a/docs/html/training/tv/index.jd
+++ b/docs/html/training/tv/index.jd
@@ -1,9 +1,8 @@
page.title=Designing for TV
+page.tags="input","screens"
trainingnavtop=true
startpage=true
-next.title=Optimizing layouts for TV
-next.link=optimizing-layouts-tv.html
@jd:body