Merge "Merge scaled bitmaps with translated bitmaps"
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 948210c..32bb71e 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -104,8 +104,9 @@
     public static final int OP_AUDIO_ALARM_VOLUME = 37;
     public static final int OP_AUDIO_NOTIFICATION_VOLUME = 38;
     public static final int OP_AUDIO_BLUETOOTH_VOLUME = 39;
+    public static final int OP_WAKE_LOCK = 40;
     /** @hide */
-    public static final int _NUM_OP = 40;
+    public static final int _NUM_OP = 41;
 
     /**
      * This maps each operation to the operation that serves as the
@@ -156,6 +157,7 @@
             OP_AUDIO_ALARM_VOLUME,
             OP_AUDIO_NOTIFICATION_VOLUME,
             OP_AUDIO_BLUETOOTH_VOLUME,
+            OP_WAKE_LOCK,
     };
 
     /**
@@ -203,6 +205,7 @@
             "AUDIO_ALARM_VOLUME",
             "AUDIO_NOTIFICATION_VOLUME",
             "AUDIO_BLUETOOTH_VOLUME",
+            "WAKE_LOCK",
     };
 
     /**
@@ -250,6 +253,7 @@
             null, // no permission for changing alarm volume
             null, // no permission for changing notification volume
             null, // no permission for changing bluetooth volume
+            android.Manifest.permission.WAKE_LOCK,
     };
 
     /**
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 6d6d147..23492ff 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -25,7 +25,7 @@
 {
     // WARNING: The first two methods must remain the first two methods because their
     // transaction numbers must not change unless IPowerManager.cpp is also updated.
-    void acquireWakeLock(IBinder lock, int flags, String tag, in WorkSource ws);
+    void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws);
     void releaseWakeLock(IBinder lock, int flags);
 
     void updateWakeLockWorkSource(IBinder lock, in WorkSource ws);
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 736762f..52e5f38 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -224,7 +224,7 @@
 
     /**
      * Flag for {@link WakeLock#release release(int)} to defer releasing a
-     * {@link #WAKE_BIT_PROXIMITY_SCREEN_OFF} wake lock until the proximity sensor returns
+     * {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} wake lock until the proximity sensor returns
      * a negative value.
      *
      * {@hide}
@@ -407,7 +407,7 @@
      */
     public WakeLock newWakeLock(int levelAndFlags, String tag) {
         validateWakeLockParameters(levelAndFlags, tag);
-        return new WakeLock(levelAndFlags, tag);
+        return new WakeLock(levelAndFlags, tag, mContext.getBasePackageName());
     }
 
     /** @hide */
@@ -624,6 +624,7 @@
     public final class WakeLock {
         private final int mFlags;
         private final String mTag;
+        private final String mPackageName;
         private final IBinder mToken;
         private int mCount;
         private boolean mRefCounted = true;
@@ -636,9 +637,10 @@
             }
         };
 
-        WakeLock(int flags, String tag) {
+        WakeLock(int flags, String tag, String packageName) {
             mFlags = flags;
             mTag = tag;
+            mPackageName = packageName;
             mToken = new Binder();
         }
 
@@ -714,7 +716,7 @@
                 // been explicitly released by the keyguard.
                 mHandler.removeCallbacks(mReleaser);
                 try {
-                    mService.acquireWakeLock(mToken, mFlags, mTag, mWorkSource);
+                    mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource);
                 } catch (RemoteException e) {
                 }
                 mHeld = true;
diff --git a/core/java/android/speech/tts/TtsEngines.java b/core/java/android/speech/tts/TtsEngines.java
index 2706bc7..5fbd22e 100644
--- a/core/java/android/speech/tts/TtsEngines.java
+++ b/core/java/android/speech/tts/TtsEngines.java
@@ -355,7 +355,18 @@
         return v1Locale;
     }
 
-    private String getDefaultLocale() {
+    /**
+     * Return the default device locale in form of 3 letter codes delimited by
+     * {@link #LOCALE_DELIMITER}:
+     * <ul>
+     *   <li> "ISO 639-2/T language code" if locale have no country entry</li>
+     *   <li> "ISO 639-2/T language code{@link #LOCALE_DELIMITER}ISO 3166 country code "
+     *     if locale have no variant entry</li>
+     *   <li> "ISO 639-2/T language code{@link #LOCALE_DELIMITER}ISO 3166 country code
+     *     {@link #LOCALE_DELIMITER} variant" if locale have variant entry</li>
+     * </ul>
+     */
+    public String getDefaultLocale() {
         final Locale locale = Locale.getDefault();
 
         // Note that the default locale might have an empty variant
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index cb9e455..babccf6 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4964,6 +4964,17 @@
      * @see AccessibilityNodeInfo
      */
     public AccessibilityNodeInfo createAccessibilityNodeInfo() {
+        if (mAccessibilityDelegate != null) {
+            return mAccessibilityDelegate.createAccessibilityNodeInfo(this);
+        } else {
+            return createAccessibilityNodeInfoInternal();
+        }
+    }
+
+    /**
+     * @see #createAccessibilityNodeInfo()
+     */
+    AccessibilityNodeInfo createAccessibilityNodeInfoInternal() {
         AccessibilityNodeProvider provider = getAccessibilityNodeProvider();
         if (provider != null) {
             return provider.createAccessibilityNodeInfo(View.NO_ID);
@@ -18767,6 +18778,33 @@
         public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) {
             return null;
         }
+
+        /**
+         * Returns an {@link AccessibilityNodeInfo} representing the host view from the
+         * point of view of an {@link android.accessibilityservice.AccessibilityService}.
+         * This method is responsible for obtaining an accessibility node info from a
+         * pool of reusable instances and calling
+         * {@link #onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo)} on the host
+         * view to initialize the former.
+         * <p>
+         * <strong>Note:</strong> The client is responsible for recycling the obtained
+         * instance by calling {@link AccessibilityNodeInfo#recycle()} to minimize object
+         * creation.
+         * </p>
+         * <p>
+         * The default implementation behaves as
+         * {@link View#createAccessibilityNodeInfo() View#createAccessibilityNodeInfo()} for
+         * the case of no accessibility delegate been set.
+         * </p>
+         * @return A populated {@link AccessibilityNodeInfo}.
+         *
+         * @see AccessibilityNodeInfo
+         *
+         * @hide
+         */
+        public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) {
+            return host.createAccessibilityNodeInfoInternal();
+        }
     }
 
     private class MatchIdPredicate implements Predicate<View> {
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index fe5b990..5510939 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -179,7 +179,9 @@
 
         public void clear() {
             removeAllViews();
-            mDrawables.clear();
+            if (mDrawables != null) {
+                mDrawables.clear();
+            }
         }
 
         boolean isEmpty() {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index e50dcc3..5de7399 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2213,6 +2213,18 @@
 
     class ListItemAccessibilityDelegate extends AccessibilityDelegate {
         @Override
+        public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) {
+            // If the data changed the children are invalid since the data model changed.
+            // Hence, we pretend they do not exist. After a layout the children will sync
+            // with the model at which point we notify that the accessibility state changed,
+            // so a service will be able to re-fetch the views.
+            if (mDataChanged) {
+                return null;
+            }
+            return super.createAccessibilityNodeInfo(host);
+        }
+
+        @Override
         public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
             super.onInitializeAccessibilityNodeInfo(host, info);
 
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index f42999d..a82bebd 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -2425,24 +2425,37 @@
 
     /**
      * Used by {@link #arrowScrollImpl(int)} to help determine the next selected position
-     * to move to. This can return a position currently not represented by a view on screen
-     * but only in the direction given.
+     * to move to. This return a position in the direction given if the selected item
+     * is fully visible.
      *
+     * @param selectedView Current selected view to move from
      * @param selectedPos Current selected position to move from
      * @param direction Direction to move in
      * @return Desired selected position after moving in the given direction
      */
-    private final int nextSelectedPositionForDirection(int selectedPos, int direction) {
+    private final int nextSelectedPositionForDirection(
+            View selectedView, int selectedPos, int direction) {
         int nextSelected;
+
         if (direction == View.FOCUS_DOWN) {
-            nextSelected = selectedPos != INVALID_POSITION && selectedPos >= mFirstPosition ?
-                    selectedPos + 1 :
-                    mFirstPosition;
+            final int listBottom = getHeight() - mListPadding.bottom;
+            if (selectedView != null && selectedView.getBottom() <= listBottom) {
+                nextSelected = selectedPos != INVALID_POSITION && selectedPos >= mFirstPosition ?
+                        selectedPos + 1 :
+                        mFirstPosition;
+            } else {
+                return INVALID_POSITION;
+            }
         } else {
-            final int lastPos = mFirstPosition + getChildCount() - 1;
-            nextSelected = selectedPos != INVALID_POSITION && selectedPos <= lastPos ?
-                    selectedPos - 1 :
-                    lastPos;
+            final int listTop = mListPadding.top;
+            if (selectedView != null && selectedView.getTop() >= listTop) {
+                final int lastPos = mFirstPosition + getChildCount() - 1;
+                nextSelected = selectedPos != INVALID_POSITION && selectedPos <= lastPos ?
+                        selectedPos - 1 :
+                        lastPos;
+            } else {
+                return INVALID_POSITION;
+            }
         }
 
         if (nextSelected < 0 || nextSelected >= mAdapter.getCount()) {
@@ -2466,7 +2479,7 @@
         View selectedView = getSelectedView();
         int selectedPos = mSelectedPosition;
 
-        int nextSelectedPosition = nextSelectedPositionForDirection(selectedPos, direction);
+        int nextSelectedPosition = nextSelectedPositionForDirection(selectedView, selectedPos, direction);
         int amountToScroll = amountToScroll(direction, nextSelectedPosition);
 
         // if we are moving focus, we may OVERRIDE the default behavior
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 0ada548..b1692d7 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6277,7 +6277,7 @@
         BoringLayout.Metrics hintBoring = UNKNOWN_BORING;
 
         if (mTextDir == null) {
-            getTextDirectionHeuristic();
+            mTextDir = getTextDirectionHeuristic();
         }
 
         int des = -1;
@@ -8620,6 +8620,13 @@
         return mEditor.mInBatchEditControllers;
     }
 
+    @Override
+    public void onRtlPropertiesChanged(int layoutDirection) {
+        super.onRtlPropertiesChanged(layoutDirection);
+
+        mTextDir = getTextDirectionHeuristic();
+    }
+
     TextDirectionHeuristic getTextDirectionHeuristic() {
         if (hasPasswordTransformationMethod()) {
             // passwords fields should be LTR
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index 34cdd93..f10a2e8 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -61,6 +61,13 @@
         private float mAltXVelocity;
         private float mAltYVelocity;
 
+        // Current bounding box, if any
+        private boolean mHasBoundingBox;
+        private float mBoundingLeft;
+        private float mBoundingTop;
+        private float mBoundingRight;
+        private float mBoundingBottom;
+
         // Position estimator.
         private VelocityTracker.Estimator mEstimator = new VelocityTracker.Estimator();
         private VelocityTracker.Estimator mAltEstimator = new VelocityTracker.Estimator();
@@ -388,6 +395,12 @@
                         ps.mCoords.x + orientationVectorX * tiltScale,
                         ps.mCoords.y + orientationVectorY * tiltScale,
                         3.0f, mPaint);
+
+                // Draw the current bounding box
+                if (ps.mHasBoundingBox) {
+                    canvas.drawRect(ps.mBoundingLeft, ps.mBoundingTop,
+                            ps.mBoundingRight, ps.mBoundingBottom, mPaint);
+                }
             }
         }
     }
@@ -400,20 +413,20 @@
             for (int i = 0; i < NI; i++) {
                 final int id = event.getPointerId(i);
                 event.getHistoricalPointerCoords(i, historyPos, mTempCoords);
-                logCoords(type, action, i, mTempCoords, id,
-                        event.getToolType(i), event.getButtonState());
+                logCoords(type, action, i, mTempCoords, id, event);
             }
         }
         for (int i = 0; i < NI; i++) {
             final int id = event.getPointerId(i);
             event.getPointerCoords(i, mTempCoords);
-            logCoords(type, action, i, mTempCoords, id,
-                    event.getToolType(i), event.getButtonState());
+            logCoords(type, action, i, mTempCoords, id, event);
         }
     }
 
     private void logCoords(String type, int action, int index,
-            MotionEvent.PointerCoords coords, int id, int toolType, int buttonState) {
+            MotionEvent.PointerCoords coords, int id, MotionEvent event) {
+        final int toolType = event.getToolType(index);
+        final int buttonState = event.getButtonState();
         final String prefix;
         switch (action & MotionEvent.ACTION_MASK) {
             case MotionEvent.ACTION_DOWN:
@@ -483,6 +496,12 @@
                 .append(" Distance=").append(coords.getAxisValue(MotionEvent.AXIS_DISTANCE), 1)
                 .append(" VScroll=").append(coords.getAxisValue(MotionEvent.AXIS_VSCROLL), 1)
                 .append(" HScroll=").append(coords.getAxisValue(MotionEvent.AXIS_HSCROLL), 1)
+                .append(" BoundingBox=[(")
+                .append(event.getAxisValue(MotionEvent.AXIS_GENERIC_1), 3)
+                .append(", ").append(event.getAxisValue(MotionEvent.AXIS_GENERIC_2), 3).append(")")
+                .append(", (").append(event.getAxisValue(MotionEvent.AXIS_GENERIC_3), 3)
+                .append(", ").append(event.getAxisValue(MotionEvent.AXIS_GENERIC_4), 3)
+                .append(")]")
                 .append(" ToolType=").append(MotionEvent.toolTypeToString(toolType))
                 .append(" ButtonState=").append(MotionEvent.buttonStateToString(buttonState))
                 .toString());
@@ -530,6 +549,8 @@
 
             final PointerState ps = mPointers.get(id);
             ps.mCurDown = true;
+            ps.mHasBoundingBox = (InputDevice.getDevice(event.getDeviceId()).
+                    getMotionRange(MotionEvent.AXIS_GENERIC_1) != null);
         }
 
         final int NI = event.getPointerCount();
@@ -549,8 +570,7 @@
                 final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
                 event.getHistoricalPointerCoords(i, historyPos, coords);
                 if (mPrintCoords) {
-                    logCoords("Pointer", action, i, coords, id,
-                            event.getToolType(i), event.getButtonState());
+                    logCoords("Pointer", action, i, coords, id, event);
                 }
                 if (ps != null) {
                     ps.addTrace(coords.x, coords.y);
@@ -563,8 +583,7 @@
             final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
             event.getPointerCoords(i, coords);
             if (mPrintCoords) {
-                logCoords("Pointer", action, i, coords, id,
-                        event.getToolType(i), event.getButtonState());
+                logCoords("Pointer", action, i, coords, id, event);
             }
             if (ps != null) {
                 ps.addTrace(coords.x, coords.y);
@@ -577,6 +596,13 @@
                     mAltVelocity.getEstimator(id, ps.mAltEstimator);
                 }
                 ps.mToolType = event.getToolType(i);
+
+                if (ps.mHasBoundingBox) {
+                    ps.mBoundingLeft = event.getAxisValue(MotionEvent.AXIS_GENERIC_1, i);
+                    ps.mBoundingTop = event.getAxisValue(MotionEvent.AXIS_GENERIC_2, i);
+                    ps.mBoundingRight = event.getAxisValue(MotionEvent.AXIS_GENERIC_3, i);
+                    ps.mBoundingBottom = event.getAxisValue(MotionEvent.AXIS_GENERIC_4, i);
+                }
             }
         }
 
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index be14f58..cd84fff 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -318,6 +318,7 @@
  */
 TextLayoutValue::TextLayoutValue(size_t contextCount) :
         mTotalAdvance(0), mElapsedTime(0) {
+    mBounds.setEmpty();
     // Give a hint for advances and glyphs vectors size
     mAdvances.setCapacity(contextCount);
     mGlyphs.setCapacity(contextCount);
@@ -345,11 +346,11 @@
     hb_buffer_destroy(mBuffer);
 }
 
-void TextLayoutShaper::computeValues(TextLayoutValue* value, const SkPaint* paint, const UChar* chars,
-        size_t start, size_t count, size_t contextCount, int dirFlags) {
-
+void TextLayoutShaper::computeValues(TextLayoutValue* value, const SkPaint* paint,
+        const UChar* chars, size_t start, size_t count, size_t contextCount, int dirFlags) {
     computeValues(paint, chars, start, count, contextCount, dirFlags,
-            &value->mAdvances, &value->mTotalAdvance, &value->mGlyphs, &value->mPos);
+            &value->mAdvances, &value->mTotalAdvance, &value->mBounds,
+            &value->mGlyphs, &value->mPos);
 #if DEBUG_ADVANCES
     ALOGD("Advances - start = %d, count = %d, contextCount = %d, totalAdvance = %f", start, count,
             contextCount, value->mTotalAdvance);
@@ -358,7 +359,7 @@
 
 void TextLayoutShaper::computeValues(const SkPaint* paint, const UChar* chars,
         size_t start, size_t count, size_t contextCount, int dirFlags,
-        Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+        Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance, SkRect* outBounds,
         Vector<jchar>* const outGlyphs, Vector<jfloat>* const outPos) {
         *outTotalAdvance = 0;
         if (!count) {
@@ -454,7 +455,7 @@
                                     i, startRun, lengthRun, isRTL);
 #endif
                             computeRunValues(paint, chars, startRun, lengthRun, contextCount, isRTL,
-                                    outAdvances, outTotalAdvance, outGlyphs, outPos);
+                                    outAdvances, outTotalAdvance, outBounds, outGlyphs, outPos);
 
                         }
                     }
@@ -478,7 +479,7 @@
                     "-- run-start = %d, run-len = %d, isRTL = %d", start, count, isRTL);
 #endif
             computeRunValues(paint, chars, start, count, contextCount, isRTL,
-                    outAdvances, outTotalAdvance, outGlyphs, outPos);
+                    outAdvances, outTotalAdvance, outBounds, outGlyphs, outPos);
         }
 
 #if DEBUG_GLYPHS
@@ -675,7 +676,7 @@
 
 void TextLayoutShaper::computeRunValues(const SkPaint* paint, const UChar* contextChars,
         size_t start, size_t count, size_t contextCount, bool isRTL,
-        Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+        Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance, SkRect* outBounds,
         Vector<jchar>* const outGlyphs, Vector<jfloat>* const outPos) {
     if (!count) {
         // We cannot shape an empty run.
@@ -749,12 +750,22 @@
             size_t cluster = info[i].cluster - start;
             float xAdvance = HBFixedToFloat(positions[i].x_advance);
             outAdvances->replaceAt(outAdvances->itemAt(cluster) + xAdvance, cluster);
-            outGlyphs->add(info[i].codepoint + glyphBaseCount);
+            jchar glyphId = info[i].codepoint + glyphBaseCount;
+            outGlyphs->add(glyphId);
             float xo = HBFixedToFloat(positions[i].x_offset);
             float yo = -HBFixedToFloat(positions[i].y_offset);
-            outPos->add(totalAdvance + xo + yo * skewX);
-            outPos->add(yo);
+
+            float xpos = totalAdvance + xo + yo * skewX;
+            float ypos = yo;
+            outPos->add(xpos);
+            outPos->add(ypos);
             totalAdvance += xAdvance;
+
+            // TODO: consider using glyph cache
+            const SkGlyph& metrics = mShapingPaint.getGlyphMetrics(glyphId, NULL);
+            outBounds->join(xpos + metrics.fLeft, ypos + metrics.fTop,
+                    xpos + metrics.fLeft + metrics.fWidth, ypos + metrics.fTop + metrics.fHeight);
+
         }
     }
 
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 5414a11..ab6ac72 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -134,6 +134,7 @@
     inline const jfloat* getAdvances() const { return mAdvances.array(); }
     inline size_t getAdvancesCount() const { return mAdvances.size(); }
     inline jfloat getTotalAdvance() const { return mTotalAdvance; }
+    inline const SkRect& getBounds() const { return mBounds; }
     inline const jchar* getGlyphs() const { return mGlyphs.array(); }
     inline size_t getGlyphsCount() const { return mGlyphs.size(); }
     inline const jfloat* getPos() const { return mPos.array(); }
@@ -150,6 +151,11 @@
     jfloat mTotalAdvance;
 
     /**
+     * Bounds containing all glyphs
+     */
+    SkRect mBounds;
+
+    /**
      * Glyphs vector
      */
     Vector<jchar> mGlyphs;
@@ -208,12 +214,12 @@
 
     void computeValues(const SkPaint* paint, const UChar* chars,
             size_t start, size_t count, size_t contextCount, int dirFlags,
-            Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+            Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance, SkRect* outBounds,
             Vector<jchar>* const outGlyphs, Vector<jfloat>* const outPos);
 
     void computeRunValues(const SkPaint* paint, const UChar* chars,
             size_t start, size_t count, size_t contextCount, bool isRTL,
-            Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+            Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance, SkRect* outBounds,
             Vector<jchar>* const outGlyphs, Vector<jfloat>* const outPos);
 
     SkTypeface* setCachedTypeface(SkTypeface** typeface, hb_script_t script, SkTypeface::Style style);
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index cd7a032..983a838 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -574,6 +574,20 @@
 // Text
 // ----------------------------------------------------------------------------
 
+static float xOffsetForTextAlign(SkPaint* paint, float totalAdvance) {
+    switch (paint->getTextAlign()) {
+        case SkPaint::kCenter_Align:
+            return -totalAdvance / 2.0f;
+            break;
+        case SkPaint::kRight_Align:
+            return -totalAdvance;
+            break;
+        default:
+            break;
+    }
+    return 0;
+}
+
 static void renderText(OpenGLRenderer* renderer, const jchar* text, int count,
         jfloat x, jfloat y, int flags, SkPaint* paint) {
     sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
@@ -586,8 +600,12 @@
     jfloat totalAdvance = value->getTotalAdvance();
     const float* positions = value->getPos();
     int bytesCount = glyphsCount * sizeof(jchar);
-    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y,
-            positions, paint, totalAdvance);
+    const SkRect& r = value->getBounds();
+    android::uirenderer::Rect bounds(r.fLeft, r.fTop, r.fRight, r.fBottom);
+
+    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount,
+            x + xOffsetForTextAlign(paint, totalAdvance), y, positions,
+            paint, totalAdvance, bounds);
 }
 
 static void renderTextOnPath(OpenGLRenderer* renderer, const jchar* text, int count,
@@ -617,8 +635,12 @@
     jfloat totalAdvance = value->getTotalAdvance();
     const float* positions = value->getPos();
     int bytesCount = glyphsCount * sizeof(jchar);
-    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y,
-            positions, paint, totalAdvance);
+    const SkRect& r = value->getBounds();
+    android::uirenderer::Rect bounds(r.fLeft, r.fTop, r.fRight, r.fBottom);
+
+    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount,
+            x + xOffsetForTextAlign(paint, totalAdvance), y, positions,
+            paint, totalAdvance, bounds);
 }
 
 static void android_view_GLES20Canvas_drawTextArray(JNIEnv* env, jobject clazz,
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 8ef127a..3443d6e 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1970,7 +1970,7 @@
 
     <!-- Allows an application to call any phone number, including emergency
          numbers, without going through the Dialer user interface for the user
-         to confirm the call being placed. -->
+         to confirm the call being placed. Not for use by third party apps. -->
     <permission android:name="android.permission.CALL_PRIVILEGED"
         android:label="@string/permlab_callPrivileged"
         android:description="@string/permdesc_callPrivileged"
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_dark.png
index 6c60775..b47d666 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_light.png
index a608d1c..03b0d2a 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_off_holo_dark.png
index a748f2d..13d803c 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_off_holo_light.png
index cfaba46..3ae436b 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png
index 10fc8da..24824fc 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png
index a0e5060..af3819b 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png
index 8364a36..83dc251 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png
index 44b89e1..8d9d592 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png
index 770bf78..1310ec9 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png
index 2a2467b..1705074 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_holo_dark.png
index 031bbce..7027b88 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_holo_light.png
index 0fe15af..7027b88 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_dark.png
index c3da161..fa22d82 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_light.png
index d069a79..a686cd1 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_off_holo_dark.png
index 858f1c9..6764598 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_off_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_off_holo_light.png
index babb87b..94e0bb6 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_off_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png
index fb2ac25..5ce2f20 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png
index 0c20091..5105e90 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png
index 2f70cee..68c06ed 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png
index 0b76d8e..6e9b144 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png
index ae7b105..45dc56f3d 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png
index 8d37b99..46e743a 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_holo_dark.png
index 6dd5991..e384691 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_holo_light.png
index ff7e95a..e384691 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_dark.png
index ed4709d..1d48e12 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_light.png
index 668b53e..2c8d1ec 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_off_holo_dark.png
index 0f72914..00b2043 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_off_holo_light.png
index be7085e..ce1d939 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png
index 483b612..3064b46 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png
index c3507dc..4316686 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png
index 24c6519..25c4e31 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png
index 2be0380..8e32bd2 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png
index 4fd69bd..aeaa78f 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png
index 5158856..85277fa 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_holo_dark.png
index 1338c8c..b01dbe8 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_holo_light.png
index 91686c6..c19a2ad 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml
index 36e01f6..faa5220 100644
--- a/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml
+++ b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml
@@ -22,7 +22,5 @@
     <item android:drawable="@drawable/ic_media_route_on_0_holo_dark" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_1_holo_dark" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_2_holo_dark" android:duration="500" />
-    <item android:drawable="@drawable/ic_media_route_on_holo_dark" android:duration="500" />
-    <item android:drawable="@drawable/ic_media_route_on_2_holo_dark" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_1_holo_dark" android:duration="500" />
-</animation-list>
+</animation-list>
\ No newline at end of file
diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_light.xml b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml
index 6683db8..14f8df4 100644
--- a/core/res/res/drawable/ic_media_route_connecting_holo_light.xml
+++ b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml
@@ -22,7 +22,5 @@
     <item android:drawable="@drawable/ic_media_route_on_0_holo_light" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_1_holo_light" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_2_holo_light" android:duration="500" />
-    <item android:drawable="@drawable/ic_media_route_on_holo_light" android:duration="500" />
-    <item android:drawable="@drawable/ic_media_route_on_2_holo_light" android:duration="500" />
     <item android:drawable="@drawable/ic_media_route_on_1_holo_light" android:duration="500" />
 </animation-list>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index bc23476..88e142b 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Stelsel"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-oudio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klaar"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skandeer tans..."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 269a9b9..70ef077 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ስርዓት"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"የብሉቱዝ ድምጽ"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ተከናውኗል"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"የሚዲያ ውጽዓት"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"በመቃኘት ላይ..."</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 220d599..da9b373 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"النظام"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"صوت بلوتوث"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"تم"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"المنفذ الإعلامي"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"جارٍ الفحص..."</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index fef9e7e..77b6614 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Сістэма"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-аўдыё"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Гатова"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Мультымедыйны выхад"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканiраванне..."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index cfd8b2d..43c90c6 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Звук през Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Изходяща мултимедия"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканира се..."</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 83ca3ed..2af2c5c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Àudio per Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortida de contingut multimèdia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està explorant..."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 696fcfd..d80d361 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth Audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Vyhledávání…"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 07838fe..7baa173 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Udfør"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieudgang"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Søger..."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 61a88a3..4579025 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-Audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fertig"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medienausgabe"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Wird gescannt..."</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index f3cd839..ec1c686 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Σύστημα"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ήχος Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Τέλος"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Έξοδος μέσων"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Σάρωση…"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index a3f2a55..f4f7d12 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Scanning..."</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 072f98b..0b0cf59 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Listo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Examinando..."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 5b8a35b..897a962 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fin"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Analizando..."</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 09dd5a6..5449bae 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Meediaväljund"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skaneering ..."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index a63c705..281f786 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"سیستم"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوتوث‌های صوتی"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"انجام شد"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"خروجی رسانه"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"در حال اسکن کردن…"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 832536b..5c69947 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Järjestelmä"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ääni"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Median äänentoisto"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Etsitään..."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index c28ca11..fcf2907 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"OK"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Analyse en cours..."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 58e0584..4ac7ca2 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्‍टम"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ऑडियो"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"पूर्ण"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"मीडिया आउटपुट"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"स्‍कैन कर रहा है..."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index acfba40..87ad6f6 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sustav"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth zvuk"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medijski izlaz"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skeniranje..."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index e8af306..bdbad05 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Rendszer"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth hang"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kész"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Médiakimenet"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Keresés..."</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index a995af2..074ae03 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Keluaran media"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Memindai..."</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index cbce892..6565d60 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fine"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Uscita media"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Ricerca in corso..."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 32b326c..149505d 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"מערכת"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"אודיו Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"סיום"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"פלט מדיה"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"סורק..."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 3bdd67d..8abfd5e 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"システム"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完了"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"メディア出力"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"スキャン中..."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 87e73d1..906b393 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"시스템"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"블루투스 오디오"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"완료"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"미디어 출력"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"검색 중..."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 6fb098c..71e2cbb 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"„Bluetooth“ garsas"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Atlikta"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medijos išvestis"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Nuskaitoma..."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 15116e3..56f1a9f 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistēma"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gatavs"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Multivides izeja"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Notiek meklēšana..."</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index d3f9f0b..5172c27 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Output media"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Mengimbas…"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 4b31a24..357ce06 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fullført"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieutgang"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skanner ..."</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 88f3610..4f143ff 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systeem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gereed"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Scannen..."</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 3bceb24..a91fa99 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Dźwięk Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotowe"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Wyjście multimediów"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skanuję..."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 50b1571..528aea7 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de som multimédia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"A procurar..."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index fe22ca9..b4486c0 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de mídia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Verificando..."</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 54e9bf2..4404d87 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -2316,6 +2316,8 @@
     <skip />
     <!-- no translation found for bluetooth_a2dp_audio_route_name (8575624030406771015) -->
     <skip />
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <!-- no translation found for media_route_chooser_grouping_done (7966438307723317169) -->
     <skip />
     <!-- no translation found for media_route_button_content_description (5758553567065145276) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index f3ad580..5446528 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminat"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Rezultate media"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Se scanează..."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index c823875..a1da086 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Воспроизведение звука через Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Перенаправлять поток мультимедиа"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканирование..."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index bb4df56..d546d72 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Prebieha vyhľadávanie..."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 670cc61..69534ea 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Zvok prek Bluetootha"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Končano"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Izhod predstavnosti"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Pregledovanje ..."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index d40c581..387e1eb 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Излаз медија"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Скенирање..."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index e64c4b4..7f4aaca 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ljud"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klar"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieuppspelning"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skannar…"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 66e0d6c..1590676 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Mfumo"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Sauti ya Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kwisha"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Towe la midia"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Inatambaza..."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 8145a4d..997d40c 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ระบบ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"เสียงบลูทูธ"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"เสร็จสิ้น"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"เอาต์พุตสื่อ"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"กำลังสแกน..."</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index c0e163f..fafc293 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio sa Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tapos na"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Output ng media"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Nagsa-scan..."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 2cdafb6..f2a6b46 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ses"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tamamlandı"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medya çıkışı"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Taranıyor..."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 3ed8763..0565892 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудіо Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Вивід медіа-даних"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканування..."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 7fd0625..bd6bb09 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Hệ thống"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Âm thanh Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Xong"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Đầu ra phương tiện"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Đang quét..."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 7e7513b..5d06cde 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"系统"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"蓝牙音频"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"媒体输出线路"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"正在扫描..."</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 41bd4b5..b9674b4 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音訊"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"媒體輸出"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"掃描中..."</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 10c0c70..48ba188 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1439,6 +1439,8 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Isistimu"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Umsindo we-Bluetooth"</string>
+    <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+    <skip />
     <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Qedile"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Okukhiphayo kwemidiya"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Iyaskena..."</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 6322d30..4bd1c9b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -542,11 +542,20 @@
     <!-- Control the behavior when the user long presses the home button.
             0 - Nothing
             1 - Recent apps view in SystemUI
+            2 - Launch assist intent
          This needs to match the constants in
          policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
     -->
     <integer name="config_longPressOnHomeBehavior">1</integer>
 
+    <!-- Control the behavior when the user double-taps the home button.
+            0 - Nothing
+            1 - Recent apps view in SystemUI
+         This needs to match the constants in
+         policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+    -->
+    <integer name="config_doubleTapOnHomeBehavior">0</integer>
+
     <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
          The N entries of this array define N + 1 control points as follows:
          (1-based arrays)
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 10da459..9c2ab03 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1254,6 +1254,7 @@
   <java-symbol type="integer" name="config_carDockRotation" />
   <java-symbol type="integer" name="config_defaultUiModeType" />
   <java-symbol type="integer" name="config_deskDockRotation" />
+  <java-symbol type="integer" name="config_doubleTapOnHomeBehavior" />
   <java-symbol type="integer" name="config_lidKeyboardAccessibility" />
   <java-symbol type="integer" name="config_lidNavigationAccessibility" />
   <java-symbol type="integer" name="config_lidOpenRotation" />
diff --git a/data/keyboards/common.mk b/data/keyboards/common.mk
index 7b36167..87c2ef5 100644
--- a/data/keyboards/common.mk
+++ b/data/keyboards/common.mk
@@ -15,42 +15,8 @@
 # This is the list of framework provided keylayouts and key character maps to include.
 # Used by Android.mk and keyboards.mk.
 
-keylayouts := \
-    Generic.kl \
-    AVRCP.kl \
-    qwerty.kl \
-    Vendor_045e_Product_028e.kl \
-    Vendor_046d_Product_c216.kl \
-    Vendor_046d_Product_c294.kl \
-    Vendor_046d_Product_c299.kl \
-    Vendor_046d_Product_c532.kl \
-    Vendor_054c_Product_0268.kl \
-    Vendor_05ac_Product_0239.kl \
-    Vendor_22b8_Product_093d.kl \
-    Vendor_0079_Product_0011.kl \
-    Vendor_046d_Product_c219.kl \
-    Vendor_046d_Product_c21f.kl \
-    Vendor_0583_Product_2060.kl \
-    Vendor_0a5c_Product_8502.kl \
-    Vendor_1038_Product_1412.kl \
-    Vendor_12bd_Product_d015.kl \
-    Vendor_1689_Product_fd00.kl \
-    Vendor_1689_Product_fd01.kl \
-    Vendor_1689_Product_fe00.kl \
-    Vendor_1bad_Product_f016.kl \
-    Vendor_1bad_Product_f023.kl \
-    Vendor_1bad_Product_f027.kl \
-    Vendor_1bad_Product_f036.kl \
-    Vendor_1d79_Product_0009.kl \
-    Vendor_2378_Product_100a.kl
+keylayouts := $(notdir $(wildcard $(LOCAL_PATH)/*.kl))
 
-keycharmaps := \
-    Generic.kcm \
-    Virtual.kcm \
-    qwerty.kcm \
-    qwerty2.kcm
+keycharmaps := $(notdir $(wildcard $(LOCAL_PATH)/*.kcm))
 
-keyconfigs := \
-    qwerty.idc \
-    qwerty2.idc
-
+keyconfigs := $(notdir $(wildcard $(LOCAL_PATH)/*.idc))
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index c70084c..a147350 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -107,6 +107,21 @@
 - from: /guide/topics/connectivity/usb/adk.html
   to: /tools/adk/index.html
 
+- from: /tools/workflow/publishing/versioning.html
+  to: /tools/publishing/versioning.html
+
+- from: /tools/workflow/publishing/publishing.html
+  to: /tools/publishing/publishing_overview.html
+
+- from: /tools/workflow/publishing_overview.html
+  to: /tools/publishing/publishing_overview.html
+
+- from: /tools/workflow/publishing/publishing_overview.html
+  to: /tools/publishing/publishing_overview.html
+
+- from: /tools/workflow/app-signing.html
+  to: /tools/publishing/app-signing.html
+
 - from: /tools/adk/aoa.html
   to: http://source.android.com/tech/accessories/aoap/aoa.html
 
@@ -340,8 +355,8 @@
 - from: /deviceart
   to: http://developer.android.com/distribute/promote/device-art.html
 
-- from: /edu
-  to: /distribute/googleplay/edu/index.html
-
 - from: /edu/signup
   to: https://services.google.com/fb/forms/playedu
+
+- from: /edu
+  to: /distribute/googleplay/edu/index.html
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index 0cb2635..e4dd2cb 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -33,19 +33,35 @@
 
               <li class="item carousel-home">
                  <div class="col-8">
+                   <img src="{@docRoot}images/google/gps-location.png"
+class="play no-shadow no-transform" style="margin:0 0 0 70px;height:230px;width:340px" />
+                 </div>
+                <div class="content-right col-6" style="width:350px">
+                  <h2>New Location APIs from Google</h2>
+                  <p>The latest version of Google Play services includes new APIs that provide more
+                  efficient and immediate user location data on devices running Android 2.2
+                  and higher. Features include geofencing APIs, user activity recognition, and
+                  power-efficient location updates.</p>
+                  <p><a
+href="{@docRoot}google/play-services/location.html" class="button">Read more</a></p>
+                </div>
+              </li>
+
+              <li class="item carousel-home">
+                 <div class="col-8">
                    <img src="{@docRoot}images/google/gps-plus-signin-hero.jpg"
 class="play no-shadow no-transform" style="margin:0 0 0 40px;max-height:250px;height:250px;
                                            max-width:409px;width:409px" />
                  </div>
                 <div class="content-right col-6" style="width:350px">
-                  <h2>Google+ Sign-in for your Android Apps</h2>
-                  <p>Google+ Sign-In is an easy, trusted way to sign a user into your app,
-                  and get more Android installs when people visit your website.
-                  When users sign in with Google on the web, they have the option to instantly
-                  install your Android app without ever leaving your website.</p>
+                  <h2>New Cross-Platform Single Sign On</h2>
+                  <p>Google+ Sign-In is an easy, trusted way to sign a user into your app.
+                  Now it's even more seamless. A user can sign in to your app on one device and
+                  pick it up on another&mdash;without signing in again. Best of all, it's built
+                  into Google+ Sign-in, so there's no change needed in your app.</p>
                   <p><a
 href="{@docRoot}google/play-services/plus.html" class="button">Read more</a></p>
-                </div>            
+                </div>
               </li>
 
               <li class="item carousel-home">
@@ -92,19 +108,6 @@
 more</a></p>
                    </div>                
                 </li>
-               <li class="item carousel-home">
-                   <div class="col-8">
-                     <img
-src="//lh4.ggpht.com/-MgN5DnoO5XU/UHYGYzTcAOI/AAAAAAAABs4/jTS7sKkfBcM/s1600/pubsites.png" class="play"></div>
-                   <div class="content-right col-6">
-                   <p class="title-intro">From the blog:</p>
-                   <h2>New Google Play Developer Console</h2>
-                   <p>All developers can now try the <strong>new Google Play Developer Console</strong>. With a streamlined publishing flow, new language options, and new user ratings statistics, you’ll have better tools for delivering great Android apps that delight users.</p>
-                  <p><a
-href="http://android-developers.blogspot.com/2012/10/new-google-play-developer-console.html" class="button">Read
-more</a></p>
-                   </div>                
-                </li>
            </ul>
        </div>
    </div>
@@ -121,6 +124,16 @@
 			<div class="feed-frame">
                                 <!-- DEVELOPER NEWS -->
           <ul>
+            <li><a href="//android-developers.blogspot.com/2013/05/new-ways-to-optimize-your-business-in.html">
+              <div class="feed-image" style="background:url('//4.bp.blogspot.com/-VmHMT66JjxU/UZZdfPUaJsI/AAAAAAAACQc/kDx5-Ep5YRo/s1600/framed_designed-tablets.png') no-repeat 0 0;background-size:180px"></div>
+              <h4>New Ways to Optimize Your Business in Google Play</h4>
+              <p>Many of you have invested in making great tablet experiences for your users, and we want to ensure that that work pays off...</p>
+              </a></li>
+            <li><a href="//android-developers.blogspot.com/2013/05/android-studio-ide-built-for-android.html">
+              <div class="feed-image" style="background:url('//1.bp.blogspot.com/-u5dfSsMOMC0/UZO_5DC_W9I/AAAAAAAACM8/YCMn15HPzpE/s320/Studio_table.png') no-repeat 0 0;background-size:180px"></div>
+              <h4>Android Studio: An IDE built for Android</h4>
+              <p>To develop Android Studio, we cooperated with JetBrains, creators of one of the most advanced Java IDEs available today...</p>
+              </a></li>
             <li><a href="//android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html">
               <div class="feed-image" style="background:url('//lh4.ggpht.com/7z4NItEg-X21zvFGAarKonk-VaysBYthJ30u1JjaQ0-5fjyHNawnmoNeG--4FCACog=w124') no-repeat 0 0"></div>
               <h4>Verifying Back-End Calls from Android Apps</h4>
@@ -131,16 +144,6 @@
               <h4>Daydream: Interactive Screen Savers</h4>
               <p>Daydream is an interactive screen-saver mode introduced in Android 4.2. Learn how to add Daydreams to your apps...</p>
               </a></li>
-            <li><a href="//android-developers.blogspot.com/2012/11/designing-for-tablets-were-here-to-help.html">
-              <div class="feed-image" style="background:url('//developer.android.com/design/media/multipane_expand.png') no-repeat 0 0; background-position:right top;"></div>
-              <h4>Designing for Tablets?</h4>
-              <p>Essential resources for everyone in the app development pipeline—from product managers, to designers, to developers, and QA engineers...</p>
-              </a></li>
-            <li><a href="//android-developers.blogspot.com/2012/12/in-app-billing-version-3.html">
-              <div class="feed-image" style="background:url('//developer.android.com/images/iab-thumb.png') no-repeat 0 0;background-position:center right;"></div>
-              <h4>In-app Billing Version 3 Now Available</h4>
-              <p>A new version of In-app Billing is available that lets you sell digital goods in your app with just a few lines of code...</p>
-              </a></li>
           </ul>
                                 <!-- FEATURED DOCS -->
           <ul>
@@ -265,7 +268,7 @@
   
   if (feed.entry.length > MAX_LIST_LENGTH) {
     // add item to go to youtube for playlist
-    $ulVideos.append('<li class="more"><a href="//www.youtube.com/playlist?list=PL' + playlistId + '">More &raquo;</a></li>');
+    $ulVideos.append('<li class="more"><a href="//www.youtube.com/playlist?list=' + playlistId + '">More &raquo;</a></li>');
   }
 
   $liPlaylist.append($ulVideos);
@@ -315,14 +318,14 @@
   'designinaction' : {
     'ids': ["PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF"]
   },
-  'about' : {
-    'ids': ["PL611F8C5DBF49CEC6"]
+  'bizdevbytes' : {
+    'ids': ["PLWz5rJ2EKKc8-Osr0TuHyTMEhKV0xJ6ql"]
   },
   'developersstrikeback' : {
     'ids': ["PLWz5rJ2EKKc8nhhIOieejm1PxYHmPkIPh"]
   },
   'googleio' : {
-    'ids': ["PL4C6BCDE45E05F49E"]
+    'ids': ["PLWz5rJ2EKKc9WGUwq2gQ-coU3fSyexgOx"]
   }
 };
 
@@ -333,7 +336,7 @@
     for (var i in ids) {
       var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
                     + ids[i] +
-                    "?v=2&alt=json-in-script&max-results=50&callback=renderVideoPlaylists&orderby=published'><\/script>";
+                    "?v=2&alt=json-in-script&max-results=50&callback=renderVideoPlaylists&orderby=position'><\/script>";
       $("body").append(script);
     }
   }
@@ -345,7 +348,7 @@
   var playlistId = "PLWz5rJ2EKKc_XOgcRukSoKKjewFJZrKV0"; /* DevBytes */
   var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
                 + playlistId +
-                "?v=2&alt=json-in-script&max-results=10&callback=renderDevelopersLivePlaylist&orderby=reversedPosition'><\/script > ";
+                "?v=2&alt=json-in-script&max-results=10&callback=renderDevelopersLivePlaylist&orderby=position'><\/script > ";
   $("body").append(script);
 }
 
diff --git a/docs/html/distribute/googleplay/index.html b/docs/html/distribute/googleplay/index.html
deleted file mode 100644
index 46a8ce2..0000000
--- a/docs/html/distribute/googleplay/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/distribute/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/distribute/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/spotlight/tablets.jd b/docs/html/distribute/googleplay/spotlight/tablets.jd
index 7e1ca43..cfea29a 100644
--- a/docs/html/distribute/googleplay/spotlight/tablets.jd
+++ b/docs/html/distribute/googleplay/spotlight/tablets.jd
@@ -118,7 +118,7 @@
             width: 78px;
             float: left;
             margin: 12px 20px 30px 20px;" src=
-            "https://lh5.ggpht.com/mO1TPos65MWJF_n8ZrXMbNCqIqsvN4dQV_rwNOU3pF6N_Ii3lSiCPe_H_MP8C1MK5UKo=w124">
+            "https://lh6.ggpht.com/QTy7lOGRTS58NW4XEeym2sxpWKDmRNod_n3kBrHlqTRIyzIv2gkw8DfwiR4GIAdxiHw=w124">
 
           
   <div style="list-style: none;height:100%;
diff --git a/docs/html/google/play-services/games.jd b/docs/html/google/play-services/games.jd
index dd07c26..ccd6866 100644
--- a/docs/html/google/play-services/games.jd
+++ b/docs/html/google/play-services/games.jd
@@ -1,4 +1,4 @@
-page.title=Google Play Games Platform
+page.title=Google Play Game Services
 header.hide=1
 
 @jd:body
diff --git a/docs/html/guide/practices/app-design/accessibility.html b/docs/html/guide/practices/app-design/accessibility.html
deleted file mode 100644
index 0fa7b32..0000000
--- a/docs/html/guide/practices/app-design/accessibility.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh"
-content="0;url=http://developer.android.com/guide/topics/ui/accessibility/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/topics/ui/accessibility/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_1.html b/docs/html/guide/practices/ui_guidelines/icon_design_1.html
deleted file mode 100644
index 183facf..0000000
--- a/docs/html/guide/practices/ui_guidelines/icon_design_1.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=icon_design.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<a href="icon_design.html">click here</a> if you are not redirected.
-</body>
-</html>
diff --git a/docs/html/guide/topics/index.html b/docs/html/guide/topics/index.html
deleted file mode 100644
index 4881acf..0000000
--- a/docs/html/guide/topics/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/topics/ui/sharables/sample_images.zip b/docs/html/guide/topics/ui/sharables/sample_images.zip
deleted file mode 100644
index 007a68a..0000000
--- a/docs/html/guide/topics/ui/sharables/sample_images.zip
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/home/io-gdl-2013.png b/docs/html/images/home/io-gdl-2013.png
index 78b6820..ec3b4ff 100644
--- a/docs/html/images/home/io-gdl-2013.png
+++ b/docs/html/images/home/io-gdl-2013.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index c9e508e..0799802 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -14,17 +14,18 @@
             <ul>
                 <li class="item carousel-home">
                     <div class="content-left col-10">
-                    <a href="http://goo.gl/9lM2d">
+                    <a href="https://developers.google.com/live/android/browse">
                       <img src="{@docRoot}images/home/io-gdl-2013.png" style="margin:60px 0 0">
                     </a>
                     </div>
                     <div class="content-right col-5">
-                    <h1>Google I/O Live Stream</h1>
-                    <p>Watch Android sessions live from Google I/O 2013. Hear about the latest in
-                    Android straight from the source.</p>
-                    <p>Brought to you by
+                    <h1>Watch the Android talks from Google I/O</h1>
+                    <p>If you weren't able to attend Google I/O in person or couldn't make it
+                    to all the talks, you can catch up on the action
+                    with all the recordings, brought to you by
                     <a href="http://developers.google.com/live">Google Developers Live</a>.</p>
-                    <p><a href="http://goo.gl/9lM2d" class="button">Tune in now</a></p>
+                    <p><a href="https://developers.google.com/live/android/browse" class="button"
+                    >See the Android talks</a></p>
                     </div>
                 </li>
                 <li class="item carousel-home">
diff --git a/docs/html/sdk/1.0_r1/upgrading.jd b/docs/html/sdk/1.0_r1/upgrading.jd
deleted file mode 100644
index d6a7ed5..0000000
--- a/docs/html/sdk/1.0_r1/upgrading.jd
+++ /dev/null
@@ -1,155 +0,0 @@
-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>
-
-<p>This guide will help you migrate your development environment and applications
-to <strong>version 1.0, release 1</strong>, of the Android SDK. Use this guide if you've been developing applications
-on a different version of the Android SDK.</p>
-
-<p>To ensure that your applications are compliant with the Android 1.0 system available 
-on mobile devices, you need to install the new SDK and port your existing Android 
-applications to the updated API. The sections below guide you through the process.</p>
-
-<h2 id="install-new">Install the new SDK</h2>
-
-<p>After unpacking the SDK, you should:</p>
-
-<ul>
-  <li>Wipe your emulator data. <p>Some data formats have changed since the last
-  SDK release, so any previously saved data in your emulator must be removed. Open a console/terminal
-  and navigate to the <code>/tools</code> directory of your SDK. Launch the 
-  emulator with the <code>-wipe-data</code> option. </p>
-  <p>Windows: <code>emulator -wipe-data</code><br/>
-   Mac/Linux: <code>./emulator -wipe-data</code></p>
-  </li>
-  <li>Update your PATH variable (Mac/Linux; optional). <p>If you had previously setup your 
-  PATH variable to point to the SDK tools directory, then you'll need to update it to 
-  point to the new SDK. E.g., for a <code>.bashrc</code> or <code>.bash_profile</code> file:
-  <code>export PATH=$PATH:<em>&lt;your_new_sdk_dir></em>/tools</code></p>
-  </li>
-</ul>
-
-<h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
-
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
-plugin that's required for this version of the SDK.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="45%">
-<ol>
-    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
-      file</a> (do not unpack it).</li>
-    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
-            and Install...</strong>. </li>
-    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click 
-      <strong>Next</strong>. </li>
-    <li>Click <strong>New Archive Site...</strong></li>
-    <li>Browse and select the downloaded the zip file.</li>
-    <li>You should now see the new site added to the search list (and checked).
-        Click <strong>Finish</strong>. </li>
-    <li>In the subsequent Search Results dialog box, select the checkbox for
-    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
-    This will check both features:  "Android Developer Tools", and "Android
-    Editors". The Android Editors feature is optional, but recommended.  If
-    you choose to install it, you need the WST plugin mentioned earlier in this
-    page. Click <strong>Next</strong>. </li>
-    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
-     Click <strong>Next</strong>. </li>
-    <li>Click <strong>Finish</strong>. </li>
-    <li>The ADT plugin is not signed; you can accept the installation anyway
-        by clicking <strong>Install All</strong>. </li>
-    <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-<td>
-
-<ol>
-    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
-      file</a> (do not unpack it).</li>
-    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
-    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
-    <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
-    <li>Browse and select the downloaded the zip file.</li>
-    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
-      <em>Developer Tools</em>  and click <strong>Install...</strong></li>
-    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
-    The Android Editors feature is optional, but recommended.  If
-    you choose to install it, you need the WST plugin mentioned earlier in this
-    page. Click <strong>Next</strong>.</li>
-    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-</tr>
-</table>
-
-<p>After restart, update your Eclipse preferences to point to the SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences...</strong> to open the Preferences panel. (Mac OSX: <strong>Eclipse</strong> > <strong>Preferences</strong>)</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-<h2 id="sign">Set Up Application Signing</h2>
-
-<p>All applications must now be signed before you can install them on the emulator. Both 
-the ADT plugin and the Ant-based build tools support this requirement by signing compiled 
-.apk files with a debug key. To do so, the build tools use the Keytool utility included 
-in the JDK to to create a keystore and a key with a known alias and password. For more 
-information, see "Signing and Publishing Your App" in the documentation included with the SDK.
-
-<p>To support signing, you should first make sure that Keytool is available to the SDK build 
-tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that 
-your JAVA_HOME environment variable is set and that it references a suitable JDK. Alternatively, 
-you can add the JDK version of Keytool to your PATH variable.</p>
-
-<p>If you are developing on a version of Linux that originally came with Gnu Compiler for Java, 
-make sure that the system is using the JDK version of Keytool, rather than the gcj version. 
-If keytool is already in your PATH, it might be pointing to a symlink at /usr/bin/keytool. 
-In this case, check the symlink target to make sure that it points to the keytool in the JDK.</p>
-
-<p>If you use Ant to build your .apk files (rather than ADT for Eclipse), you must regenerate 
-your build.xml file. To do that, follow these steps:</p>
-<ol>
-  <li>In your Android application project directory, locate and delete the current build.xml file.</li>
-  <li>Run activitycreator, directing output to the folder containing your application project.
-
-<pre>- exec activitycreator --out &lt;project folder&gt; your.activity.YourActivity</pre>
-
-  </li>
-</ol>
-
-<p>Run in this way, activitycreator will not erase or create new Java files (or manifest files), 
-provided the activity and package already exists. It is important that the package and the activity 
-are real. The tool creates a new build.xml file, as well as a new directory called "libs" in which 
-to place 3rd jar files, which are now automatically handled by the Ant script.</p>
-
-<h2 id="migrate">Migrate your applications</h2>
-
-<p>If (and only if) you have written apps in an SDK released previous to
-the Android 1.0 SDK, you will need to migrate your applications. After
-updating your SDK, you may encounter breakages in your code, due to
-framework and API changes. You'll need to update your code to match
-changes in the Android APIs.</p>
-
-<p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application. You can also look up
-specific changes in the Android APIs in the <em>Overview of Changes</em> and <em>
-API Diffs Report</em>, both available in the documentation included with the
-Android 1.0 SDK package.</p>
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
-
-<p>If you have modified one of the ApiDemos applications and would like to migrate it 
-to the new SDK, note that you will need to uninstall the version of ApiDemos that comes 
-preinstalled in the emulator.</p>
diff --git a/docs/html/sdk/1.0_r2/upgrading.jd b/docs/html/sdk/1.0_r2/upgrading.jd
deleted file mode 100644
index 243950d..0000000
--- a/docs/html/sdk/1.0_r2/upgrading.jd
+++ /dev/null
@@ -1,155 +0,0 @@
-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>
-
-<p>This guide will help you migrate your development environment and applications
-to <strong>version 1.0, release 2</strong>, of the Android SDK. Use this guide if you've been developing applications
-on a different version of the Android SDK.</p>
-
-<p>To ensure that your applications are compliant with the Android 1.0 system available 
-on mobile devices, you need to install the new SDK and port your existing Android 
-applications to the updated API. The sections below guide you through the process.</p>
-
-<h2 id="install-new">Install the new SDK</h2>
-
-<p>After unpacking the SDK, you should:</p>
-
-<ul>
-  <li>Wipe your emulator data. <p>Some data formats have changed since the last
-  SDK release, so any previously saved data in your emulator must be removed. Open a console/terminal
-  and navigate to the <code>/tools</code> directory of your SDK. Launch the 
-  emulator with the <code>-wipe-data</code> option. </p>
-  <p>Windows: <code>emulator -wipe-data</code><br/>
-   Mac/Linux: <code>./emulator -wipe-data</code></p>
-  </li>
-  <li>Update your PATH variable (Mac/Linux; optional). <p>If you had previously setup your 
-  PATH variable to point to the SDK tools directory, then you'll need to update it to 
-  point to the new SDK. E.g., for a <code>.bashrc</code> or <code>.bash_profile</code> file:
-  <code>export PATH=$PATH:<em>&lt;your_new_sdk_dir></em>/tools</code></p>
-  </li>
-</ul>
-
-<h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
-
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
-plugin that's required for this version of the SDK.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="45%">
-<ol>
-    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
-      file</a> (do not unpack it).</li>
-    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
-            and Install...</strong>. </li>
-    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click 
-      <strong>Next</strong>. </li>
-    <li>Click <strong>New Archive Site...</strong></li>
-    <li>Browse and select the downloaded the zip file.</li>
-    <li>You should now see the new site added to the search list (and checked).
-        Click <strong>Finish</strong>. </li>
-    <li>In the subsequent Search Results dialog box, select the checkbox for
-    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
-    This will check both features:  "Android Developer Tools", and "Android
-    Editors". The Android Editors feature is optional, but recommended.  If
-    you choose to install it, you need the WST plugin mentioned earlier in this
-    page. Click <strong>Next</strong>. </li>
-    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
-     Click <strong>Next</strong>. </li>
-    <li>Click <strong>Finish</strong>. </li>
-    <li>The ADT plugin is not signed; you can accept the installation anyway
-        by clicking <strong>Install All</strong>. </li>
-    <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-<td>
-
-<ol>
-    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
-      file</a> (do not unpack it).</li>
-    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
-    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
-    <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
-    <li>Browse and select the downloaded the zip file.</li>
-    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
-      <em>Developer Tools</em>  and click <strong>Install...</strong></li>
-    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
-    The Android Editors feature is optional, but recommended.  If
-    you choose to install it, you need the WST plugin mentioned earlier in this
-    page. Click <strong>Next</strong>.</li>
-    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-</tr>
-</table>
-
-<p>After restart, update your Eclipse preferences to point to the SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences...</strong> to open the Preferences panel. (Mac OSX: <strong>Eclipse</strong> > <strong>Preferences</strong>)</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-<h2 id="sign">Set Up Application Signing</h2>
-
-<p>All applications must now be signed before you can install them on the emulator. Both 
-the ADT plugin and the Ant-based build tools support this requirement by signing compiled 
-.apk files with a debug key. To do so, the build tools use the Keytool utility included 
-in the JDK to to create a keystore and a key with a known alias and password. For more 
-information, see "Signing and Publishing Your App" in the documentation included with the SDK.
-
-<p>To support signing, you should first make sure that Keytool is available to the SDK build 
-tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that 
-your JAVA_HOME environment variable is set and that it references a suitable JDK. Alternatively, 
-you can add the JDK version of Keytool to your PATH variable.</p>
-
-<p>If you are developing on a version of Linux that originally came with Gnu Compiler for Java, 
-make sure that the system is using the JDK version of Keytool, rather than the gcj version. 
-If keytool is already in your PATH, it might be pointing to a symlink at /usr/bin/keytool. 
-In this case, check the symlink target to make sure that it points to the keytool in the JDK.</p>
-
-<p>If you use Ant to build your .apk files (rather than ADT for Eclipse), you must regenerate 
-your build.xml file. To do that, follow these steps:</p>
-<ol>
-  <li>In your Android application project directory, locate and delete the current build.xml file.</li>
-  <li>Run activitycreator, directing output to the folder containing your application project.
-
-<pre>- exec activitycreator --out &lt;project folder&gt; your.activity.YourActivity</pre>
-
-  </li>
-</ol>
-
-<p>Run in this way, activitycreator will not erase or create new Java files (or manifest files), 
-provided the activity and package already exists. It is important that the package and the activity 
-are real. The tool creates a new build.xml file, as well as a new directory called "libs" in which 
-to place 3rd jar files, which are now automatically handled by the Ant script.</p>
-
-<h2 id="migrate">Migrate your applications</h2>
-
-<p>If (and only if) you have written apps in an SDK released previous to
-the Android 1.0 SDK, you will need to migrate your applications. After
-updating your SDK, you may encounter breakages in your code, due to
-framework and API changes. You'll need to update your code to match
-changes in the Android APIs.</p>
-
-<p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application. You can also look up
-specific changes in the Android APIs in the <em>Overview of Changes</em> and <em>
-API Diffs Report</em>, both available in the documentation included with the
-Android 1.0 SDK package.</p>
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
-
-<p>If you have modified one of the ApiDemos applications and would like to migrate it 
-to the new SDK, note that you will need to uninstall the version of ApiDemos that comes 
-preinstalled in the emulator.</p>
diff --git a/docs/html/sdk/1.1_r1/upgrading.jd b/docs/html/sdk/1.1_r1/upgrading.jd
deleted file mode 100644
index 840ae6b..0000000
--- a/docs/html/sdk/1.1_r1/upgrading.jd
+++ /dev/null
@@ -1,151 +0,0 @@
-page.title=Upgrading the SDK
-sdk.version=1.1_r1
-excludeFromSuggestions=true
-@jd:body
-
-<!--
-<div class="sidebox-wrapper">
-<div class="sidebox">
-
-     <h2>Useful Links</h2>
-
-      <ul class="noindent">
-        <li><a href="migrating/0.9-1.0/changes-overview.html">Overview of Changes</a>
-		      <p>A high-level look at what's changed in Android, with 
-		       discussion of how the changes may affect your apps.</p></li>
-
-        <li><a href="migrating/0.9-1.0/changes.html">API Diff Report</a> 
-                <p>A detailed report that lists all the specific changes in the latest SDK.</p></li>
-
-        <li><a href="RELEASENOTES.html">Release Notes</a> 
-                <p>Version details, known issues, and resolved issues. </p></li>
-
-        <li><a href="http://groups.google.com/group/android-developers">Android Developers Group</a> 
-            <p>A forum where you can discuss migration issues and learn from other Android developers. </p></li>
- 
-        <li><a href="http://code.google.com/p/android/issues/list">Android Issue Tracker</a>
-            <p>If you think you may have found a bug, use the issue tracker to report it.</p></li>
-      </ul>
-
-   </div>
-</div>
--->
-
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.0 SDK to the Android 1.1, Release 1 SDK.
-If you are migrating applications from an earlier SDK, please read the upgrading
-document available in the Android 1.0 SDK package.
-</p>
-
-<p>To ensure that your applications are compliant with the Android 1.1 system available 
-on mobile devices, you need to install the Android 1.1 SDK and port your existing Android 
-applications to it. The sections below will guide you through the process.</p>
-
-<h2 id="install-new">Installing the Latest SDK</h2>
-
-<p><a href="{@docRoot}sdk/1.1_r1/index.html">Download the SDK</a> and unpack it into a safe location.</p>
-
-<p>After unpacking the new SDK and saving it an appropriate location, you should:</p>
-
-<ul>
-  <li>Wipe your emulator data. <p>Some data formats have changed since the last
-  SDK release, so any previously saved data in your emulator must be removed. Open a console/terminal
-  and navigate to the <code>/tools</code> directory of your new SDK. Launch the 
-  emulator with the <code>-wipe-data</code> option. 
-  <p>Windows: <code>emulator -wipe-data</code><br/>
-   Mac/Linux: <code>./emulator -wipe-data</code></p>
-  </li>
-  <li>Update your PATH variable (Mac/Linux; optional). <p>If you had previously setup your 
-  PATH variable to point to the SDK tools directory, then you'll need to update it to 
-  point to the new SDK. For example, for a <code>.bashrc</code> or <code>.bash_profile</code> file:
-  <code>export PATH=$PATH:<em>&lt;your_new_sdk_dir></em>/tools</code></p>
-  </li>
-  <li>If (and only if) you are developing using Ant, you will also need to modify 
-  your build.xml properties to point to the new SDK. 
-  <p>Open the <code>default.properties</code> file associated with your build.xml 
-  file (typically located in the same directory). In the default.properties
-  file, update the <code>sdk-folder</code> property with the full path to
-  the new SDK directory.</p></li>
-</ul>
-
-<a name="Updating_the_ADT_plugin" id="Updating_the_ADT_plugin"></a>
-<h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
-
-<p>If you develop on Eclipse and are migrating from an Android 1.0
-SDK, no update of the ADT plugin is needed &mdash; skip to <a href="#updateEclipsePrefs">Update your Eclipse SDK Preferences</a>. </p>
-
-<p>If you are migrating from an earlier version of the SDK, you will
-need to update the ADT plugin. <p>You may also want to upgrade your 
-ADT plugin when a new version becomes available for your existing version 
-of the SDK.</p>
-
-<p>The steps below describe how to update the ADT plugin to the latest
-version available. </p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<ol>
-    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
-    <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
-    <li> If any update for ADT is available, select and install. </li>
-    <li> Restart Eclipse.</li>
-</ol>
-<p> Alternatively, </p>
-<ol>
-    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Manage Configuration</strong>. </li>
-
-    <li> Navigate down the tree and select <strong>Android Development Tools &lt;version&gt;</strong> </li>
-    <li> Select <strong>Scan for Updates</strong> under <strong>Available Tasks</strong>.</li>
-</ol>
-</td>
-<td>
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Click <strong>Update...</strong></li>
-    <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-</tr>
-</table>
-
-<h2 id="updateEclipsePrefs">Update your Eclipse SDK Preferences</h2>
-
-<p>The last step is to update your Eclipse preferences to point to the new SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences...</strong> to open the Preferences panel. (Mac OSX: <strong>Eclipse</strong> > <strong>Preferences</strong>)</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-<h2 id="migrate">Migrate Your Applications, if Necessary</h2>
-
-<p>If (and only if) you have written apps in an SDK released previous to
-the Android 1.0 SDK, you will need to migrate your applications. After
-installing the new SDK and updating the ADT Plugin (if applicable), you
-may encounter breakages in your application code, due to 
-framework and API changes. You'll need to update your code to match the
-latest APIs.</p>
-
-<p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application. You can also look up
-specific changes in the Android APIs in the 
-<a href="{@docRoot}sdk/android-1.1.html#api-changes">Android 1.1 Version 
-Notes</a> document.</p>
-
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
-
-<p>If you have modified one of the ApiDemos applications and would like to migrate it 
-to the new SDK, note that you will need to uninstall the version of ApiDemos that comes 
-preinstalled in the emulator. For more information, or if you encounter an "reinstallation" 
-error when running or installing ApiDemos, see the troubleshooting topic 
-<a href="{@docRoot}resources/faq/troubleshooting.html#apidemosreinstall">I can't install ApiDemos 
-apps in my IDE because of a signing error</a> for information about how to solve the problem.</p>
-
diff --git a/docs/html/sdk/1.5_r1/upgrading.jd b/docs/html/sdk/1.5_r1/upgrading.jd
deleted file mode 100644
index 0377069..0000000
--- a/docs/html/sdk/1.5_r1/upgrading.jd
+++ /dev/null
@@ -1,396 +0,0 @@
-page.title=Upgrading the SDK
-sdk.version=1.5_r1
-excludeFromSuggestions=true
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Upgrading quickview</h2>
-  <ul>
-    <li>The Android 1.5 SDK uses a new project structure and a new ADT plugin (ADT 0.9). </li>
-    <li>To move existing projects into the SDK, you must make some minor changes in your 
-    development environment.</li>
-    <li>The new ADT plugin (ADT 0.9) <em>is not compatible</em> with projects created in previous SDKs.</li>
-    <li>You need to uninstall your existing ADT plugin, before installing ADT 0.9.</li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Install">Install the SDK</a></li>
-    <li><a href="#UpdateAdt">Update Your Eclipse ADT Plugin</a></li>
-    <li><a href="#UpdateYourProjects">Update Your Projects</a>
-      <ol>
-        <li><a href="#EclipseUsers">Eclipse Users</a></li>
-        <li><a href="#AntUsers">Ant Users</a></li>
-      </ol>
-    </li>
-    <li><a href="#MigrateYourApplications">Migrate Your Applications</a>
-      <ol><li><a href="#FutureProofYourApps">Future-proof your apps</a></li></ol>
-    </li>
-  </ol>
-  
-  <h2>Migrating references</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps &raquo;</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.0 or 1.1 SDK to the Android 1.5 SDK.
-If you are migrating applications from an SDK older than 1.0, please also read the upgrading
-document available in the Android 1.0 SDK package.</p>
-
-<p>There are several compelling reasons to upgrade, such as new SDK tools
-that make developing more efficient and new APIs that allow you to expand the feature-set
-of your applications. However, even if you or your applications don't require these enhancements,
-it's important that you upgrade to ensure that your applications run properly on the 
-Android 1.5 platform.</p>
-
-<p>The Android 1.5 platform will soon be deployable to devices around the world.
-If you have already released Android applications to the public, you should
-test the forward-compatibility of your applications on the latest version of the platform
-as soon as possible. It's unlikely that you'll encounter breakage in your applications, but
-in the interest of maintaining the best user experience, you should take no risks.
-So, please install the new Android SDK and test your applications on Android 1.5.</p>
-
-<p>For more information on new SDK features and system changes, 
-see the <a href="{@docRoot}sdk/android-1.5.html">Android 1.5 Version Notes</a>.</p>
-
-
-<h2 id="Install">Install the SDK</h2>
-
-<p>If you haven't yet downloaded the SDK, <a href="{@docRoot}sdk/1.5_r1/index.html">download from here</a> 
-and unpack it into a safe location.</p>
-
-<p><strong>Before you begin:</strong>
-If you had previously setup your PATH variable to point to the SDK tools directory, 
-then you need to update it to point to the new SDK. For example, for a 
-<code>.bashrc</code> or <code>.bash_profile</code> file:</p>
-<pre>export PATH=$PATH:<em>&lt;your_sdk_dir></em>/tools</pre>
-
-<p>If you don't use Eclipse for development,
-skip to <a href="#updateYourProjects">Update Your Projects</a>.</p>
-
-
-<h2 id="UpdateAdt">Update Your Eclipse ADT Plugin</h2>
-
-<p><em>If you installed ADT-0.9_pre with the early look 1.5 SDK, there have been
-additional changes, so please continue with this guide and update to the final ADT 0.9.</em></p>
-
-<p>A new ADT plugin (version 0.9) is required for the Android 1.5 SDK.
-Because the component structure has been changed since Android 1.1, 
-the Android 1.5 SDK does not work with ADT 0.8 (or older) and previously installed SDKs will not
-work with ADT 0.9. However, the Android 1.5 SDK includes an Android 1.1 SDK image that you
-can build against while using ADT 0.9. </p>
-
-<p class="note">For information about using different system images (such as Android 1.1) 
-while running this SDK, see Developing <a href="{@docRoot}guide/developing/eclipse-adt.html">
-In Eclipse, with ADT</a> or <a href="{@docRoot}guide/developing/other-ide.html">In 
-Other IDEs</a>, as appropriate for your development environment.</p>
-
-<p>In order to upgrade your Eclipse IDE to use the new 0.9 ADT, follow the steps below
-for your respective version of Eclipse.</p>
-
-<h3 id="uninstallAdt">Uninstall your previous ADT plugin</h3>
-
-<p>You must uninstall your existing ADT plugin (0.8 or older). If you do not uninstall it,
-you will get a conflict with the Android Editors when installing the new ADT.
-(If you have already installed ADT-0.9_pre with the early look 1.5 SDK, you can skip this
-uninstall procedure and continue to <a href="#installAdt">Install the 0.9 ADT plugin</a>).</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Manage Configuration</strong>. </li>
-    <li>Expand the list in the left panel to reveal the installed tools.</li>
-    <li>Right-click "Android Editors" and click <strong>Uninstall</strong>. Click <strong>OK</strong> 
-    to confirm.</li>
-    <li>Restart Eclipse. 
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Select "Android Editors". Click <strong>Uninstall</strong>.</li>
-    <li>In the next window, be sure "Android Editors" is checked, then click <strong>Finish</strong>
-    to uninstall.</li>
-    <li>Restart Eclipse.
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-</tr>
-</table>
-
-
-<h3 id="installAdt">Install the 0.9 ADT plugin</h3>
-
-<p>Only install the new plugin once you've completed the procedure to
-<a href="#uninstallAdt">Uninstall your previous ADT plugin</a>.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Find and Install</strong>. </li>
-    <li>Select <strong>Search for new features to install</strong>.</li>
-    <li>Select the Android plugin entry by checking the box next to it, 
-      then click <strong>Finish</strong>.
-      <p>(Your original entry for the plugin should still be here. If not, see the guide
-      to <a href="{@docRoot}sdk/1.5_r1/installing.html#installingplugin">Installing the ADT Plugin</a>.)
-      </p></li>
-    <li>In the results, expand the entry for the Android plugin and
-      be sure that "Developer Tools" is checked, then click <strong>Next</strong>.
-      (This will install "Android DDMS" and "Android Development Tools".)</li>
-    <li>Read and accept the license agreement, then click <strong>Next</strong>.
-    <li>In the next window, click <strong>Finish</strong> to start installation.</li>
-    <li>The ADT plugin is not digitally signed. Accept the installation anyway by clicking 
-    <strong>Install All</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Available Software</strong> tab.</li>
-    <li>Expand the entry for the Andriod plugin (may be listed as the location URL)
-      and select "Developer Tools" by checking the box next to it, then click 
-      <strong>Install</strong>.</li>
-    <li>On the next window, "Android DDMS" and "Android Development Tools" 
-    should both be checked. Click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-</tr>
-</table>
-
-<p>If you encounter problems, ensure your ADT is fully uninstalled and then
-follow the guide to 
-<a href="{@docRoot}sdk/1.5_r1/installing.html#installingplugin">Installing the ADT Plugin
-for Eclipse</a>.</p>
-
-<h3 id="updateEclipsePrefs">Update your Eclipse SDK Preferences</h3>
-
-<p>The last step is to update your Eclipse preferences to point to the new SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences</strong> to open the Preferences 
-      panel (Mac: <strong>Eclipse</strong> > <strong>Preferences</strong>).</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse</strong> 
-      and locate your SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-
-<h2 id="UpdateYourProjects">Update Your Projects</h2>
-
-<p>You will now need to update any and all Android projects that you have
-developed using a previous version of the Android SDK.</p>
-
-
-<h3 id="EclipseUsers">Eclipse users</h3>
-
-<p>If you use Eclipse to develop applications, use the following procedure to 
-update each project:</p>
-
-<ol>
-  <li>Right-click on the individual project (in the Package Explorer)
-   and select <strong>Properties</strong>.</li>
-  <li>In the properties, open the Android panel and select a "build target" to compile 
-    against. This SDK offers the Android 1.1 and Android 1.5 platforms to choose from. When 
-    you are initially updating your projects to the new SDK, we recommend that you select a build 
-    target with the Android 1.1 platform. Click <strong>Apply</strong>, then 
-    <strong>OK</strong>.</li>
-</ol>
-
-<p>The new plugin creates a <code>gen/</code> folder in your project, in which it puts the 
-<code>R.java</code> file
-and all automatically generated AIDL java files. If you get an error such as 
-<code>The type R is already defined</code>, 
-then you probably need to delete your old <code>R.java</code> or your old auto-generated
-AIDL Java files in the <code>src/</code> folder.
-(This <em>does not</em> apply to your own hand-crafted parcelable AIDL java files.)</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h3 id="AntUsers">Ant users</h3>
-
-<p>If you build your projects using the Ant tool (rather than with Eclipse), note the 
-following changes with the new SDK tools.</p>
-
-<h4>build.xml has changed</h4>
-
-<p>You must re-create your <code>build.xml</code> file.</p>
-
-<p>If you had customized your <code>build.xml</code>, first make a copy of it:</p>
-
-<pre>
-$ cd <em>my-project</em>
-$ cp build.xml build.xml.old
-</pre>
-
-<p>Now use the new <code>android</code> tool (located in <code><em>your_sdk</em>/tools/</code>) 
-to create a new <code>build.xml</code> that references 
-a specific platform target:</p>
-
-<pre>$ android update project --path /path/to/my-project --target 1</pre>
-
-<p>The "target" corresponds to an Android platform library (including any add-ons, such as 
-Google APIs) that you would like to build your project against. You can view a list of available 
-targets (and their corresponding integer ID) with the command, <code>android list targets</code>. 
-When you are initially updating your projects to the new SDK, we recommend that you select the 
-first target ("1"), which uses the Android 1.1 platform library.</p>
-
-<p>A <code>gen/</code> folder will be created the first time you build and your <code>R.java</code> and
-your AIDL Java files will be generated in here. You <strong>must</strong> remove
-the old <code>R.java</code> and old auto-generated AIDL java files from the 
-<code>src/</code> folder. (This
-does not apply to your own hand-crafted parcelabe AIDL java files.)</p>
-
-<p class="note"><strong>Note:</strong> The "activitycreator" tool has been replaced 
-by the new "android" tool. For information on creating new projects with the android tool,
-see the documentation about <a href="{@docRoot}guide/developing/other-ide.html">Developing 
-In Other IDEs</a>.</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h2 id="MigrateYourApplications">Migrate Your Applications</h2>
-
-<p>After you have completed the process above to <a href="#UpdateYourProjects">Update Your 
-Projects</a>, you are strongly encouraged to run each of your applications in an instance
-of the emulator running the Android 1.5 system image. It's possible (however, unlikely) 
-that you'll encounter some breakage in your application when you run your applications on
-the Android 1.5 system image. Whether you believe your application will be affected by 
-platform changes or not, it's very important that you test the application's 
-forward-compatibility on Android 1.5.</p>
-
-<p>To test forward-compatibility, simply run your existing application (as-is) on an Android
-Emulator that's running the Android 1.5 system image. The following procedure will guide
-you through the process to running your existing applications on an emulator. <em>Please read
-the following guide completely before you begin</em>.</p>
-
-<p>To test your application on an emulator running Android 1.5:</p>
-<ol>
-  <li><a href="#UpdateYourProjects">Update Your Project</a> (you should have done this 
-  already, in the section above).</li>
-  <li>Run your existing project, as-is, on an emulator running the Android 1.5 system image.
-    <p>As mentioned in the guide to <a href="#UpdateYourProjects">Update Your Projects</a>, 
-    you should have selected a "build
-    target" of "1", which compiles your application against the Android 1.1 system image, so there
-    should be no new errors in your code.</p>
-    <p>Eclipse users: follow the 
-    <a href="{@docRoot}guide/developing/eclipse-adt.html#Running">Eclipse guide to 
-    Running Your Application</a>.</p>
-    <p>Ant users: follow the 
-    <a href="{@docRoot}guide/developing/other-ide.html#Running">Ant guide to 
-    Running Your Application</a>
-    <p>During the procedure to Running Your Application, select a "deployment target" 
-    for the AVD that includes the Android 1.5 platform. 
-    If your application utilizes the Google Maps APIs (i.e.,
-    MapView), be certain to select a target that includes the Google APIs.</p>
-    <p>Once you complete the procedures to run your application in your respective environment,
-    linked above, return here.</p>
-  </li>
-  <li>With your application running in the emulator, perform all regular testing on the application
-  to ensure that it functions normally (in both landscape and portrait orientations).</li>
-</ol>
-
-<p>Chances are, your application runs just fine on the Android 1.5 platform &mdash; 
-new devices will be able to safely install and run your application and
-current users who update their devices will be able to continue using your application as usual.
-However, if something doesn't work the way you expect, then you might need to revisit
-your project and make any necessary changes to your code.</p>
-
-<p>You can check for code breakages caused by API changes by opening your project 
-in Eclipse, changing the "build target" to one using the Android 1.5 platform,
-and see where the ADT identifies errors in your code.</p>
-
-
-<h3 id="FutureProofYourApps">Future-proof your apps</h3>
-
-<p>There have been several API additions made for this release, but there have been
-very few actual API <em>changes</em>. Only a couple (relatively unused) elements 
-have been removed and a few have been deprecated, so your applications written with the 
-Android 1.1 system library should work just fine. However, 
-your application is more likely to encounter problems on Android 1.5
-if it performs any of the following:</p>
-
-<ul>
-  <li>Uses internal APIs. That is, APIs that are not officially supported
-  and not available in the reference documentation. Any un-official APIs are always subject
-  to change (which is why they're un-official) and some have indeed changed.
-  </li>
-  <li>Directly manipulates system settings. There are some settings (such as
-  GPS, data roaming, bluetooth and others) that used to be writable by 
-  applications but have been changed so that they can only be explicitly modified by the user
-  through the system settings. Refer to {@link android.provider.Settings.Secure}
-  to see which settings are now secured and cannot be directly changed by your application.
-  </li>
-  <li>Uses View hierarchies that are unreasonably deep (more than 10 or so levels) or 
-  broad (more than 30 total). View hierarchies this big have always been troublesome, but 
-  Android 1.5 is much more efficient at exposing this and your application may crash.
-  </li>
-  <li>Makes assumptions about the available hardware. With new support for soft keyboards,
-  not all devices will have full QWERTY keyboards on the hardware. So if your application
-  listens for special keypress events that only occur on a keypad, then your application
-  should degrade gracefully when there is no keyboard available.
-  </li>
-  <li>Performs its own layout orientation changes based on the acceletometer (or via other
-  sensors). Some devices running Android 1.5 will automatically rotate the orientation
-  (and all devices have the option to turn on auto-rotation), so if your application also
-  attempts to rotate the orientation, it can result in strange behavior. In addition, if your
-  application uses the accelerometer to detect shaking and you do not want to rotate the 
-  orientation, then you should lock the current orientation with 
-  <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">android:screenOrientation</a>.
-  </li>
-</ul>
-
-<p>Please read our blog post on <a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps</a> for more information on the issues mentioned above.</p>
-
-<p>For information
-about other changes made to Android 1.5, refer to the following documents:</p>
-<ul>
-  <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-  <li><a href="{@docRoot}sdk/android-1.5.html#api-changes">Android 1.5 Version Notes</a></li> 
-  <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-</ul>
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
diff --git a/docs/html/sdk/1.5_r2/upgrading.jd b/docs/html/sdk/1.5_r2/upgrading.jd
deleted file mode 100644
index 31b2358..0000000
--- a/docs/html/sdk/1.5_r2/upgrading.jd
+++ /dev/null
@@ -1,396 +0,0 @@
-page.title=Upgrading the SDK
-sdk.version=1.5_r2
-excludeFromSuggestions=true
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Upgrading the SDK</h2>
-  <ul>
-    <li>The Android 1.5 SDK uses a new project structure and a new ADT plugin (ADT 0.9). </li>
-    <li>To move existing projects into the SDK, you must make some minor changes in your 
-    development environment.</li>
-    <li>The new ADT plugin (ADT 0.9) <em>is not compatible</em> with projects created in previous SDKs.</li>
-    <li>You need to uninstall your existing ADT plugin, before installing ADT 0.9.</li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Install">Install the SDK</a></li>
-    <li><a href="#UpdateAdt">Update Your Eclipse ADT Plugin</a></li>
-    <li><a href="#UpdateYourProjects">Update Your Projects</a>
-      <ol>
-        <li><a href="#EclipseUsers">Eclipse Users</a></li>
-        <li><a href="#AntUsers">Ant Users</a></li>
-      </ol>
-    </li>
-    <li><a href="#MigrateYourApplications">Migrate Your Applications</a>
-      <ol><li><a href="#FutureProofYourApps">Future-proof your apps</a></li></ol>
-    </li>
-  </ol>
-  
-  <h2>Migrating references</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps &raquo;</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.0 or 1.1 SDK to the Android 1.5 SDK.
-If you are migrating applications from an SDK older than 1.0, please also read the upgrading
-document available in the Android 1.0 SDK package.</p>
-
-<p>There are several compelling reasons to upgrade, such as new SDK tools
-that make developing more efficient and new APIs that allow you to expand the feature-set
-of your applications. However, even if you or your applications don't require these enhancements,
-it's important that you upgrade to ensure that your applications run properly on the 
-Android 1.5 platform.</p>
-
-<p>The Android 1.5 platform will soon be deployable to devices around the world.
-If you have already released Android applications to the public, you should
-test the forward-compatibility of your applications on the latest version of the platform
-as soon as possible. It's unlikely that you'll encounter breakage in your applications, but
-in the interest of maintaining the best user experience, you should take no risks.
-So, please install the new Android SDK and test your applications on Android 1.5.</p>
-
-<p>For more information on new SDK features and system changes, 
-see the <a href="{@docRoot}sdk/android-1.5.html">Android 1.5 Version Notes</a>.</p>
-
-
-<h2 id="Install">Install the SDK</h2>
-
-<p>If you haven't yet downloaded the SDK, <a href="{@docRoot}sdk/1.5_r2/index.html">download from here</a> 
-and unpack it into a safe location.</p>
-
-<p><strong>Before you begin:</strong>
-If you had previously setup your PATH variable to point to the SDK tools directory, 
-then you need to update it to point to the new SDK. For example, for a 
-<code>.bashrc</code> or <code>.bash_profile</code> file:</p>
-<pre>export PATH=$PATH:<em>&lt;your_sdk_dir></em>/tools</pre>
-
-<p>If you don't use Eclipse for development,
-skip to <a href="#updateYourProjects">Update Your Projects</a>.</p>
-
-
-<h2 id="UpdateAdt">Update Your Eclipse ADT Plugin</h2>
-
-<p><em>If you installed ADT-0.9_pre with the early look 1.5 SDK, there have been
-additional changes, so please continue with this guide and update to the final ADT 0.9.</em></p>
-
-<p>A new ADT plugin (version 0.9) is required for the Android 1.5 SDK.
-Because the component structure has been changed since Android 1.1, 
-the Android 1.5 SDK does not work with ADT 0.8 (or older) and previously installed SDKs will not
-work with ADT 0.9. However, the Android 1.5 SDK includes an Android 1.1 SDK image that you
-can build against while using ADT 0.9. </p>
-
-<p class="note">For information about using different system images (such as Android 1.1) 
-while running this SDK, see Developing <a href="{@docRoot}guide/developing/eclipse-adt.html">
-In Eclipse, with ADT</a> or <a href="{@docRoot}guide/developing/other-ide.html">In 
-Other IDEs</a>, as appropriate for your development environment.</p>
-
-<p>In order to upgrade your Eclipse IDE to use the new 0.9 ADT, follow the steps below
-for your respective version of Eclipse.</p>
-
-<h3 id="uninstallAdt">Uninstall your previous ADT plugin</h3>
-
-<p>You must uninstall your existing ADT plugin (0.8 or older). If you do not uninstall it,
-you will get a conflict with the Android Editors when installing the new ADT.
-(If you have already installed ADT-0.9_pre with the early look 1.5 SDK, you can skip this
-uninstall procedure and continue to <a href="#installAdt">Install the 0.9 ADT plugin</a>).</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Manage Configuration</strong>. </li>
-    <li>Expand the list in the left panel to reveal the installed tools.</li>
-    <li>Right-click "Android Editors" and click <strong>Uninstall</strong>. Click <strong>OK</strong> 
-    to confirm.</li>
-    <li>Restart Eclipse. 
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Select "Android Editors". Click <strong>Uninstall</strong>.</li>
-    <li>In the next window, be sure "Android Editors" is checked, then click <strong>Finish</strong>
-    to uninstall.</li>
-    <li>Restart Eclipse.
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-</tr>
-</table>
-
-
-<h3 id="installAdt">Install the 0.9 ADT plugin</h3>
-
-<p>Only install the new plugin once you've completed the procedure to
-<a href="#uninstallAdt">Uninstall your previous ADT plugin</a>.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Find and Install</strong>. </li>
-    <li>Select <strong>Search for new features to install</strong>.</li>
-    <li>Select the Android plugin entry by checking the box next to it, 
-      then click <strong>Finish</strong>.
-      <p>(Your original entry for the plugin should still be here. If not, see the guide
-      to <a href="{@docRoot}sdk/1.5_r2/installing.html#installingplugin">Installing the ADT Plugin</a>.)
-      </p></li>
-    <li>In the results, expand the entry for the Android plugin and
-      be sure that "Developer Tools" is checked, then click <strong>Next</strong>.
-      (This will install "Android DDMS" and "Android Development Tools".)</li>
-    <li>Read and accept the license agreement, then click <strong>Next</strong>.
-    <li>In the next window, click <strong>Finish</strong> to start installation.</li>
-    <li>The ADT plugin is not digitally signed. Accept the installation anyway by clicking 
-    <strong>Install All</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Available Software</strong> tab.</li>
-    <li>Expand the entry for the Andriod plugin (may be listed as the location URL)
-      and select "Developer Tools" by checking the box next to it, then click 
-      <strong>Install</strong>.</li>
-    <li>On the next window, "Android DDMS" and "Android Development Tools" 
-    should both be checked. Click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-</tr>
-</table>
-
-<p>If you encounter problems, ensure your ADT is fully uninstalled and then
-follow the guide to 
-<a href="{@docRoot}sdk/1.5_r2/installing.html#installingplugin">Installing the ADT Plugin
-for Eclipse</a>.</p>
-
-<h3 id="updateEclipsePrefs">Update your Eclipse SDK Preferences</h3>
-
-<p>The last step is to update your Eclipse preferences to point to the new SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences</strong> to open the Preferences 
-      panel (Mac: <strong>Eclipse</strong> > <strong>Preferences</strong>).</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse</strong> 
-      and locate your SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-
-<h2 id="UpdateYourProjects">Update Your Projects</h2>
-
-<p>You will now need to update any and all Android projects that you have
-developed using a previous version of the Android SDK.</p>
-
-
-<h3 id="EclipseUsers">Eclipse users</h3>
-
-<p>If you use Eclipse to develop applications, use the following procedure to 
-update each project:</p>
-
-<ol>
-  <li>Right-click on the individual project (in the Package Explorer)
-   and select <strong>Properties</strong>.</li>
-  <li>In the properties, open the Android panel and select a "build target" to compile 
-    against. This SDK offers the Android 1.1 and Android 1.5 platforms to choose from. When 
-    you are initially updating your projects to the new SDK, we recommend that you select a build 
-    target with the Android 1.1 platform. Click <strong>Apply</strong>, then 
-    <strong>OK</strong>.</li>
-</ol>
-
-<p>The new plugin creates a <code>gen/</code> folder in your project, in which it puts the 
-<code>R.java</code> file
-and all automatically generated AIDL java files. If you get an error such as 
-<code>The type R is already defined</code>, 
-then you probably need to delete your old <code>R.java</code> or your old auto-generated
-AIDL Java files in the <code>src/</code> folder.
-(This <em>does not</em> apply to your own hand-crafted parcelable AIDL java files.)</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h3 id="AntUsers">Ant users</h3>
-
-<p>If you build your projects using the Ant tool (rather than with Eclipse), note the 
-following changes with the new SDK tools.</p>
-
-<h4>build.xml has changed</h4>
-
-<p>You must re-create your <code>build.xml</code> file.</p>
-
-<p>If you had customized your <code>build.xml</code>, first make a copy of it:</p>
-
-<pre>
-$ cd <em>my-project</em>
-$ cp build.xml build.xml.old
-</pre>
-
-<p>Now use the new <code>android</code> tool (located in <code><em>your_sdk</em>/tools/</code>) 
-to create a new <code>build.xml</code> that references 
-a specific platform target:</p>
-
-<pre>$ android update project --path /path/to/my-project --target 1</pre>
-
-<p>The "target" corresponds to an Android platform library (including any add-ons, such as 
-Google APIs) that you would like to build your project against. You can view a list of available 
-targets (and their corresponding integer ID) with the command, <code>android list targets</code>. 
-When you are initially updating your projects to the new SDK, we recommend that you select the 
-first target ("1"), which uses the Android 1.1 platform library.</p>
-
-<p>A <code>gen/</code> folder will be created the first time you build and your <code>R.java</code> and
-your AIDL Java files will be generated in here. You <strong>must</strong> remove
-the old <code>R.java</code> and old auto-generated AIDL java files from the 
-<code>src/</code> folder. (This
-does not apply to your own hand-crafted parcelabe AIDL java files.)</p>
-
-<p class="note"><strong>Note:</strong> The "activitycreator" tool has been replaced 
-by the new "android" tool. For information on creating new projects with the android tool,
-see the documentation about <a href="{@docRoot}guide/developing/other-ide.html">Developing 
-In Other IDEs</a>.</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h2 id="MigrateYourApplications">Migrate Your Applications</h2>
-
-<p>After you have completed the process above to <a href="#UpdateYourProjects">Update Your 
-Projects</a>, you are strongly encouraged to run each of your applications in an instance
-of the emulator running the Android 1.5 system image. It's possible (however, unlikely) 
-that you'll encounter some breakage in your application when you run your applications on
-the Android 1.5 system image. Whether you believe your application will be affected by 
-platform changes or not, it's very important that you test the application's 
-forward-compatibility on Android 1.5.</p>
-
-<p>To test forward-compatibility, simply run your existing application (as-is) on an Android
-Emulator that's running the Android 1.5 system image. The following procedure will guide
-you through the process to running your existing applications on an emulator. <em>Please read
-the following guide completely before you begin</em>.</p>
-
-<p>To test your application on an emulator running Android 1.5:</p>
-<ol>
-  <li><a href="#UpdateYourProjects">Update Your Project</a> (you should have done this 
-  already, in the section above).</li>
-  <li>Run your existing project, as-is, on an emulator running the Android 1.5 system image.
-    <p>As mentioned in the guide to <a href="#UpdateYourProjects">Update Your Projects</a>, 
-    you should have selected a "build
-    target" of "1", which compiles your application against the Android 1.1 system image, so there
-    should be no new errors in your code.</p>
-    <p>Eclipse users: follow the 
-    <a href="{@docRoot}guide/developing/eclipse-adt.html#Running">Eclipse guide to 
-    Running Your Application</a>.</p>
-    <p>Ant users: follow the 
-    <a href="{@docRoot}guide/developing/other-ide.html#Running">Ant guide to 
-    Running Your Application</a>
-    <p>During the procedure to Running Your Application, select a "deployment target" 
-    for the AVD that includes the Android 1.5 platform. 
-    If your application utilizes the Google Maps APIs (i.e.,
-    MapView), be certain to select a target that includes the Google APIs.</p>
-    <p>Once you complete the procedures to run your application in your respective environment,
-    linked above, return here.</p>
-  </li>
-  <li>With your application running in the emulator, perform all regular testing on the application
-  to ensure that it functions normally (in both landscape and portrait orientations).</li>
-</ol>
-
-<p>Chances are, your application runs just fine on the Android 1.5 platform &mdash; 
-new devices will be able to safely install and run your application and
-current users who update their devices will be able to continue using your application as usual.
-However, if something doesn't work the way you expect, then you might need to revisit
-your project and make any necessary changes to your code.</p>
-
-<p>You can check for code breakages caused by API changes by opening your project 
-in Eclipse, changing the "build target" to one using the Android 1.5 platform,
-and see where the ADT identifies errors in your code.</p>
-
-
-<h3 id="FutureProofYourApps">Future-proof your apps</h3>
-
-<p>There have been several API additions made for this release, but there have been
-very few actual API <em>changes</em>. Only a couple (relatively unused) elements 
-have been removed and a few have been deprecated, so your applications written with the 
-Android 1.1 system library should work just fine. However, 
-your application is more likely to encounter problems on Android 1.5
-if it performs any of the following:</p>
-
-<ul>
-  <li>Uses internal APIs. That is, APIs that are not officially supported
-  and not available in the reference documentation. Any un-official APIs are always subject
-  to change (which is why they're un-official) and some have indeed changed.
-  </li>
-  <li>Directly manipulates system settings. There are some settings (such as
-  GPS, data roaming, bluetooth and others) that used to be writable by 
-  applications but have been changed so that they can only be explicitly modified by the user
-  through the system settings. Refer to {@link android.provider.Settings.Secure}
-  to see which settings are now secured and cannot be directly changed by your application.
-  </li>
-  <li>Uses View hierarchies that are unreasonably deep (more than 10 or so levels) or 
-  broad (more than 30 total). View hierarchies this big have always been troublesome, but 
-  Android 1.5 is much more efficient at exposing this and your application may crash.
-  </li>
-  <li>Makes assumptions about the available hardware. With new support for soft keyboards,
-  not all devices will have full QWERTY keyboards on the hardware. So if your application
-  listens for special keypress events that only occur on a keypad, then your application
-  should degrade gracefully when there is no keyboard available.
-  </li>
-  <li>Performs its own layout orientation changes based on the acceletometer (or via other
-  sensors). Some devices running Android 1.5 will automatically rotate the orientation
-  (and all devices have the option to turn on auto-rotation), so if your application also
-  attempts to rotate the orientation, it can result in strange behavior. In addition, if your
-  application uses the accelerometer to detect shaking and you do not want to rotate the 
-  orientation, then you should lock the current orientation with 
-  <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">android:screenOrientation</a>.
-  </li>
-</ul>
-
-<p>Please read our blog post on <a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps</a> for more information on the issues mentioned above.</p>
-
-<p>For information
-about other changes made to Android 1.5, refer to the following documents:</p>
-<ul>
-  <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-  <li><a href="{@docRoot}sdk/android-1.5.html#api-changes">Android 1.5 Version Notes</a></li> 
-  <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-</ul>
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
diff --git a/docs/html/sdk/1.5_r3/upgrading.jd b/docs/html/sdk/1.5_r3/upgrading.jd
deleted file mode 100644
index 62b9a78..0000000
--- a/docs/html/sdk/1.5_r3/upgrading.jd
+++ /dev/null
@@ -1,398 +0,0 @@
-page.title=Upgrading the SDK
-sdk.version=1.5
-sdk.rel.id=3
-excludeFromSuggestions=true
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Upgrading the SDK</h2>
-  <ul>
-    <li>The Android 1.5 SDK uses a new project structure and a new ADT plugin (ADT 0.9). </li>
-    <li>To move existing projects into the SDK, you must make some minor changes in your 
-    development environment.</li>
-    <li>The new ADT plugin (ADT 0.9) <em>is not compatible</em> with projects created in previous SDKs.</li>
-    <li>You need to uninstall your existing ADT plugin, before installing ADT 0.9.</li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Install">Install the SDK</a></li>
-    <li><a href="#UpdateAdt">Update Your Eclipse ADT Plugin</a></li>
-    <li><a href="#UpdateYourProjects">Update Your Projects</a>
-      <ol>
-        <li><a href="#EclipseUsers">Eclipse Users</a></li>
-        <li><a href="#AntUsers">Ant Users</a></li>
-      </ol>
-    </li>
-    <li><a href="#MigrateYourApplications">Migrate Your Applications</a>
-      <ol><li><a href="#FutureProofYourApps">Future-proof your apps</a></li></ol>
-    </li>
-  </ol>
-  
-  <h2>Migrating references</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps &raquo;</a></li>
-    <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.0 or 1.1 SDK to the Android 1.5 SDK.
-If you are migrating applications from an SDK older than 1.0, please also read the upgrading
-document available in the Android 1.0 SDK package.</p>
-
-<p>There are several compelling reasons to upgrade, such as new SDK tools
-that make developing more efficient and new APIs that allow you to expand the feature-set
-of your applications. However, even if you or your applications don't require these enhancements,
-it's important that you upgrade to ensure that your applications run properly on the 
-Android 1.5 platform.</p>
-
-<p>The Android 1.5 platform will soon be deployable to devices around the world.
-If you have already released Android applications to the public, you should
-test the forward-compatibility of your applications on the latest version of the platform
-as soon as possible. It's unlikely that you'll encounter breakage in your applications, but
-in the interest of maintaining the best user experience, you should take no risks.
-So, please install the new Android SDK and test your applications on Android 1.5.</p>
-
-<p>For more information on new SDK features and system changes, 
-see the <a href="{@docRoot}sdk/android-1.5.html">Android 1.5 Version Notes</a>.</p>
-
-
-<h2 id="Install">Install the SDK</h2>
-
-<p>If you haven't yet downloaded the SDK, <a href="index.html">download from here</a> 
-and unpack it into a safe location.</p>
-
-<p><strong>Before you begin:</strong>
-If you had previously setup your PATH variable to point to the SDK tools directory, 
-then you need to update it to point to the new SDK. For example, for a 
-<code>.bashrc</code> or <code>.bash_profile</code> file:</p>
-<pre>export PATH=$PATH:<em>&lt;your_sdk_dir></em>/tools</pre>
-
-<p>If you don't use Eclipse for development,
-skip to <a href="#updateYourProjects">Update Your Projects</a>.</p>
-
-
-<h2 id="UpdateAdt">Update Your Eclipse ADT Plugin</h2>
-
-<p><em>If you installed ADT-0.9_pre with the early look 1.5 SDK, there have been
-additional changes, so please continue with this guide and update to the final ADT 0.9.</em></p>
-
-<p>A new ADT plugin (version 0.9) is required for the Android 1.5 SDK.
-Because the component structure has been changed since Android 1.1, 
-the Android 1.5 SDK does not work with ADT 0.8 (or older) and previously installed SDKs will not
-work with ADT 0.9. However, the Android 1.5 SDK includes an Android 1.1 SDK image that you
-can build against while using ADT 0.9. </p>
-
-<p class="note">For information about using different system images (such as Android 1.1) 
-while running this SDK, see Developing <a href="{@docRoot}guide/developing/eclipse-adt.html">
-In Eclipse, with ADT</a> or <a href="{@docRoot}guide/developing/other-ide.html">In 
-Other IDEs</a>, as appropriate for your development environment.</p>
-
-<p>In order to upgrade your Eclipse IDE to use the new 0.9 ADT, follow the steps below
-for your respective version of Eclipse.</p>
-
-<h3 id="uninstallAdt">Uninstall your previous ADT plugin</h3>
-
-<p>You must uninstall your existing ADT plugin (0.8 or older). If you do not uninstall it,
-you will get a conflict with the Android Editors when installing the new ADT.
-(If you have already installed ADT-0.9_pre with the early look 1.5 SDK, you can skip this
-uninstall procedure and continue to <a href="#installAdt">Install the 0.9 ADT plugin</a>).</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Manage Configuration</strong>. </li>
-    <li>Expand the list in the left panel to reveal the installed tools.</li>
-    <li>Right-click "Android Editors" and click <strong>Uninstall</strong>. Click <strong>OK</strong> 
-    to confirm.</li>
-    <li>Restart Eclipse. 
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Select "Android Editors". Click <strong>Uninstall</strong>.</li>
-    <li>In the next window, be sure "Android Editors" is checked, then click <strong>Finish</strong>
-    to uninstall.</li>
-    <li>Restart Eclipse.
-      <p>(Do not uninstall "Android Development Tools".)</p></li>
-</ol>
-</td>
-</tr>
-</table>
-
-
-<h3 id="installAdt">Install the 0.9 ADT plugin</h3>
-
-<p>Only install the new plugin once you've completed the procedure to
-<a href="#uninstallAdt">Uninstall your previous ADT plugin</a>.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.3 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; 
-      <strong>Find and Install</strong>. </li>
-    <li>Select <strong>Search for new features to install</strong>.</li>
-    <li>Select the Android plugin entry by checking the box next to it, 
-      then click <strong>Finish</strong>.
-      <p>(Your original entry for the plugin should still be here. If not, see the guide
-      to <a href="installing.html#installingplugin">Installing the ADT Plugin</a>.)
-      </p></li>
-    <li>In the results, expand the entry for the Android plugin and
-      be sure that "Developer Tools" is checked, then click <strong>Next</strong>.
-      (This will install "Android DDMS" and "Android Development Tools".)</li>
-    <li>Read and accept the license agreement, then click <strong>Next</strong>.
-    <li>In the next window, click <strong>Finish</strong> to start installation.</li>
-    <li>The ADT plugin is not digitally signed. Accept the installation anyway by clicking 
-    <strong>Install All</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-<td>
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Available Software</strong> tab.</li>
-    <li>Expand the entry for the Android plugin (may be listed as the location URL)
-      and select "Developer Tools" by checking the box next to it, then click 
-      <strong>Install</strong>.</li>
-    <li>On the next window, "Android DDMS" and "Android Development Tools" 
-    should both be checked. Click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-</tr>
-</table>
-
-<p>If you encounter problems, ensure your ADT is fully uninstalled and then
-follow the guide to 
-<a href="installing.html#installingplugin">Installing the ADT Plugin
-for Eclipse</a>.</p>
-
-<h3 id="updateEclipsePrefs">Update your Eclipse SDK Preferences</h3>
-
-<p>The last step is to update your Eclipse preferences to point to the new SDK directory:</p>
-    <ol>
-      <li>Select <strong>Window</strong> > <strong>Preferences</strong> to open the Preferences 
-      panel (Mac: <strong>Eclipse</strong> > <strong>Preferences</strong>).</li>
-      <li>Select <strong>Android</strong> from the left panel.</li>
-      <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse</strong> 
-      and locate your SDK directory.</li>
-      <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-    </ol>
-
-
-<h2 id="UpdateYourProjects">Update Your Projects</h2>
-
-<p>You will now need to update any and all Android projects that you have
-developed using a previous version of the Android SDK.</p>
-
-
-<h3 id="EclipseUsers">Eclipse users</h3>
-
-<p>If you use Eclipse to develop applications, use the following procedure to 
-update each project:</p>
-
-<ol>
-  <li>Right-click on the individual project (in the Package Explorer)
-   and select <strong>Properties</strong>.</li>
-  <li>In the properties, open the Android panel and select a "build target" to compile 
-    against. This SDK offers the Android 1.1 and Android 1.5 platforms to choose from. When 
-    you are initially updating your projects to the new SDK, we recommend that you select a build 
-    target with the Android 1.1 platform. Click <strong>Apply</strong>, then 
-    <strong>OK</strong>.</li>
-</ol>
-
-<p>The new plugin creates a <code>gen/</code> folder in your project, in which it puts the 
-<code>R.java</code> file
-and all automatically generated AIDL java files. If you get an error such as 
-<code>The type R is already defined</code>, 
-then you probably need to delete your old <code>R.java</code> or your old auto-generated
-AIDL Java files in the <code>src/</code> folder.
-(This <em>does not</em> apply to your own hand-crafted parcelable AIDL java files.)</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h3 id="AntUsers">Ant users</h3>
-
-<p>If you build your projects using the Ant tool (rather than with Eclipse), note the 
-following changes with the new SDK tools.</p>
-
-<h4>build.xml has changed</h4>
-
-<p>You must re-create your <code>build.xml</code> file.</p>
-
-<p>If you had customized your <code>build.xml</code>, first make a copy of it:</p>
-
-<pre>
-$ cd <em>my-project</em>
-$ cp build.xml build.xml.old
-</pre>
-
-<p>Now use the new <code>android</code> tool (located in <code><em>your_sdk</em>/tools/</code>) 
-to create a new <code>build.xml</code> that references 
-a specific platform target:</p>
-
-<pre>$ android update project --path /path/to/my-project --target 1</pre>
-
-<p>The "target" corresponds to an Android platform library (including any add-ons, such as 
-Google APIs) that you would like to build your project against. You can view a list of available 
-targets (and their corresponding integer ID) with the command, <code>android list targets</code>. 
-When you are initially updating your projects to the new SDK, we recommend that you select the 
-first target ("1"), which uses the Android 1.1 platform library.</p>
-
-<p>A <code>gen/</code> folder will be created the first time you build and your <code>R.java</code> and
-your AIDL Java files will be generated in here. You <strong>must</strong> remove
-the old <code>R.java</code> and old auto-generated AIDL java files from the 
-<code>src/</code> folder. (This
-does not apply to your own hand-crafted parcelable AIDL java files.)</p>
-
-<p class="note"><strong>Note:</strong> The "activitycreator" tool has been replaced 
-by the new "android" tool. For information on creating new projects with the android tool,
-see the documentation about <a href="{@docRoot}guide/developing/other-ide.html">Developing 
-In Other IDEs</a>.</p>
-
-<p>Note that, with the Android 1.5 SDK, there is a new process for running 
-applications in the Android Emulator. 
-Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance
-of the Emulator. Before attempting to run your applications with the new SDK, 
-please continue with the section below to 
-<a href="#MigrateYourApplications">Migrate Your Applications</a>.</p>
-
-
-<h2 id="MigrateYourApplications">Migrate Your Applications</h2>
-
-<p>After you have completed the process above to <a href="#UpdateYourProjects">Update Your 
-Projects</a>, you are strongly encouraged to run each of your applications in an instance
-of the emulator running the Android 1.5 system image. It's possible (however, unlikely) 
-that you'll encounter some breakage in your application when you run your applications on
-the Android 1.5 system image. Whether you believe your application will be affected by 
-platform changes or not, it's very important that you test the application's 
-forward-compatibility on Android 1.5.</p>
-
-<p>To test forward-compatibility, simply run your existing application (as-is) on an Android
-Emulator that's running the Android 1.5 system image. The following procedure will guide
-you through the process to running your existing applications on an emulator. <em>Please read
-the following guide completely before you begin</em>.</p>
-
-<p>To test your application on an emulator running Android 1.5:</p>
-<ol>
-  <li><a href="#UpdateYourProjects">Update Your Project</a> (you should have done this 
-  already, in the section above).</li>
-  <li>Run your existing project, as-is, on an emulator running the Android 1.5 system image.
-    <p>As mentioned in the guide to <a href="#UpdateYourProjects">Update Your Projects</a>, 
-    you should have selected a "build
-    target" of "1", which compiles your application against the Android 1.1 system image, so there
-    should be no new errors in your code.</p>
-    <p>Eclipse users: follow the 
-    <a href="{@docRoot}guide/developing/eclipse-adt.html#Running">Eclipse guide to 
-    Running Your Application</a>.</p>
-    <p>Ant users: follow the 
-    <a href="{@docRoot}guide/developing/other-ide.html#Running">Ant guide to 
-    Running Your Application</a>
-    <p>During the procedure to Running Your Application, select a "deployment target" 
-    for the AVD that includes the Android 1.5 platform. 
-    If your application utilizes the Google Maps APIs (i.e.,
-    MapView), be certain to select a target that includes the Google APIs.</p>
-    <p>Once you complete the procedures to run your application in your respective environment,
-    linked above, return here.</p>
-  </li>
-  <li>With your application running in the emulator, perform all regular testing on the application
-  to ensure that it functions normally (in both landscape and portrait orientations).</li>
-</ol>
-
-<p>Chances are, your application runs just fine on the Android 1.5 platform &mdash; 
-new devices will be able to safely install and run your application and
-current users who update their devices will be able to continue using your application as usual.
-However, if something doesn't work the way you expect, then you might need to revisit
-your project and make any necessary changes to your code.</p>
-
-<p>You can check for code breakages caused by API changes by opening your project 
-in Eclipse, changing the "build target" to one using the Android 1.5 platform,
-and see where the ADT identifies errors in your code.</p>
-
-
-<h3 id="FutureProofYourApps">Future-proof your apps</h3>
-
-<p>There have been several API additions made for this release, but there have been
-very few actual API <em>changes</em>. Only a couple (relatively unused) elements 
-have been removed and a few have been deprecated, so your applications written with the 
-Android 1.1 system library should work just fine. However, 
-your application is more likely to encounter problems on Android 1.5
-if it performs any of the following:</p>
-
-<ul>
-  <li>Uses internal APIs. That is, APIs that are not officially supported
-  and not available in the reference documentation. Any un-official APIs are always subject
-  to change (which is why they're un-official) and some have indeed changed.
-  </li>
-  <li>Directly manipulates system settings. There are some settings (such as
-  GPS, data roaming, bluetooth and others) that used to be writable by 
-  applications but have been changed so that they can only be explicitly modified by the user
-  through the system settings. Refer to {@link android.provider.Settings.Secure}
-  to see which settings are now secured and cannot be directly changed by your application.
-  </li>
-  <li>Uses View hierarchies that are unreasonably deep (more than 10 or so levels) or 
-  broad (more than 30 total). View hierarchies this big have always been troublesome, but 
-  Android 1.5 is much more efficient at exposing this and your application may crash.
-  </li>
-  <li>Makes assumptions about the available hardware. With new support for soft keyboards,
-  not all devices will have full QWERTY keyboards on the hardware. So if your application
-  listens for special keypress events that only occur on a keypad, then your application
-  should degrade gracefully when there is no keyboard available.
-  </li>
-  <li>Performs its own layout orientation changes based on the accelerometer (or via other
-  sensors). Some devices running Android 1.5 will automatically rotate the orientation
-  (and all devices have the option to turn on auto-rotation), so if your application also
-  attempts to rotate the orientation, it can result in strange behavior. In addition, if your
-  application uses the accelerometer to detect shaking and you do not want to rotate the 
-  orientation, then you should lock the current orientation with 
-  <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">android:screenOrientation</a>.
-  </li>
-</ul>
-
-<p>Please read our blog post on <a 
-href="http://android-developers.blogspot.com/2009/04/future-proofing-your-apps.html">Future-Proofing
-Your Apps</a> for more information on the issues mentioned above.</p>
-
-<p>For information
-about other changes made to Android 1.5, refer to the following documents:</p>
-<ul>
-  <li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
-  <li><a href="{@docRoot}sdk/android-1.5.html#api-changes">Android 1.5 Version Notes</a></li> 
-  <li><a 
-href="http://android-developers.blogspot.com/2009/04/ui-framework-changes-in-android-15.html">UI 
-framework changes in Android 1.5 &raquo;</a></li>
-</ul>
-
-<p>If you have additional trouble updating your code, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
diff --git a/docs/html/sdk/1.6_r1/upgrading.jd b/docs/html/sdk/1.6_r1/upgrading.jd
deleted file mode 100644
index e6dded0..0000000
--- a/docs/html/sdk/1.6_r1/upgrading.jd
+++ /dev/null
@@ -1,386 +0,0 @@
-page.title=Upgrading the SDK
-sdk.version=1.6
-excludeFromSuggestions=true
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Upgrading the SDK</h2>
-  <ul>
-    <li>If you are developing on the Android 1.5 SDK, migrating your
-applications is straightforward and typically requires no modifications.</li>
-    <li>For Eclipse users, a new version of ADT is available. To use the Android
-1.6 SDK, please upgrade to ADT 0.9.3 (or later).</li>
-    <li>For Windows users, the SDK includes a new USB driver that you can
-install, if you are developing on a device. </li>
-    <li>A new Android SDK and AVD Manager tool is available. To access 
-it, run the <code>android</code> tool without options. </li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Install">Install the SDK</a></li>
-    <li><a href="#UpdateAdt">Update Your Eclipse ADT Plugin</a></li>
-    <li><a href="#RunYourApps">Run Your Applications</a></li>
-    <li><a href="#MigrateYourApps">Migrate Your Applications</a></li>
-  </ol>
-  
-  <h2>Migrating information</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/api_diff/4/changes.html">Android 1.6 API 
-Differences</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.5 SDK to the Android 1.6 SDK. If you are
-migrating applications from an SDK older than 1.5, please also read the
-upgrading document available in the Android 1.5 SDK package.</p>
-
-<p>There are several compelling reasons to upgrade, such as new SDK tools that
-make developing more efficient and new APIs that allow you to expand the
-feature-set of your applications. However, even if you or your applications
-don't require these enhancements, it's important that you upgrade to ensure that
-your applications run properly on the upcoming Android platform.</p>
-
-<p>The Android 1.6 platform will soon be deployable to devices around the world.
-If you have already released Android applications to the public, you should test
-the forward-compatibility of your applications on the latest version of the
-platform as soon as possible. It's unlikely that you'll encounter problems in
-your applications, but in the interest of maintaining the best user experience,
-you should take no risks. So, please install the new Android SDK and test your
-applications on the new platform.</p>
-
-<!-- NOT AVAILABLE FOR PREVIEW RELEASES -->
-<p>For more information on new SDK features and system changes, 
-see the <a href="{@docRoot}sdk/android-1.6.html">Android 1.6 Version Notes</a>.</p>
-<!-- -->
-
-<h2 id="Install">Install the SDK</h2>
-
-<p>If you haven't yet downloaded the SDK, <a href="index.html">download it from 
-here</a> and unpack it into a safe location.</p>
-
-<p>If you had previously setup your <code>PATH</code> variable to point to the SDK 
-tools directory, then you need to update it to point to the new SDK. For example, for
-a <code>.bashrc</code> or <code>.bash_profile</code> file:</p>
-<pre>export PATH=$PATH:<em>&lt;your_sdk_dir></em>/tools</pre>
-
-
-<h2 id="UpdateAdt">Update Your Eclipse ADT Plugin</h2>
-
-<p>If you don't use the Eclipse IDE for development,
-skip to <a href="#RunYourApps">Run Your Applications</a>.</p>
-
-<p>A new version of the ADT Plugin, ADT 0.9.3, is available in conjunction with
-this SDK release. To use the SDK, you must upgrade your ADT Plugin to version
-0.9.3. With ADT 0.9.3, you can still compile your existing applications against 
-multiple platform versions, such as Android 1.5, Android 1.1, and so on. However, 
-ADT 0.9.3 is not compatible with previous versions of the SDK and its tools, so 
-make sure that you upgrade both your SDK <em>and</em> the ADT Plugin.</p>
-
-The upgrade steps for ADT are described below. For information about new features in ADT, see the <a
-href="{@docRoot}sdk/RELEASENOTES.html">Release Notes</a> document. </p>
-
-<p>If you're currently using a version of ADT <em>older</em> than version 0.9,
-then you must uninstall ADT before you proceed (read how to <a
-href="{@docRoot}sdk/1.5_r3/upgrading.html#uninstallAdt">Uninstall your previous
-ADT plugin</a>). If you currently have version 0.9 or 0.9.1, then you don't need
-to uninstall and can continue with the procedure below.</p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.4 (Ganymede)</th><th>Eclipse 3.5 (Galileo)</th></tr>
-<tr>
-<td width="50%">
-<!-- 3.4 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates</strong>.</li>
-    <li>Select the <strong>Available Software</strong> tab.</li>
-    <li>Select the checkboxes next to Android DDMS and Android Developer Tools, 
-      then click  <strong>Update</strong>.</li>
-    <li>In the resulting Available Updates dialog, ensure that both Android DDMS 
-      and Android Development Tools are selected, then click 
-      <strong>Next</strong>.</li>
-    <li>Read and accept the license agreement and then click <strong>Finish</strong>.
-      This will download and install the latest version of Android DDMS and 
-      Android Development Tools.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-<td>
-<!-- 3.5 steps -->
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Check for Updates</strong>. </li>
-    <li>In the resulting Available Updates dialog, locate the Android DDMS and 
-        Android Development Tools features in the list and ensure that the checkboxes
-        next to them are selected. Click <strong>Next</strong>. 
-        <p>If the Available Updates dialog does not list Android DDMS and Android 
-           Development tools, make sure that you have set up a remote update site 
-           for them, as described in 
-           <a href="installing.html#InstallingADT">Installing the ADT Plugin</a>. 
-        </p></li>
-    <li>In the Update Details dialog, click <strong>Next</strong>.</li>
-    <li>Read and accept the license agreement and then click <strong>Finish</strong>.
-      This will download and install the latest version of Android DDMS and 
-      Android Development Tools.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-</td>
-</tr>
-</table>
-
-<p>If you encounter problems with this update procedure, try performing a fresh
-installation. Fully remove your existing ADT Plugin as described in <a
-href="{@docRoot}sdk/1.5_r3/upgrading.html#uninstallAdt">Uninstall your previous
-ADT plugin</a> and then follow the guide to <a
-href="installing.html#InstallingADT">Installing the ADT Plugin for
-Eclipse</a>.</p>
-
-<h3 id="updateEclipsePrefs">Update your Eclipse SDK Preferences</h3>
-
-<p>The last step is to update your Eclipse preferences to point to the new 
-SDK directory:</p>
-<ol>
-  <li>Select <strong>Window</strong> > <strong>Preferences</strong> to open 
-      the Preferences panel (Mac: <strong>Eclipse</strong> > <strong>Preferences
-      </strong>).</li>
-  <li>Select <strong>Android</strong> from the left panel.</li>
-  <li>For the SDK Location, click <strong>Browse</strong> 
-  and locate your SDK directory.</li>
-  <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-</ol>
-
-
-<h2 id="RunYourApps">Run Your Applications to Test Forward Compatibility</h2>
-
-<p>Now that you have installed the Android 1.6 SDK, we encourage you run each of
-your existing applications on the Android 1.6 system image that is included in
-the SDK, to ensure that it functions properly on the new platform.
-Testing forward-compatibility in this way is especially important for
-applications that you may have already published and that may be installed on
-devices that will upgrade to the new platform. </p>
-
-<p>In most cases, your applications will function properly when run on the new
-version of the platform. However, it is possible that you will encounter
-unexpected behavior, because of changes in the API or underlying platform. If
-you do find problems, you can use the SDK tools to compile and publish an update
-to the applications, which users can then download. 
-
-<p>To test forward-compatibility, simply run your application, as-is, on an
-instance of the Android Emulator that uses an AVD targeted to the "Android 1.6"
-system image. Here are the steps: </p>
-
-<ol>
-  <li>Make no changes to your application code.</li>
-  <li>Create a new AVD that runs the new "Android 1.6" platform. </li>
-  <li>Launch your application in an emulator running the new AVD.</li>
-  <li>Perform normal testing on your application to ensure everything works as 
-      expected.</li>
-</ol>
-
-<p>Note that, for the purposes of forward-compatibility testing, you should not
-change how your application is compiled. That is, you should continue to compile
-the application against the same version of the Android library as before. The
-only change needed is to the AVD, which controls the version of the Android
-system image (run-time environment) on which the application is run. 
-
-<p>For more information on creating an AVD and launching your application, see
-<a href="{@docRoot}guide/developing/eclipse-adt.html#Running">Running Your
-Applications (Eclipse)</a> or <a
-href="{@docRoot}guide/developing/other-ide.html#Running">Running
-Your Applications (other IDEs)</a>, depending on your development
-environment.</p>
-
-<h3 id="FutureProofYourApps">Android 1.6 Forward-Compatibility Tips</h3>
-
-<p>The new version of the Android platform includes several new APIs, but
-very few actual changes to existing APIs. This means that, in most
-cases, your applications written with earlier versions of the Android library
-should run properly on the Android 1.6 platform. </p>
-
-<p>However, here are some areas to pay attention to as you test forward-compatibility:</p>
-
-<ul>
-  <li><strong>Make sure your application doesn't use internal APIs</strong>. Your
-application should not use any APIs that are not officially supported and are
-not published in the Android reference documentation. Unofficial APIs can change
-at any time without notice and &mdash; if your application happens to be using
-them &mdash; such a change could cause the application to break.</li>
-
- <li><strong>Watch for assumptions about available hardware</strong>. Remember
-that not all compatible devices offer the same hardware capabilities &mdash;
-screens, keyboards, and physical keys, and so on. As you test your application,
-watch for areas where your application depends on the presence of specific
-hardware capabilities. If you find dependencies, you can design around them by
-building in alternate support or graceful degradation, or you can specify them 
-as hardware requirements in a 
-<a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code>.</a>
-element in the application's manifest file. Also see the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
-manifest element, which lets your application declare a requirement for 
-specific features, such as an OpenGL ES version or a camera that has 
-autofocus capability.
-</li>
-
- <li><strong>Watch for assumptions about available features</strong>. Not all 
-compatible devices offer equal support for embedded features. same hardware capabilities &mdash;
-screens, keyboards, and physical keys, and so on. As you test your application,
-watch for areas where your application depends on the presence of specific
-hardware capabilities. If you find dependencies, you can design around them by
-building in alternate support or graceful degradation, or you can specify them 
-as hardware requirements in a 
-<a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code>.</a>
-element in the application's manifest file. </li>
-
-  <p>When testing forward-compatibility, try running your application in various
-AVDs that emulate different hardware configurations. For example, you can create
-an AVD that does not offer a physical keyboard or one that uses a dpad instead
-of a trackball. Running your application in different emulated hardware
-configurations will give you an idea of where its dependencies are and help you
-identify problems. </p>
- </li>
-
-  <li><strong>Watch for assumptions about screen resolution and
-density</strong>. A device's screen resolution and density is likely to affect
-the way that your application's UI is rendered, especially if your app specifies
-dimensions or positions using pixels or absolute layouts. To ensure consistent
-UI across screens, your app should specify the dimensions and positions of
-layouts and drawables in relative units that can be scaled by the system as
-appropriate, according to the density of the device's screen. Alternatively, you
-can create custom sets of layout/drawable resources for specific screens, which
-the system can then load as appropriate, based on the current device screen.</p>
-
-  <p>When testing forward-compatibility, try running your application in various
-AVDs that emulate different screen resolutions and densities. Also note that,
-starting with Android 1.6, the platform provides a Compatibility Mode that
-automatically scales the UI of applications if they do not explicitly indicate
-support for the current screen in the 
-<a href="{@docRoot}guide/topics/manifest/supports-screen-element.html"><code>&lt;supports-screen&gt;</code></a>
-element in their manifest files. As part of testing, you should evaluate how
-your application is displayed in Compatibility Mode on different screens. </p>
-  </li>
-
-  <li><strong>Avoid performing layout orientation changes based on the
-acceletometer (or via other sensors)</strong>. Some Android-powered devices will
-automatically rotate the orientation (and all devices have the option to turn on
-auto-rotation), so if your application also attempts to rotate the orientation,
-it can result in strange behavior. In addition, if your application uses the
-accelerometer to detect shaking and you do not want to rotate the orientation,
-then you should lock the current orientation with <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#screen">android:screenOrientation</a>.
- </li>
-
-</ul>
-
-<h2 id="MigrateYourApps">Migrate Your Applications</h2>
-
-<p>If you want to use any of the new Android 1.6 APIs in your existing
-applications, you must first migrate the applications to the new Android
-platform version. Generally, migrating an application includes: </p>
-
-<ul>
-<li>Referencing the proper API Level in the application's manifest file, 
-and</li>
-<li>Resetting its project properties so that it is compiled against the Android 
-1.6 build target.</li>
-</ul>
-
-<p>Additionally, to run your application in the emulator, you need to
-create an AVD that uses the Android 1.6 system image. </p>
-
-<p class="note"><strong>Note:</strong> You only need migrate your application as
-described in this section if the application will actually use APIs
-<em>introduced</em> in the Android 1.6 platform (which are not available on
-devices running older versions of the Android platform). If your application
-does not use any new APIs, you can compile and run it without modification and
-not migration is necessary.</p>
-
-<h3>Reference the Proper API Level</h3>
-
-<p>If your application is using APIs introduced in Android 1.6, you must
-reference that dependency in the application's manifest file so that it can be
-deployed to devices running the Android 1.6 platform. </p>
-
-<p>Open the manifest file and locate the <code>minSdkVersion</code> attribute 
-in the <code>&lt;uses-sdk&gt;</code> manifest element. Set the value of 
-<code>minSdkVersion</code> to <code>"4"</code> (the API Level
-identifier corresponding to Android 1.6). Here's an example:</p>
-
-<pre>
-&lt;manifest>
-  ...
-  &lt;uses-sdk android:minSdkVersion="4" />
-  ...
-&lt;/manifest>
-</pre>
-
-<h3>Compile Against the Proper Build Target</h3>
-
-<p>Once you've changed the <code>minSdkVersion</code> value in your
-application's manifest, you need to set the application's project properties so
-that the application will be compiled against the Android 1.6 library. To do so,
-follow the steps below for your respective development environment.  </p>
-
-<h4 id="EclipseUsers">Eclipse Users</h4>
-
-<ol>
-  <li>Right-click on the individual project (in the Package Explorer)
-  and select <strong>Properties</strong>.</li>
-  <li>In the properties, open the Android panel and select a new Project Build Target.
-  Select "Android 1.6" to target the new platform (or "Google APIs" with the "4" 
-  API Level, if your application uses the Google Maps APIs).</li>
-  <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-</ol>
-	
-<h4 id="AntUsers">Ant Users</h4>
-	
-<p>Use the <code>android</code> tool (located in
-<code><em>your_sdk</em>/tools/</code>) to create a new <code>build.xml</code>
-that references the new platform target. To see a list of available targets,
-execute:</p>
-
-<pre>android list targets</pre>
-
-<p>Select the target <code>id</code> that corresponds to the "Android 1.6" platform
-and pass it with the <code>--target</code> parameter when updating your project.
-For example:</p>
-
-<pre>android update project --path /path/to/my-project --target 2</pre>
-
-<p>If your application uses the Google Maps APIs (i.e., MapView), be certain to 
-select a Google APIs target.</p>
-
-<h3>Create an AVD that Uses the Android 1.6 Platform</h3>
-
-<p>Finally, you need to set up a new AVD that uses the Android 1.6 platform, so that 
-you can run your application in the emulator. 
-
-<p>To set up the new AVD, use the <code>android</code> tool, available in the
-<code>tools/</code> directory of the SDK. You can run the AVD manager by simply
-changing to the <code>tools/</code> directory and entering <code>android</code>
-at the command line. Click "New" to create the AVD and set its properties.</p>
-
-<p>When creating the AVD, make sure to select a target of "Android 1.6 - API
-Level 4". If your application uses the Google Maps APIs (MapView), select the
-target "Google APIs (Google Inc.) - API Level 4". </p>
-
-<p>For more information about running your application in an AVD, see <a
-href="{@docRoot}guide/developing/eclipse-adt.html#Running">Running Your
-Application (Eclipse)</a> or <a
-href="{@docRoot}guide/developing/other-ide.html#Running">Running Your
-Application (other IDEs)</a>. </p>
-
-<p>For general information about AVDs, see the <a href="{@docRoot}guide/developing/tools/avd.html">Android Virtual
-Devices</a> document. </p>
-
-
-
-<div class="special">
-<p>If you have trouble migrating to the new version of the SDK, visit the 
-<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
-to seek help from other Android developers.</p>
-</div>
-
diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd
index cbcbb12..d69697a 100644
--- a/docs/html/sdk/RELEASENOTES.jd
+++ b/docs/html/sdk/RELEASENOTES.jd
@@ -731,11 +731,11 @@
 
 <h3>ADT Plugin Compatibility</h3>
 
-<p>For this version of the SDK &mdash; Android 1.0 SDK, Release 1 &mdash; the compatible version of the Android Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a previous version of ADT, you should update to the latest version for use with this SDK. For information about how to update your ADT plugin, see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a>.</p>
+<p>For this version of the SDK &mdash; Android 1.0 SDK, Release 1 &mdash; the compatible version of the Android Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a previous version of ADT, you should update to the latest version for use with this SDK.</p>
 
 <h3>Installation and Upgrade Notes</h3>
 
-<p>If you've been developing an application using a previous SDK version and you want the application to run on Android-powered mobile devices, you must port the application to the Android 1.0 SDK. Please see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a> for detailed instructions on how to make the transition to this release.  Be sure to wipe application user data (emulator option <code>-wipe-data</code>) when running your application on the Android 1.0 SDK emulator.</p>
+<p>If you've been developing an application using a previous SDK version and you want the application to run on Android-powered mobile devices, you must port the application to the Android 1.0 SDK. Be sure to wipe application user data (emulator option <code>-wipe-data</code>) when running your application on the Android 1.0 SDK emulator.</p>
 
 <h3>Other Notes</h3>
 
diff --git a/docs/html/sdk/installing/studio.jd b/docs/html/sdk/installing/studio.jd
index b253f92..f3e181e 100644
--- a/docs/html/sdk/installing/studio.jd
+++ b/docs/html/sdk/installing/studio.jd
@@ -301,10 +301,9 @@
 <li>Install Android Studio and the SDK tools:
   <p><b>Windows:</b></p>
   <ol>
-    <li>Launch the downloaded EXE file, {@code android-studio-bundle-&lt;version&gt;.exe}.
+    <li>Launch the downloaded EXE file, {@code android-studio-bundle-&lt;version&gt;.exe}.</li>
     <li>Follow the setup wizard to install Android Studio.
 
-
     <div class="caution"><p><strong>Known issue:</strong>
       On some Windows systems, the launcher script does not find where Java is installed.
       If you encounter this problem,
@@ -314,13 +313,23 @@
       Variables</strong> and add a new system variable <code>JAVA_HOME</code> that points to
       your JDK folder, for example <code>C:\Program Files\Java\jdk1.7.0_21</code>.</p>
     </div>
-
+    </li>
 
   </ol>
   <p><b>Mac OS X:</b></p>
   <ol>
-    <li>Open the downloaded DMG file, {@code android-studio-bundle-&lt;version&gt;.dmg}.
+    <li>Open the downloaded DMG file, {@code android-studio-bundle-&lt;version&gt;.dmg}.</li>
     <li>Drag and drop Android Studio into the Applications folder.
+
+    <div class="caution"><p><strong>Known issue:</strong>
+      Depending on your security settings, when you attempt to open Android Studio, you might
+      see a warning that says the package is damaged and should be moved to the trash. If this
+      happens, go to <strong>System Preferences > Security &amp; Privacy</strong> and under
+      <strong>Allow applications downloaded from</strong>, select <strong>Anywhere</strong>.
+      Then open Android Studio again.</p>
+    </div>
+    </li>
+
   </ol>
   <p><b>Linux:</b></p>
   <ol>
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index 105f60d..46164c1 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -4214,7 +4214,6 @@
 http://developer.android.com/reference/org/w3c/dom/TypeInfo.html
 http://developer.android.com/reference/org/w3c/dom/UserDataHandler.html
 http://developer.android.com/reference/android/support/v4/content/pm/ActivityInfoCompat.html
-http://developer.android.com/guide/developing/debug-tasks.html
 http://developer.android.com/reference/renderscript/rs__math_8rsh.html
 http://developer.android.com/reference/renderscript/structrs__matrix4x4.html
 http://developer.android.com/reference/renderscript/rs__cl_8rsh.html
@@ -6473,7 +6472,6 @@
 http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
 http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
 http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
-http://developer.android.com/tools/debug-tasks.html
 http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
 http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
 http://developer.android.com/sdk/api_diff/16/changes/classes_index_additions.html
diff --git a/docs/html/tools/avd.html b/docs/html/tools/avd.html
deleted file mode 100644
index 1d314a1..0000000
--- a/docs/html/tools/avd.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/devices/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/devices/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/debug-tasks.html b/docs/html/tools/debug-tasks.html
deleted file mode 100644
index 2a5bc51..0000000
--- a/docs/html/tools/debug-tasks.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/debugging/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/debugging/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/eclipse-adt.html b/docs/html/tools/eclipse-adt.html
deleted file mode 100644
index 0d59d49..0000000
--- a/docs/html/tools/eclipse-adt.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/projects/projects-eclipse.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/projects/projects-eclipse.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/help/aapt.html b/docs/html/tools/help/aapt.html
deleted file mode 100644
index ebd375d..0000000
--- a/docs/html/tools/help/aapt.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/building/index.html#detailed-build">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/building/index.html#detailed-build">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/other-ide.html b/docs/html/tools/other-ide.html
deleted file mode 100644
index 2bfe876..0000000
--- a/docs/html/tools/other-ide.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/projects/projects-cmdline.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/projects/projects-cmdline.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/othertools.html b/docs/html/tools/othertools.html
deleted file mode 100644
index ed45ccd..0000000
--- a/docs/html/tools/othertools.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/tools/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/tools/publishing/app-signing.jd b/docs/html/tools/publishing/app-signing.jd
index 608780e..1de1fd7 100644
--- a/docs/html/tools/publishing/app-signing.jd
+++ b/docs/html/tools/publishing/app-signing.jd
@@ -466,7 +466,7 @@
 </tr>
 <tr>
 <td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
-Use the value {@code MD5withRSA}.</td>
+Use the value {@code SHA1withRSA}.</td>
 </tr>
 <tr>
 <td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
@@ -492,7 +492,7 @@
 <code>my_application.apk</code>, using the example keystore created above.
 </p>
 
-<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
+<pre>$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore
 my_application.apk alias_name</pre>
 
 <p>Running the example command above, Jarsigner prompts you to provide
diff --git a/docs/html/tools/sdk/OLD_RELEASENOTES.jd b/docs/html/tools/sdk/OLD_RELEASENOTES.jd
deleted file mode 100644
index b7fd12f..0000000
--- a/docs/html/tools/sdk/OLD_RELEASENOTES.jd
+++ /dev/null
@@ -1,528 +0,0 @@
-page.title=Release Notes for Older SDK Versions
-excludeFromSuggestions=true
-@jd:body
-
-<div class="special">
-  <p><strong>Note:</strong> These are the release notes for the "early-look" SDK versions, released
-  before the full Android 1.0 release in September 2008.
-  Release notes for the Android 1.0 and later SDK versions are provided in the main
-  <a href="{@docRoot}sdk/RELEASENOTES.html">Release Notes</a> document.</p>
-</div>
-
-
-
-<a name="0.9_r1" id="0.9_r1"></a>
-<h2>Android 0.9 SDK Beta (r1)</h2>
-
-<p>This beta SDK release contains a large number of bug fixes and improvements from the early-look SDKs.&nbsp; 
-The sections below describe the highlights of the release.
-
-<h3>New Features and Notable Changes</h3>
-
-<p><strong>Behavior and System Changes</strong></p>
-<ul>
-	<li>New Home screen and many user interface updates
-	</li>
-	<li>Minor changes to Activity lifecycle and task management
-	</li>
-	<li>New window option to request OpenGL acceleration for certain kinds of View structures
-	</li>
-</ul>
-<p>
-	<b>
-	Significant API Changes</b>
-</p>
-<ul>
-	<li>onFreeze(Bundle) renamed to onSaveInstanceState(Bundle), to better reflect the fact that it does not represent an actual change in application lifecycle
-	</li>
-	<li>IntentReceivers are now known as BroadcastReceivers (but still operate on Intents.)
-	</li>
-	<li>Various parts of the API cleaned up to use Intents instead of Bundles; Intent itself improved to reduce the need for separate payload Bundles.</li>
-	<li>ContentProvider Cursors have had significant changes to make them easier to create and remove certain data consistency bugs.
-	</li>
-	<li>Changes to menus to make them more flexible; also added context menus (similar to "right mouse button" menus)
-	</li>
-	<li>Changes to the Sensor API to make reading sensors more convenient and reduce the need to poll
-	</li>
-	<li>Improvements to the Camera API
-	</li>
-	<li>Significant changes to the Location API to make it easier to use and better self-documenting
-	</li>
-	<li>API cleanup on MapViews
-	</li>
-	<li>Performance-related changes to the MediaPlayer, as well as support for new types of ringtones
-	</li>
-	<li>Apache HTTPClient installation upgraded to 4.x of that API; 3.x version is removed
-	</li>
-	<li>HTTPClient 4.x removes multipart methods, include HttpMime which is an extension of Mime4j (http://james.apache.org/mime4j/index.html) in your project instead
-	</li>
-	<li>Improvements to WiFi and related networking
-	</li>
-	<li>New Preferences API to easily store small amounts of data
-	</li>
-	<li>Improvements to the Telephony API, including ability to obtain source number of incoming phone calls
-	</li>
-	<li>Variety of improvements to the View API
-	</li>
-	<li>Variety of improvements to component management, such as the ability to keep components private, better control over when processes are started, and ability to "alias" an Activity to more than one entry in AndroidManifest.xml
-	</li>
-	<li>Improvements to how the Browser and WebView, such as better control over content downloads
-	</li>
-	<li>A number of enhancements to XML layouts, such as the new &lt;merge&gt; tag
-	</li>
-	<li>Numerous improvements to the standard widgets
-	</li>
-	<li>Network access now requires that applications obtain a permission in their AndroidManifest.xml files.
-	</li>
-</ul>
-<p>
-	<b>
-	Maps &amp; Location</b>
-</p>
-<ul>
-	<li>The MapView will require an API key on final Android 1.0 devices. This key can be obtained at no cost from Google, and will allow access to the full MapView API. In this release, the API key must be provided but can be any dummy value.&nbsp; In the final 1.0-compatible SDKs, this will need to be a real key.
-	</li>
-	<li>The KML-based mock location provider supported in previous releases is no longer supported. In the current SDK, you can use the emulator console to send GPS fix updates to the emulator and applications running on it. Also, the DDMS tool provides an UI that you can use to easily upload GPX and KML files. DDMS handles playback of the KML or GPX tracks automatically. </li>
-</ul>
-<p>
-	<b>ADT Plugin for Eclipse</b></p>
-	<p>The ADT Plugin that accompanies this SDK includes a preview of the Graphical Layout Editor. Files located in &lt;project&gt;/res/layout[-qualifiers]/ will be opened with the new layout editor. This is very much a work in progress, and provided here for preview purpose. The editor feature is subject to change.
-</p>
-<ul>
-	<li>Dual page editor with a WYSIWYG page (the graphical editor) and an XML page with content assist.
-	</li>
-	<li>The interactivity in the editor itself is limited to selection at the moment. Actions on the layout elements can be done from the following standard Eclipse views: Outline (add/remove/up/down), and Properties (editing of all the element properties with a tooltip in the status bar).
-	</li>
-	<li>Top part of the editor allows you to display the layout in different configurations (language, orientation, size, etc...), and different themes.
-
-		<ul>
-			<li>All referenced resources (strings, bitmaps, etc...) are resolved based on the selected configuration/theme.
-			</li>
-			<li>A green check mark next to a resource qualifier indicates that the opened file matches the value of the qualifier. A warning sign indicates that the opened file does not specifies any value for this qualifier.
-			</li>
-			<li>If a different version of the opened layout matches the new configuration selection (in a different res/layout-qualifier folder) then the editor automatically switches to that new file.
-			</li>
-		</ul>
-	</li>
-	<li>Custom Views are supported, however if they do too much in their constructor/onDraw method, it may not work (the layout library used by the editor only includes a sub-part of the Android framework). Check the android console for errors/exceptions.
-	</li>
-</ul>
-
-<p>Known issues/limitations for Graphical Layout Editor include:</p>
-	
-		<ul>
-			<li>Font display is very close but not equals to on-device rendering since the font engine in Java slightly differs from the font engine in Android. This should not have any impact on your layouts.
-			</li>
-			<li>Creating new views in a relative layout automatically puts each new elements below each other using the <i>layout_below</i> attribute. However, until the layout file is saved, they will appear stacked on top of each other.
-			</li>
-			<li>Some XML based drawables don't draw. Fading in the scroll/list view appears as a white rectangle. Generally do not expect every single fancy drawing feature of the android framework to be supported in the layout editor (but we're working on it).
-			</li>
-			<li>Themes defined in the project are not added to the theme drop-down.
-			</li>
-			<li>No animation support!
-			</li>
-			<li>No support for WebView, MapView and SurfaceView.
-			</li>
-			<li>No UI support for &lt;merge&gt;, &lt;include&gt;, &lt;ViewStub&gt; elements. You can add these elements to your manifest using the xml editor only. 
-			</li>
-			<li>If a layout fails to render in a way that prevents the whole editor from opening, you can:
-
-			<ul>
-			<li>open that particular file in a different editor: right click the file in the package explorer and choose Open With... &gt; XML editor
-			</li>
-			<li>completely disable the layout editor, by setting a system wide environment variable called ANDROID_DISABLE_LAYOUT to any value.
-			</li>
-			</ul>
-			<li>If a layout fails to render, check the android console (in the standard Eclipse Console view). Errors/Exceptions will be displayed in there.
-			</li>
-	</ul>
-	</li>
-</ul>
-<p>Other ADT features/notes include:</p>
-<ul>
-	<li>There is a new launch option for activity. You can choose to launch the default activity (finds an activity configured to show up in the home screen), or a specific activity, or none.</li>
-	<li>Normal Java resources (non Java files placed in package folders) are now properly packaged in the final package, and can be accessed through normal java API such as ClassLoader.getResourceAsStream()</li>
-	<li>Launch configuration now has an option to wipe emulator data on launch. This always asks for confirmation.</li>
-	<li>Launch configuration now has an option to disable the boot animation. This will let the emulator start faster on older computers.</li>
-	<li>Installation of application is now more robust and will notify of installation failure. Also installation is blocking, removing issues where ADT tried to launch the activity before the app was installed.</li>
-
-</ul>
-
-<p><b>Ant Build Tools</b></p>
-
-<ul>
-  <li><span>External jar libraries are now directly supported by build.xml, just drop them in the libs directory.</li>
-</ul>
-
-<p><b>Emulator</b></p>
-
-<ul>
-  <li>The console port number of a given emulator instance is now displayed in its window's title bar.</li>
-  <li>You can define the console port number used by a given emulator instance.
-To do so, start the instance with the '-port &lt;port&gt;' option and
-specify which port the emulator should bind to for the console. &lt;port&gt; must be an *even* integer between 5554 and 5584 inclusive. The corresponding ADB port will be &lt;port&gt;+1.</li>
-  <li>The <code>-adb-port</code> command is deprecated. Please do not use it, as it will be removed soon and you cannot use both -port and -adb-port at the same time.</li>
-  <li>Voice/sms are automatically forwarded to other emulator instances running on the same machine, as long as you use their console port number as the destination phone number. For example, if you have two emulators running, the first one will typically use console port 5554, and the second one will use port 5556, dialing 5556 on the first emulator will generate an incoming call on the second emulator. You can also hold/unhold calls. This also works when sending SMS messages from one emulator to the other.</li>
-  <li>A new <code>-scale &lt;fraction&gt;</code> option allows you to scale the emulator window. </li>
-  <li>A new <code>-no-boot-anim</code> option tells the emulator to disable the boot animation. On slower systems, this can significantly reduce the time to boot the system in the emulator.</li>
-
-</ul>
-
-<p>
-	<b>Other Development Tools</b>
-</p>
-
-<p>The SDK includes several new development tools, such as</p>
-<ul>
-	<li><a href="{@docRoot}tools/help/hierarchy-viewer.html">HierarchyViewer</a> is a visual tool for inspecting and debugging your user interfaces and layout. </li>
-	<li><a href="{@docRoot}tools/help/draw9patch.html">Draw 9-patch</a> allows you to easily create a NinePatch graphic using a WYSIWYG editor. </li>
-	<li>The <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> generates pseudo-random system and user events, for testing your application. </li>
-</ul>
-<p>
-	<b>Application Signing</b>
-</p>
-<ul>
-	<li>Starting with this release, Android .apk files must be cryptographically signed, or the system will reject them upon installation.&nbsp; The purpose of this requirement is to securely and uniquely identify developers, so that the system can -- for example -- safely let multiple .apk files signed by the same developer share resources.&nbsp;
-	</li>
-	<li>There are no requirements on the key used to sign .apk files;&nbsp; locally-generated and self-signed keys are allowed.&nbsp; There is no PKI, and developers will not be required to purchase certificates, or similar. &nbsp; For developers who use the Eclipse/ADT plugin, application signing will be largely automatic.&nbsp; Developers who do not use Eclipse/ADT can use the standard Java jarsigner tool to sign .apk files.
-	</li>
-</ul>
-<p>
-	<b>Sample Code</b>
-</p>
-<ul>
-	<li>LunarLander has been converted to render into a SurfaceView via a background Thread, for better performance.
-	</li>
-	<li>New sample: the source code for the now-obsolete Home screen from M5 is included as an example of how to construct a Home screen replacement.
-	</li>
-</ul>
-<p>
-	<b>
-	Removed Functionality</b>
-</p>
-<ul>
-	<li>Due to significant API changes in the upstream open-source project and due to the timeline of getting certain Bluetooth profile implementations certified, a comprehensive Bluetooth API will not be possible or present in Android 1.0.
-	</li>
-	<li>Due to the security risks inherent in accepting arbitrary data from "outside" the device, the data messaging facility of the GTalkService will not be present in Android 1.0.&nbsp; The GTalkService will provide connectivity to Google's servers for Google Talk instant messaging, but the API has been removed from this release while we improve the service.&nbsp; Note that this will be a Google-specific service and is not part of the core of Android.
-	</li>
-	<li>We know that these changes will affect many developers who have worked with the prior early looks at the SDK, and we are very sorry for the resulting inconvenience.&nbsp; We look forward to the possibilty of restoring some or all of this functionality in a later version of the Android platform.
-	</li>
-</ul>
-<p>
-	<b>
-	Miscellaneous</b>
-</p>
-<ul>
-	<li>Many internal and non-public APIs have been removed from the documentation.&nbsp; Classes and methods that are not present in the documentation are non-public and should not be used, even though they may appear in tools such as IDEs.&nbsp; A future version of the SDK will ship with an android.jar file that contains only public classes, to help developers avoid accidentally using non-public APIs.
-	</li>
-	<li>A few extraneous APIs (such as unnecessary packages under java.awt) have been removed.
-	</li>
-	<li>Several additional tools are included, such as a utility for easily drawing 9-patch images.
-	</li>
-	<li>The DDMS utility has been refactored into library form. This is not of direct interest to application developers, but may be of interest to vendors interested in integrating the Android SDK into their products. Watch for more information about the ddmlib library soon.
-	</li>
-	<li>For performance and maintainability reasons, some APIs were moved into separate modules that must be explicitly included in the application via a directive in AndroidManifest.xml.&nbsp; Notable APIs that fall into this category are the MapView, and the java.awt.* classes, which each now reside in separate modules that must be imported.&nbsp; Developers who overlook this requirement will see ClassNotFoundExceptions that seem spurious. 
-	</li>
-	<li>Developers who use 'adb push' to install applications must now use 'adb install', since the full package manager is now implemented. 'adb push' will no longer work to install .apk files.
-	</li>
-	<li>The emulator supports a variety of new options, and some existing options have been changed.&nbsp; Please consult the updated emulator documentation for details.
-	</li>
-</ul>
-
-<h3>
-	Resolved Issues
-</h3>
-<p>
-	The list below is not comprehensive, but instead highlights the most interesting fixes since the last SDK release.
-</p>
-<ul>
-	<li>More of the standard Android user applications are now included, such as the Music and Messaging applications.
-	</li>
-	<li>Many bug fixes to the Media Player
-	</li>
-	<li>Emulator performance is improved, especially for startup
-	</li>
-	<li>More internal APIs are removed from class documentation.&nbsp; (However, this work is not quite yet complete.)
-	</li>
-	<li>It's now much easier to add media content to the SD card and have the ContentProvider locate and expose it to other applications.
-	</li>
-</ul>
-
-<h3>
-	Known Issues
-</h3>
-<ul>
-	<li>The final set of Intent patterns honored by Android 1.0 has not yet been fully documented.&nbsp; Documentation will be provided in future releases.
-	</li>
-	<li>We regret to inform developers that Android 1.0 will not support 3.5" floppy disks.
-	</li>
-	<li>Unfortunately, the ability to play audio streams from memory (such as via an InputStream or Reader) will not be possible in Android 1.0.&nbsp; As a workaround, we recommend that developers save media content to SD card and use MediaPlayer to play from a file URI, or embed a small HTTP server and play from a URI on localhost (such as http://127.0.0.1:4242/something).
-	</li>
-	<li>Android now supports modules or libraries that can be optionally linked into applications; a good example is the MapView, which has been moved into such a library. However, Android 1.0 will not support the ability for third-party developers to create such libraries for sharing with other applications.
-	</li>
-	<li>We believe that we have eliminated the problem with very long emulator startups on Windows, but had some trouble reproducing the issue.&nbsp; We are interested in feedback from developers, if this issue persists.
-	</li>
-</ul>
-
-
-
-
-<a name="m5-rc15"></a>
-<h2>Version m5-rc15</h2>
-
-<h3>New Features</h3>
-<p>m5-rc15 does not introduce any new features.</p>
-
-<h3>Resolved Issues</h3>
-<ul>
-    <li>1012640: Incorrect handling of BMP images.</li>
-</ul>
-
-<h3>Known Issues</h3>
-<p>Unless otherwise noted, Known Issues from m5-rc14 also apply to m5-rc15.</p>
-
-
-
-
-<a name="m5-rc14"></a>
-<h2>Version m5-rc14</h2>
-
-<h3>New Features</h3>
-
-<p>In addition to changes in the Android APIs, m5-rc14 also introduces changes to the Android Developer Tools:</p>
-
-<h4>emulator</h4>
-<ul>
-    <li>The Android emulator now support SD card images up to 128 GB in size.  The previous limit was 2 GB.</li>
-</ul>
-
-<h4>DDMS</h4>
-<ul>
-    <li>Support for managing multiple devices has been integrated into DDMS.  This should make it easier to debug applications that are run on multiple device scenarios.</li>
-</ul>
-
-<h4>ADT</h4>
-<ul>
-    <li>ADT now attempts to connect a debugger to any application that shows up
-    in the wait-for-debugger state, even if this application was not launched
-    from Eclipse.
-    <br /><br />
-    The connection is actually established only if there exists a project
-    in the Eclipse workspace that contains an <code>AndroidManifest.xml</code>
-    declaring a package matching the name of the process.
-    To force this connection from your code, use <code>Debug.waitForDebugger()</code>. Activities declaring that they require their own process through the
-    "process" attribute with a value like ":someProcess" will be
-    recognized and a debugger will be connected accordingly.
-    This should make it easier to debug intent receivers, services,
-    providers, and other activities not launched from the standard app
-    launcher.<br /><br /></li>
-    <li>ADT has launch modes for device target selection.  Automatic mode will: 1) launch an emulator if no device is present, 2) automatically target the device if only one is connected, and 3) prompt the user if 2 or more are connected.  Manual mode will always prompt the user.<br /><br /></li>
-    <li>ADT also contains the same support for multiple devices that has been introduced into DDMS.</li>
-</ul>
-
-<h4>AIDL</h4>
-<ul>
-    <li>AIDL files that import and reuse types is now supported by activityCreator.py and ADT.</li>
-</ul>
-
-<h4>traceview</h4>
-<ul>
-    <li>The <a href="{@docRoot}tools/help/traceview.html">traceview</a> tool is now included in the SDK.</li>
-</ul>
-
-<h3>Resolved Issues</h3>
-
-<p>The following Known Issues from m3-rc20 have been resolved:</p>
-<ul>
-    <li>917572: The activityCreator created incorrect IntelliJ scripts</li>
-    <li>917465: Unanswered incoming calls placed from the emulator console will result in an unfinished call UI if you press the call back button</li>
-    <li>917247: dmtracedump and traceview tools are not available in the SDK</li>
-    <li>912168: Extremely rapid or prolonged scrolling in the Maps application or MapsView will result in application errors</li>
-    <li>905852: adb emits warnings about deprecated API use on Mac OS X 10.5</li>
-    <li>905242: The Run dialog sometimes failed to show the Android Launcher</li>
-    <li>901122: The focus ring in the browser is sometimes incorrect</li>
-    <li>896274: On Windows, the emulator sometimes starts off-screen</li>
-    <li>778432: Icons for newly installed applications do not display</li>
-</ul>
-
-<h3>Known Issues</h3>
-
-<p>The following are known issues in m5-rc14:</p>
-
-<ul>
-    <li>1017312: The emulator window size has been reduced slightly, to allow it to be fully visible on smaller screens. This causes a slight clipping of the HVGA emulator skin but does not affect its function.</li>
-    <li>1021777: Setting a power requirement in a <code>Criteria</code> object passed to <code>{@link android.location.LocationManager#getBestProvider getBestProvider()}</code> will result in a value not being returned.</li>
-    <li>1025850: Emulator failing to launch from the Eclipse plugin due to wrong custom command line parameters do not report the error anywhere and silently fails.</li>
-</ul>
-
-<p>Unless otherwise noted, Known Issues from m3-rc20a also apply to m5-rc14.</p>
-
-
-
-
-<a name="m3-rc37a"></a>
-<h2>Version m3-rc37a</h2>
-
-<p>Version m3-rc37a and ADT 0.3.3 were released on December 14, 2007.</p>
-
-<h3>New Features</h3>
-
-<h4>Android Debug Bridge (ADB)</h4>
-<ul>
-<li>Now supports multiple emulators on one host computer. Please note that you need to use the <code>-data</code> option when starting secondary emulators, to allow those instances to save their data across sessions. Also, DDMS does not yet support debugging on multiple emulators yet. </li>
-</ul>
-
-<h4>ADT Plugin for Eclipse</h4>
-<ul>
-<li>Adds editor capabilities for working with Android manifest files, such as syntax highlighting and autocompletion. The editor capabilities require the Web Tools WST plugin for Eclipse, which is included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse packages</a>. Not having WST does not prevent the ADT plugin from working. If necessary, you can download and install WST from the Web Tools Project <a href="http://download.eclipse.org/webtools/downloads">downloads page</a>. To update directly from an Eclipse installation, you can add a remote update site with this URL: http://download.eclipse.org/webtools/updates . Note that installing WST on Eclipse 3.4 will require installing other packages, as detailed on the WTP downloads page</a>.
-</li>
-<li>Now retries to launch the app on the emulator if it fails due to timing issues when the emulator is booting.</li>
-<li>Adds support for loading custom skins from the &lt;SDK&gt;/lib/images/skins/ directory. The Skin dropdown in the Emulator tab is now built from the content of the skins/ directory in order to support developer-made skins.</li>
-<li>Adds an Emulator control panel. This is a UI on top of the emulator console that allows you to change the state of the network and gsm connection, and to initiate incoming voice call. (This is also present in standalone DDMS.)</li>
-<li>Adds support for referenced projects. Android projects will add to the apk package any code from referenced projects.</li>
-<li>Eclipse console now warns if an .apk that is pushed to the device declares the same package as another already installed package.</li>
-<li>Java classes generated by the Eclipse plugin are now marked as derived automatically, so that Team plugins do not consider them as regular source.</li>
-</ul>
-
-<h4>Emulator Console</h4>
-<ul>
-<li>Now provides support for emulating inbound SMS messages. The ADT plugin and DDMS provide integrated access to 
-this capability. For more information about how to emulate inbound SMS from the console, 
-see <a href="{@docRoot}tools/help/emulator.html#sms">SMS Emulation</a>. </li>
-</ul>
-
-<h4>Emulator</h4>
-<ul><li>The default emulator skin has been changed to HVGA-P from QVGA-L. For information 
-about emulator skins and how to load a specific skin when starting the emulator, see 
-<a href="{@docRoot}tools/help/emulator.html#skins">Using Emulator Skins</a>.</li>
-</ul>
-
-<h3>Resolved Issues</h3>
-
-<h4>907947</h4>
-<p><code>adb -version</code> now returns a version number.</p>
-
-<h4>917462</h4>
-<p>Audio on Windows is fixed and is no longer 'choppy'. </p>
-
-<h4>Removed Manifest File Locking on Mac OS X</h4>
-
-<p>ADT plugin now uses a custom java editor for R.java/Manifest.java, to make those files non-editable. This is to replace the current locking mechanism which causes issues on Mac OS (preventing projects from being deleted). Note that your project must recompile at least once for the lock to be removed from the files.</p>
-
-<h4>The following known issues noted in m3-rc20 are now fixed:</h4>
-<p>
-<ul>
-<li>890937: Emulator does not support non-qwerty keyboards.
-<li>894618: <code>adb shell</code> may fail to connect when used the first time.
-<li>896274: On Windows, the emulator window may start off-screen.
-<li>899949: The emulator may fail to start with <code>-useaudio</code> on some environments.
-<li>912619: Emulator console listens on non-local ports 5554-5584.
-<li>917399: On Windows, running multiple emulator consoles can result in unexpected behavior when simulating incoming telephone calls.
-</ul>
-</p>
-
-<h3>Known Issues</h3>
-
-<p>Unless otherwise noted, Known Issues from m3-rc22a also apply to m3-rc37a.</p>
-
-
-
-
-<a name="m3-rc22a"></a>
-<h2>Version m3-rc22a</h2>
-
-<p>Version m3-rc22a and ADT 0.3.1 were released on November 16, 2007.</p>
-
-<h3>Resolved Issues</h3>
-
-<h4>920067</h4>
-<p>The New Android Project wizard provided by ADT 0.3.1 now properly displays error messages when used with Eclipse 3.2 on Windows.</p>
-
-<h4>920045</h4>
-<p>The <code>AndroidManifest.xml</code> files generated by ADT 0.3.1 now include the XML element required for displaying the associated app in the "Applications" menu. If you have applications created with ADT 0.3.0, simply ensure that your <code>AndroidManifest.xml</code> file contains the following highlighted line:</p>
-<pre>
-...
-    &lt;intent-filter&gt;
-        &lt;action android:value=&quot;android.intent.action.MAIN&quot; /&gt;
-        <strong>&lt;category android:value=&quot;android.intent.category.LAUNCHER&quot; /&gt;</strong>
-    &lt;/intent-filter&gt;
-...
-</pre>
-
-<h4>920098</h4>
-<p>ADT 0.3.1 is now compatible with Eclipse 3.4.</p>
-
-<h4>920282</h4>
-<p>Fixes a NullPointerException that is thrown in certain situations with the DDMS perspective in Eclipse.</p>
-
-<h4>918637</h4>
-<p>Address a keyboard lock-up issue when using <code>adb</code> on Mac OS X 10.4 and 10.5.</p>
-
-<h3>Known Issues</h3>
-
-<p>Unless otherwise noted, known issues from m3-rc20a also apply to m3-rc22a.</p>
-
-<a name="m3-rc20a"></a>
-
-<h2>Version m3-rc20a</h2>
-<h3>Known Issues</h3>
-
-<p>The following are known issues in m3-rc20a:</p>
-
-<h4>778432 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>In certain circumstances, icons for newly installed applications do not display as expected.</p>
-
-<h4>890937 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
-<p>The emulator currently does not support non-QWERTY keyboards.</p>
-
-<h4>894618 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
-<p>The adb shell command may fail to connect when used for the first time.</p>
-
-<h4>896274 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>On Windows, the emulator screen will sometimes show up off-screen when it is started. The workaround for this is to right-click on the emulator taskbar entry, select Move, and move the window using keyboard arrow keys</p>
-
-<h4>899949 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
-<p>The emulator may fail to start when using the <code>-useaudio</code> in some environments</p>
-
-<h4>901122 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>The focus ring shown in the browser may sometimes not properly wrap links.</p>
-
-<h4>905242 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>On Mac OS X 10.5, the Eclipse plugin's Run Dialog may sometimes fail to show the option to select the Android Launcher.</p>
-
-<h4>905852 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>On Mac OS X 10.5, adb will emit warnings about deprecated API use when first used.</p>
-
-<h4>912168 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>extremely rapid or prolonged scrolling in the Maps application or in a MapView will result in application errors.</p>
-
-<h4>912619 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
-<p>The emulator console listens for connections on ports 5554-5587. Future versions will only accept connections from localhost. It is recommend that you use a firewall to block external connections to those ports on your development machine.</p>
-
-<h4>912849</h4>
-<p>On Mac OS X 10.4, the emulator may hang if started in the background (i.e. <code>./emulator &amp;</code>).</p>
-
-<h4>914692</h4>
-<p>On Mac OS X 10.5, the emulator will emit warnings about deprecated API use when started from the command line.</p>
-
-<h4>917247 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>The dmtracedump and traceview tools are not available in the SDK.</p>
-
-<h4>917399 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
-<p>On Windows, running multiple emulator consoles can result in unexpected behavior when simulating incoming telephone calls.</p>
-
-<h4>917465 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>Unanswered incoming calls placed from the emulator console, will result in an unfinished call UI if you press the call back button.</p>
-
-<h4>917572 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
-<p>Using activityCreator with the <code>--ide intellij</code> option creates IntelliJ scripts with incorrect documentation location specified. To correct, change value for the <code>&lt;JAVADOC&gt;</code> element in the generated .ipr file from <code>file://.../docs/framework</code> to <code>file://.../docs/reference</code>.</p>
-
-<h4>917579</h4>
-<p>On Ubuntu 7.10 (Gusty), the Eclipse package installed by the <code>apt-get install eclipse</code> command uses java-gcj by default.  This configuration is not compatible with the Android Eclipse plugin (ADT) and will result in "Class not found" errors whenever you access an ADT feature.</p>
-    <p>The resolution for this issue is to install a Sun JDK</p>
-    <pre>sudo update-java-alternatives --jre java-1.5.0-sun</pre>
-    <p>and then configure Eclipse to use it by exporting the following environment variable:</p>
-    <pre>export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun</pre>
-    <p>or by adding following to your <code>.eclipse/eclipserc file</code>:</p>
-    <pre>JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun</pre>
-
diff --git a/docs/html/tools/sdk/RELEASENOTES.jd b/docs/html/tools/sdk/RELEASENOTES.jd
deleted file mode 100644
index cbcbb12..0000000
--- a/docs/html/tools/sdk/RELEASENOTES.jd
+++ /dev/null
@@ -1,804 +0,0 @@
-page.title=SDK Release Notes
-excludeFromSuggestions=true
-@jd:body
-
-<p>This document provides version-specific information about Android SDK
-releases. <!--For the latest known issues, please ensure that you're viewing this
-page at <a
-href="http://developer.android.com/sdk/RELEASENOTES.html">http://developer.
-android.com/sdk/RELEASENOTES.html</a>.--></p>
-
-<h2 id="multiversion_r1">Android SDK</h2>
-
-<p>The Android SDK has changed! If you've worked with the Android SDK before,
-you will notice several important differences:</p>
-
-<ul>
-<li style="margin-top:.5em">The SDK downloadable package includes <em>only</em>
-the latest version of the Android SDK Tools.</li>
-<li>Once you've installed the SDK, you now use the Android SDK and AVD Manager
-to download all of the SDK components that you need, such as Android platforms,
-SDK add-ons, tools, and documentation. </li>
-<li>The new approach is modular &mdash; you can install only the components you
-need and update any or all components without affecting your development
-environment.</li>
-<li>In short, once you've installed the new SDK, you will not need to download
-an SDK package again. Instead, you will use the Android SDK and AVD Manager to
-keep your development environment up-to-date. </li>
-</ul>
-
-<p>Note that if you are currently using the Android 1.6 SDK, you do not
-necessarily need to install the new SDK, since your existing SDK already
-includes the Android SDK and AVD Manager tool. To develop against Android 2.0.1,
-for example, you could just download the Android 2.0.1 platform into your existing
-SDK. </p>
-
-<p>Release notes for Android platforms and other SDK components are
-now available from the "SDK" tab, under "Downloadable SDK Components."</p>
-
-<ul>
-<li>Notes for the Android 2.0.1 platform are in the <a
-href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1, Release 1</a> document. </li>
-<li>You can find information about tools changes in the <a
-href="{@docRoot}tools/sdk/tools-notes.html#notes">SDK Tools</a> and <a
-href="{@docRoot}tools/sdk/eclipse-adt.html#notes">ADT Plugin for Eclipse</a>.</li>
-</ul>
-
-<p>To get started with the SDK, review the Quick Start summary on the <a
-href="{@docRoot}sdk/index.html">Android SDK download page</a> or read <a
-href="{@docRoot}sdk/installing/index.html">Installing the SDK</a> for detailed
-installation instructions. </p>
-
-
-<h2 id="1.6_r1">Android 1.6 SDK, Release 1</h2>
-
-<p>This SDK provides updates to the development tools and Android system that
-you use to create applications for compliant Android-powered devices. </p>
-
-<h3>Release Overview</h3>
-
-<p>This SDK release includes several new features for developers. Highlights of the
-changes include: </p>
-
-  <ul>
-    <li>Emulator support for multiple screen sizes/densities, including new
-skins. </li>
-    <li>Android SDK and AVD Manager, a graphical UI to let you manage your
-SDK and AVD environments more easily. The tool lets you create and manage 
-your <a href="{@docRoot}tools/devices/managing-avds.html">Android Virtual
-Devices</a> and download new SDK packages (such as platform versions and 
-add-ons) into your environment.</li>
-    <li>Improved support for test packages in New Project Wizard</li>
-    <li>The reference documentation now offers a "Filter by API Level" 
-capability that lets you display only the parts of the API that are actually 
-available to your application, based on the <code>android:minSdkVersion</code>
-value the application declares in its manifest. For more information, see
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
-  </ul>
-
-<p>For details about the Android platforms included in the SDK &mdash; including
-bug fixes, features, and API changes &mdash; please read the <a
-href="android-1.6.html">Android 1.6 version notes</a>.</p>
-
-<h3>Installation and Upgrade Notes</h3>
-
-<p>If you've been developing an application using an Android 1.1 SDK, you need
-to make a few changes to your development environment to migrate to the new SDK.
-Tools and documentation are provided to assist you. No changes to the source
-code of an existing application should be needed, provided that your application
-is not using Android internal structures or APIs.</p>
-
-<p>To ensure that your existing application will work properly on a device
-running the latest version of the Android platform, you are strongly encouraged
-to migrate the application to the new SDK, compile it using the platform
-matching the application's original API Level, and run it against the most
-current platform. </p>
-
-<h3>ADT Plugin for Eclipse</h3>
-
-<p>An updated version of the ADT Plugin for Eclipse is available with the
-Android 1.6 SDK. The new version, ADT 0.9.3, provides several new
-features, including integrated support for the Android SDK and AVD Manager
-and zipalign tool. In addition, the New Project Wizard now
-lets you create a test package containing tests for your application. These
-features are described in the sections below. </p>
-
-<p>If you are developing in Eclipse with ADT and want to get started with the
-Android 1.6 SDK, you should download and install a compatible version of the ADT
-Plugin (0.9.3 or higher). </p>
-
-<p>The new version of ADT is downloadable from the usual remote update site or
-is separately downloadable as a .zip archive. For instructions on how to
-download the plugin, please see <a
-href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>. </p>
-
-<h3>Android SDK and AVD Manager</h3>
-
-<p>The SDK offers a new tool called Android SDK and AVD Manager that lets you 
-manage your SDK and AVD environments more efficiently. </p>
-
-<p>Using the tool, you can quickly check what Android platforms, add-ons,
-extras, and documentation packages are available in your SDK environment, what
-their versions are, and whether updated versions are available. You can then
-download one or more items from remote repositories and install them directly in
-your SDK environment. For example, the tool lets you obtain updates to SDK tools
-incrementally, as they are made available, without having to wait for the next
-SDK release. You can also download Android platform versions into your
-environment that were not included in the SDK package.</p>
-
-<p>The tool also lets you quickly create new AVDs, manage
-their properties, and run a target AVD from a single window. </p>
-
-<p>If you are developing in Eclipse with ADT, you can access the Android SDK 
-and AVD Manager from the <strong>Window</strong> menu. </p>
-
-<p>If you are developing in another IDE, you can access the Android SDK and 
-AVD Manager through the <code>android</code> command-line tool, located in the
-&lt;sdk&gt;/tools directory. You can launch the tool with a graphical UI by
-using the <code>android</code> command without specifying any options. You can
-also simply double-click the android.bat (Windows) or android (OS X/Linux) file.
-You can still use <code>android</code> commands to create and manage AVDs, 
-including AVDs with custom hardware configurations.</p>
-
-<h3>Integration with zipalign</h3>
-
-<p>The Android system offers a performance optimization for installed
-application packages whose contained uncompressed files are all aligned on
-4-byte boundaries. For these .apks, the system can read the files by mmap'ing
-the zip file, rather than by copying all the data out of them. This reduces
-the amount of memory used by the application at run time. The SDK includes
-a tool called <code>zipalign</code> that you can run against your .apks, to
-align them properly and enable them to benefit from this optimization.</p>
-
-<p>The ADT Plugin and the Ant build tools both provide integrated support for
-aligning your application packages. After you build an .apk, the SDK tools can
-sign and then run <code>zipalign</code> against it. The SDK includes the
-standalone version of the <code>zipalign</code> tool, so you can run also run it
-manually from the command line if you choose. </p>
-
-<ul>
-  <li>If you are developing in Eclipse with ADT, support for
-<code>zipalign</code> is integrated into the Export Wizard. When you use the
-Wizard to export a signed application package, ADT signs and then automatically
-runs <code>zipalign</code> against the exported package. If you use the Wizard 
-to export an unsigned application package, then it will not zipalign the 
-package because zipalign must be performed only after the APK has been signed. 
-You must manually sign and zipalign the package after export. </li>
-  <li>If you are developing using Ant and are compiling in release mode, the
-build tools will automatically sign and then <code>zipalign</code> the
-application package, provided that you have specified the location of a valid
-keystore in the build properties file. If you are compiling in debug mode, the
-build tools will sign the package with the debug key and then <code>zipalign</code>
-it.</li>
-  <li>To use <code>zipalign</code> manually, change to the SDK tools directory
-and use the command syntax <code>$ zipalign 4 &lt;infile&gt;
-&lt;outfile&gt;</code></li>
-</ul>
-
-<p>In general, note that you must <code>zipalign</code> an application only
-<em>after</em> it has been signed, as signing will disrupt the package
-alignment.</p>
-
-<h3>Support for Test Packages in New Project Wizard</h3>
-
-<p>The New Project Wizard available in the ADT 0.9.3 now lets you add a test
-package containing Instrumentation or other classes of tests while you are 
-creating or importing a new Android application project. </p>
-
-<h3>New USB Driver for Windows</h3>
-
-<p>If you are using Windows and want to develop or test your application on an
-Android-powered device (such as the T-Mobile G1), you need an appropriate USB
-driver. 
-
-<p>The Windows version of the Android 1.6 SDK includes a new, WinUSB-based
-driver that you can install. The driver is compatible with both 32- and 64-bit
-versions of Windows XP and Vista. The driver represents an upgrade from the USB
-driver included in previous Android SDKs, although installing the new driver is
-not required. </p>
-
-<p>If you installed the USB driver from a previous SDK release and it is working
-properly, you do not need to upgrade to the new driver. However, we recommend
-upgrading if you have had any problems with the older driver or simply want
-to upgrade to the latest version.</p>
-
-<p>For driver installation or
-upgrade instructions, see  <a
-href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
-</p>
-
-<h3>Emulator Skins, Android 1.6 Platform</h3>
-
-<p>The Android 1.6 platform included in the SDK provides a new set of emulator
-skins, including: </p>
-
-<ul>
-  <li>QVGA &mdash; 240 x 320, low density (120 dpi)</li>
-  <li>HVGA &mdash; 320 x 480, medium density (160 dpi)</li>
-  <li>WVGA800  &mdash; 480 x 800, high density (240 dpi)</li>
-  <li>WVGA854  &mdash; 480 x 854, high density (240 dpi)</li>
-</ul>
-
-<p>Besides these defaults, You can also create an AVD that overrides the default
-density for each skin, to create any combination of resolution/density (WVGA
-with medium density, for instance).  To do so, use the <code>android</code> tool
-command line to create a new AVD that uses a custom hardware configuration. See
-<a href="{@docRoot}tools/devices/managing-avds.html#createavd">Creating an
-AVD</a> for more information.</p>
-
-<h3>Other Notes and Resolved Issues</h3>
-
-<ul>
-  <li>This SDK release adds support for Eclipse 3.5 (Galileo) and deprecates
-support for Eclipse 3.3 (Europa). </li>
-  <li>We regret to inform developers that Android 1.6 will not include support
-for <a href="http://www.ietf.org/rfc/rfc2549">RFC 2549</a></li>
-  <li>The issue preventing adb from recognizing Samsung Galaxy devices (linux SDK
-only) has been fixed.</li>
-</ul>
-
-
-<h2 id="1.5_r3">Android 1.5 SDK, Release 3</h2>
-
-<p>Provides an updated Android 1.5 system image that includes permissions
-fixes, as described below, and a new application &mdash; an IME for Japanese 
-text input. Also provides the same set of developer tools included in the 
-previous SDK, but with bug fixes and several new features.</p>
-
-<h3>Permissions Fixes</h3>
-
-<p>The latest version of the Android platform, deployable to 
-Android-powered devices, includes fixes to the permissions-checking
-in certain areas of the framework. Specifically, the Android system
-now properly checks and enforces several existing permissions where it
-did not do so in the previous release. Because of these changes in 
-enforcement, you are strongly encouraged to test your application 
-against the new Android 1.5 system image included in this SDK, to ensure 
-that it functions normally. </p>
-
-<p>In particular, if your application uses any of the system areas listed below,
-you should add the required permissions to the application's manifest and then
-test the areas of your code that depend on the permission-protected services.
-Even if you believe your application does not use the permissions-protected
-services, you should compile and test your application under the latest platform
-version to ensure that users will not encounter problems when using your
-application. </p>
-
-<p>The changes to permissions are as follows:</p>
-
-<ul>
-<li>When an application requests access to device camera (through
-android.hardware.camera), the <code>CAMERA</code> permission check is now
-properly enforced. </li>
-<li>When an application requests access to device audio capture (through
-android.media.MediaRecorder), the <code>RECORD_AUDIO</code> permission check is
-now properly enforced.</li>
-</ul>
-
-<p>For more information, see the issue described in the oCert advisory
-below:</p>
-
-<p style="margin-left: 2em;"><a href="http://www.ocert.org/advisories/ocert-2009-011.html">http://www.ocert.org/advisories/ocert-2009-011.html</a> </p>
-
-<h3>Resolved Issues, Changes</h3>
-
-<ul>
-<li>The SDK includes a new version of the Google APIs add-on. The add-on
-provides an updated com.google.android.maps external library that fixes compile
-errors related to certain classes such as GeoPoint. For information about the
-Google APIs add-on and the library it provides, see:
-
-<p style="margin-left:2em;"><a
-href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a> </p></li>
-
-<li>The SDK add-on architecture now lets device manufacturers specify a USB
-Vendor ID in their add-ons. 
-<li>The <code>android</code> tool provides a new command that scans SDK add-ons
-for their USB Vendor IDs and makes them available to adb (OS X and Linux
-versions of the SDK only). The command is  <code>android update adb</code>. On
-Windows versions of the SDK, a custom USB driver is included that supports the
-"Google" and "HTC" Vendor IDs, which allow adb to recognize G1 and HTC
-Magic devices. For other devices, contact the device manufacturer 
-to obtain a USB driver, especially if you have an SDK add-on that defines 
-a new USB Vendor ID.</li>
-<li>The telephony, sensor, and geo fix issues in the emulator are now
-fixed.</li>
-<li>When you use adb to uninstall an upgraded application, the Android system
-now properly restores any permissions that had already been granted to the
-previous (downgrade) version of the application</li>
-</ul>
-
-<h2 id="1.5_r2">Android 1.5 SDK, Release 2</h2>
-
-<p>This SDK release provides the same developer tools as the Android 1.5 SDK,
-Release 1, but provides an updated Android 1.5 system image that includes a
-security patch for the issue described in the oCert advisory below:</p>
-
-<p style="margin-left:2em;"><a href="http://www.ocert.org/advisories/ocert-2009-006.html">http://www.ocert.org/advisories/ocert-2009-006.html</a></p>
-
-<h2 id="1.5_r1">Android 1.5 SDK, Release 1</h2>
-
-<p>This SDK provides updates to the development tools and Android system that
-you use to create applications for compliant Android-powered devices. </p>
-
-<h3>Release Overview</h3>
-
-<p>This SDK release includes many new features for developers. Highlights of the
-changes include: </p>
-
-  <ul>
-    <li>Multiple versions of the Android platform are included (Android 1.1,
-Android 1.5). The tools are updated to let you deploy your application
-on any platform in the SDK, which helps you ensure forward-compatibility and, 
-if applicable, backward-compatibility.</li>
-    <li>Introduces <a href="{@docRoot}tools/devices/managing-avds.html">Android
-Virtual Devices</a> &mdash; (AVD) configurations of options that you
-run in the emulator to better model actual devices. Each AVD gets its
-own dedicated storage area, making it much easier to work with multiple emulators 
-that are running concurrently.</li>
-    <li>Support for SDK add-ons, which extend the
-Android SDK to give you access to one or more external Android libraries and/or
-a customized (but compliant) system image that can run in the emulator. </li>
-    <li>The new Eclipse ADT plugin (version 0.9.x) offers new Wizards to let you
-create projects targeted for specific Android configurations, generate XML
-resources (such as layouts, animations, and menus), generate alternate layouts,
-and export and sign your application for publishing.</li>
-    <li>Improved JUnit support in ADT</li>
-    <li>Easier profiling of performance</li>
-    <li>Easier management of localized applications. You can now include or
-exclude locale resources when building your APK from a single
-Android project.</li>
-    <li>A new tool called "android" replaces the activitycreator script.</li>
-  </ul>
-
-<p>For details about the Android platforms included in the SDK &mdash; including
-bug fixes, features, and API changes &mdash; please read the <a
-href="{@docRoot}about/versions/android-1.5.html">Android 1.5 version notes</a>.</p>
-
-<h3>Installation and Upgrade Notes</h3>
-
-<p>If you've been developing an application using an Android 1.1 SDK, you need
-to make a few changes to your development environment to migrate to the new SDK.
-Tools and documentation are provided to assist you. No changes to the source
-code of an existing application should be needed, provided that your application
-is not using Android internal structures or APIs.</p>
-
-<p>To ensure that your existing application will work properly on a device
-running the latest version of the Android platform, you are strongly encouraged
-to migrate the application to the new SDK, compile it using the platform
-matching the application's original API Level, and run it against the most
-current platform. </p>
-
-<h3>SDK Add-Ons</h3>
-
-<p>This version of the SDK introduces support for SDK add-ons, which extend the
-Android SDK to give you access to one or more external Android libraries and/or
-a customized (but compliant) system image that can run in the emulator. The
-purpose of an SDK add-on is to give you a way to develop applications for a
-specific actual device (or family of devices) that extends the APIs available to
-Android applications through external libraries or system customizations. </p>
-
-<p>From the perspective of your Android development environment, an SDK add-on
-is similar to any of the Android platform targets included in the SDK &mdash; it
-includes an external library, a system image, as well as custom emulator skins
-and system properties. The add-on differs in that the Android platform it
-provides may include customized UI, resources, or behaviors, a different set of
-preinstalled applications, or other similar modifications. 
-
-<p>The SDK includes a single SDK add-on &mdash; the Google APIs add-on. The
-Google APIs add-on gives your application access to the com.google.android.maps
-external library that is included on many (if not most) Android-powered devices. 
-The Google APIs add-on also includes a {@link android.location.Geocoder Geocoder}
-backend service implementation. For more information, see the "Maps External 
-Library" section below. </p>
-
-<h3>Android Virtual Devices (AVDs)</h3>
-
-<p>The SDK now gives you the capability to compile an application against any
-one of several system targets, then run it in the emulator on top of any
-compatible system image. There are two types of targets:</p>
-<ul>
-<li>Targets that represent core Android platform versions. </li>
-<li>Targets that are SDK add-ons, which typically provide application access to
-one or more external libraries and/or a customized (but compliant) system image
-that can run in the emulator. 
-</ul>
-
-<p>A new tool called "android" lets you discover what targets and AVDs are
-available to use.</p>
-
-<p>For more information about AVDs, see <a
-href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>
-
-<h3>Other Notes</h3>
-
-<p><strong>Maps External Library</strong></p>
-
-<p>In previous versions of the SDK, the com.google.android.maps package was
-included in the standard Android library and system image. In the Android 1.5
-SDK, that is not the case. The Android 1.5 library and system image do not
-include the Maps external library (com.google.android.maps). However, the Maps
-external library is available as part of the Google APIs add-on for the Android
-SDK, downloadable from this location: </p>
-
-<p style="margin-left:2em;"><a
-href="http://code.google.com/android/add-ons/google-apis">http://code.google.com
-/android/add-ons/google-apis</a> </p>
-
-<p>For your convenience, the Google APIs add-on is included in the SDK. </p>
-
-<p>For information about how to register for a Maps API Key, see 
-<a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">
-Obtaining a Maps API Key</a>.</p>
-
-<p><strong>USB Drivers for Windows</strong></p>
-
-<p>If you are using Windows and want to develop or test your application on an
-Android-powered device (such as the T-Mobile G1), you need an appropriate USB
-driver. For your convenience, the Windows version of the Android SDK includes
-these USB drivers that you can install, to let you develop on the device:</p>
-
-<ul>
-<li>USB driver for 32-bit XP and Vista</li>
-<li>USB driver for 64-bit Vista only</li>
-</ul>
-
-<p>For driver installation or
-upgrade instructions, see  <a
-href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
-</p>
-
-<h3>Resolved Issues, Changes</h3>
-
-<p><strong>Media</strong></p>
-<ul>
-<li>Updated documentation for {@link android.media.SoundPool
-android.media.SoundPool}</li>
-<li>{@link android.webkit.WebView} objects no longer automatically save
-thumbnails. The {@link android.webkit.WebView#capturePicture() capturePicture()}
-method will need to be called manually.</li>
-</ul>
-
-<h3>Known Issues</h3>
-
-<p><strong>Sensor problems in Emulator</strong></p>
-
-<ul>
-<li>If your application uses the Sensor API and you are running it in the
-emulator on the Android 1.5 system image, you may experience problems. Your
-application may generate ANR messages or crash when using the sensors. The
-problem is being investigated.</li>
-</ul>
-
-<p><strong>Other</strong></p>
-
-<ul>
-<li>We regret to inform developers that Android 1.5 will not include support for
-the Zilog Z80 processor architecture.</li>
-</ul>
-
-
-<h2 id="1.1_r1">Android 1.1 SDK, Release 1</h2>
-
-<p>This SDK provides the development tools and Android system image you need to
-create applications for Android-powered devices. Applications developed on this
-SDK will be compatible with mobile devices running the Android 1.1 platform.
-</p>
-
-<p>This release provides an updated system image (Android 1.1), updated
-documentation, and the same set of development tools provided in the Android 1.0
-r2 SDK. The updated system image includes bug fixes and some smaller features,
-as well as a few minor API changes from the 1.0 version. </p>
-
-<p>For details about the Android 1.1 system image included in the SDK &mdash;
-including bug fixes, features, and API changes &mdash; please read the <a
-href="{@docRoot}about/versions/android-1.1.html">Android 1.1 version notes</a>.</p>
-
-<h3>App Versioning for Android 1.1</h3>
-
-<p>If you are using this SDK to build an application that is compatible
-<em>only</em> with Android-powered devices running the Android 1.1 platform,
-please note that you <strong>must</strong> set the the
-<code>android:minSdkVersion</code> attribute in the application's manifest to
-the API Level of Android 1.1 &mdash; "2".</p>
-
-<p>Specifically, you specify the <code>android:minSdkVersion</code> attribute in
-a <code>&lt;uses-sdk&gt;</code> element as a child of
-<code>&lt;manifest&gt;</code> in the manifest file. When set, the attribute
-looks like this: </p>
-
-<pre><code>&lt;manifest&gt;
-  ...
-  &lt;uses-sdk android:minSdkVersion="2" /&gt;
-  ...
-&lt;/manifest&gt;</code>
-</pre>
-
-<p>By setting <code>android:minSdkVersion</code> in this way, you ensure that
-users will only be able to install your application if their devices are running
-the Android 1.1 platform. In turn, this ensures that your application will
-function properly on their devices, especially if it uses APIs introduced in
-Android 1.1. </p>
-
-<p>If your application uses APIs introduced in Android 1.1 but does not declare
-<code>&lt;uses-sdk android:minSdkVersion="2" /&gt;</code>, then it will run properly on
-Android 1.1 devices but <em>not</em> on Android 1.0 devices. </p>
-
-<p>If your application does not use any new APIs introduced in Android 1.1, you
-can indicate Android 1.0 compatibility by removing <code>android:minSdkVersion</code> or
-setting the attribute to "1". However, before publishing your application, you
-must make sure to compile your application against the Android 1.0 system image
-(available in the Android 1.0 SDK), to ensure that it builds and functions
-properly for Android 1.0 devices. You should test the application against system
-images corresponding to the API Levels that the application is designed to be
-compatible with.</p>
-
-<p>If you are sure your application is not using Android 1.1 APIs and has no
-need to use them, you might find it easier to keep working in the Android 1.0
-SDK, rather than migrating to the Android 1.1 SDK and having to do additional
-testing.</p>
-
-
-<h3>ADT Plugin Compatibility</h3>
-
-<p>For this version of the SDK &mdash; Android 1.1 SDK, Release 1
-&mdash; the compatible version of the Android Development Tools (ADT)
-Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a
-previous version of ADT, you should update to the latest version for use
-with this SDK. For information about how to update your ADT plugin, see
-<a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
-
-<h3>Installation and Upgrade Notes</h3>
-
-<p>If you've been developing an application using an Android 1.0 SDK no
-changes to your application are needed. You may want to wipe application
-user data (emulator option <code>-wipe-data</code>) when running your
-application on the Android 1.1 emulator for the first time.</p>
-
-<h3>Other Notes</h3>
-
-<p><strong>MapView API Key</strong></p>
-
-<p>com.google.android.maps.MapView is a class that lets you
-easily integrate Google Maps into your application. Before you can
-access the maps data, you will need to register with the Google Maps
-service and receive a Maps API Key, which you then add to your MapView
-for authentication to the server.</p>
-
-<p>Developers should note that the registration service for MapView is now
-active and Google Maps is actively enforcing the Maps API Key requirement. 
-For information about how to register for a Maps API Key, see 
-<a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">
-Obtaining a Maps API Key</a>.</p>
-
-<p><strong>USB Drivers for Windows</strong></p>
-
-<p>If you using Windows and want to develop or test your application on an
-Android-powered device (such as the T-Mobile G1), you need an appropriate USB
-driver. For your convenience, the Windows version of the Android SDK includes
-these USB drivers that you can install, to let you develop on the device:</p>
-
-<ul>
-<li>USB driver for 32-bit XP and Vista</li>
-<li>USB driver for 64-bit Vista only</li>
-</ul>
-
-<p>The USB driver files are located in the
-<code>&lt;SDK&gt;/usb_driver</code> directory. For details and
-installation instructions, see <a
-href="{@docRoot}tools/device.html#setting-up">Connecting Hardware Devices</a>.</p>
-</p>
-
-<h3>Resolved Issues, Changes</h3>
-
-<p><strong>Emulator</strong></p>
-<ul>
-<li>Emulator now saves the user image in &lt;android&gt;/SDK1.1/</code></li>
-</ul>
-
-<h3>Known Issues</h3>
-
-<p><strong>JUnit and Eclipse/ADT</strong></p>
-<ul>
-<li>If you are developing in Eclipse/ADT and want to add JUnit test
-classes, you can do so. However, you need to set up a custom JUnit configuration
-before your tests will run properly. For detailed information about how to set
-up the JUnit configuration, see the troubleshooting topic <a
-href="{@docRoot}resources/faq/troubleshooting.html#addjunit">Running a Junit test class
-in Eclipse</a>.</li>
-</ul>
-
-<p><strong>Other</strong></p>
-
-<ul>
-<li>It is not possible to send MMS messages between emulator instances. </li>
-<li>In some cases, you may encounter problems when using the browser on an
-emulator started with the command-line option <code>-http-proxy</code>. </li>
-<li>On the OSX platform, if you manually remove the ~/.android directory
-using <code>rm -rf ~/.android</code>, then try to run 
-the emulator, it crashes. This happens because the emulator fails to create 
-a new .android directory before attempting to create the child SDK1.0 directory.
-To work around this issue, manually create a new .android directory using
-<code>mkdir ~/.android</code>, then run the emulator. The emulator 
-creates the SDK1.0 directory and starts normally. </li>
-<li>We regret to inform developers that Android 1.1 will not include support 
-for ARCNet network interfaces.</li>
-<li>The final set of Intent patterns honored by Android 1.0 has not yet been
-fully documented. Documentation will be provided in future releases.</li>
-<li>In ADT Editor, you can add at most ten new resource values at a time,
-in a given res/values/*.xml, using the form in the Android Resources pane. 
-If you add more than ten, the Android Resources pane will not display the
-attributes fields for the additional resource entries. To work around this 
-problem, you can close the file in the editor and open it again, or you 
-can edit the resource entries in the XML text mode. </li>
-<li>The emulator's battery-control commands (<code>power &lt;option&gt</code>)
-are not working in this release.</li>
-</ul>
-
-
-<h2 id="1.0_r2">Android 1.0 SDK, Release 2</h2>
-
-<p>This SDK release includes the Android 1.0 platform and application API.
-Applications developed on this SDK will be compatible with mobile devices
-running the Android 1.0 platform.</p>
-
-<p>This release includes mainly bug fixes, although some smaller features were
-added.</p>
-
-<h3>ADT Plugin Compatibility</h3>
-
-<p>For this release of the SDK, the compatible version of the Android
-Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are
-using a previous version of ADT, you should update to the latest version for use
-with this SDK. For information about how to update your ADT plugin, see <a
-href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
-
-<h3>Other Notes</h3>
-
-<p><strong>T-Mobile G1 Compatibility</strong></p>
-
-<p>This version of the SDK has been tested for compatibility with the first 
-Android-powered mobile device, the T-Mobile
-G1. </p>
-
-<p><strong>MapView API Key</strong></p>
-
-<p>MapView is a class that lets you easily integrate Google Maps into your
-application. Before you can access the maps data, you will need to register with
-the Google Maps service and receive a Maps API Key, which you then add to your
-MapView for authentication to the server.</p>
-
-<p>Developers should note that the registration service for MapView is now
-active and Google Maps is actively enforcing the Maps API Key requirement. For
-information about how to register for a Maps API Key, see <a
-href="http://code.google.com/android/add-ons/google-apis/mapkey.html">http://code.google.com/android/add-ons/google-apis/mapkey.html</a>.
-</p>
-
-<p><strong>USB Driver for Windows</strong></p>
-<p>If you using Windows and want to develop or test your application on an
-Android-powered device (such as the T-Mobile G1), you need an appropriate USB
-driver. For your convenience, the Windows version of the Android SDK includes a
-USB driver that you can install, to let you develop on the device. The USB
-driver files are located in the <code>&lt;SDK&gt;/usb_driver</code> directory. 
-
-</p>
-
-<h3>Resolved Issues, Changes</h3>
-<ul>
-<li>The android.jar in this SDK release now includes several classes that were
-missing from the previous SDK. </li>
-<li>The android.R.styleable class and its fields were removed from the public
-API, to better ensure forward-compatibility for applications. The constants
-declared in android.R.styleable were platform-specific and subject to arbitrary
-change across versions, so were not suitable for use by applications. You can
-still access the platform's styleable attributes from your resources or code. To
-do so, declare a custom resource element using a
-<code>&lt;declare-styleable&gt;</code> in your project's res/values/R.attrs
-file, then declare the attribute inside. For examples, see 
-&lt;sdk&gt;/samples/ApiDemos/res/values/attrs.xml. For more information about
-custom resources, see <a
-href="{@docRoot}guide/topics/resources/available-resources.html#customresources">Custom
-Layout Resources</a>. Note that the android.R.styleable documentation is still
-provided in the SDK, but only as a reference of the platform's styleable
-attributes for the various elements.</li>
-<li>The VM now properly ensures that private classes are not 
-available to applications through reflection. If you were using reflection
-to access private classes in a previous release, you will now get a run-time 
-error. </li>
-
-<li>The Settings and Email applications are now included in the SDK and
-available in the emulator.</li>
-<li>We regret to inform developers that SDK 1.0_r2 does not support MFM, RLL, 
-or Winchester hard disk drives.</li>
-<li>In the emulator, the control key for enabling/disabling trackball mode 
-is changed from Control-T to F6. You can also enter trackball mode temporarily
-using the Delete key. While the key is pressed, you can send trackball events.</li>
-</ul>
-
-<p>Unless otherwise noted, Known Issues from the previous SDK release also apply
-to this release.</p>
-
-
-
-
-
-
-<h2 id="1.0_r1">Android 1.0 SDK, Release 1</h2>
-
-<p>This SDK release is the first to include the Android 1.0 platform and application API. Applications developed on this SDK will be compatible with mobile devices running the Android 1.0 platform, when such devices are available.</p>
-
-<p>This release includes mainly bug fixes, although some smaller features were added. The Android 1.0 also includes several API changes from the 0.9 version. For those porting from the M5 release, the SDK also includes the legacy changes overview and API Differences Reports. See the current Overview of Changes for more information. </p>
-
-<h3>ADT Plugin Compatibility</h3>
-
-<p>For this version of the SDK &mdash; Android 1.0 SDK, Release 1 &mdash; the compatible version of the Android Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a previous version of ADT, you should update to the latest version for use with this SDK. For information about how to update your ADT plugin, see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a>.</p>
-
-<h3>Installation and Upgrade Notes</h3>
-
-<p>If you've been developing an application using a previous SDK version and you want the application to run on Android-powered mobile devices, you must port the application to the Android 1.0 SDK. Please see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a> for detailed instructions on how to make the transition to this release.  Be sure to wipe application user data (emulator option <code>-wipe-data</code>) when running your application on the Android 1.0 SDK emulator.</p>
-
-<h3>Other Notes</h3>
-
-<p><strong>MapView API Key</strong></p>
-
-<p>MapView is a class that lets you easily integrate Google Maps into your application. Before you can access the maps data, you will need to register with the Google Maps service and receive a Maps API Key, which you then add to your MapView for authentication to the server.</p>
-
-<p>Currently, the registration service for MapView is not yet active and Google Maps is not yet enforcing the Maps API Key requirement. However, note that the registration service will be activated soon, so that MapViews in any application deployed to a mobile device will require registration and a valid Maps API Key. </p>
-
-<p>As soon as the registration service becomes available, we will update the page at <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">http://code.google.com/android/add-ons/google-apis/mapkey.html</a> with details about how and where to register. Please check that page periodically for registration information, if you are using a MapView.</p>
-
-
-<h3>Resolved Issues, Changes</h3>
-
-<p><strong>Emulator</strong></p>
-<ul>
-<li>Emulator now saves the user image in &lt;android&gt;/SDK1.0/</code></li>
-<li>Fixed EsounD-related freezes on Linux.</li>
-<li>Fixed the documentation in -help-audio. '-audio list' doesn't work, one
- needs to call -help-audio-out and -help-audio-in to get the list of valid
- audio backends.</li>
-<li>Fixed scrollwheel Dpad emulation in rotated mode. before that, using the
- scroll-wheel would always generated Dpad Up/Down events, even when in
- landscape mode.</li>
-
-<li>Several Obsolete command options were removed.</li>
-<li>Setting the network speed through the console or the -netspeed option will
- properly modify the connectivity icon on the device.</li>
-<li>Setting the GSM voice registration state to 'roaming' in the console will
- properly modify the voice icon on the device</li>
-</ul>
-
-<p><strong>SQLite</strong></p>
-<ul>
-<li>SQLite is now included in the SDK package on all platforms. </li>
-</ul>
-
-<p><strong>Other</strong></p>
-
-<ul>
-<li>It is not possible to send MMS messages between emulator instances. </li>
-<li>In some cases, you may encounter problems when using the browser on an
-emulator started with the command-line option <code>-http-proxy</code>. </li>
-
-<li>We regret to inform developers that Android 1.0 will not include support for
-dot-matrix printers.</li>
-<li>On the OSX platform, if you manually remove the ~/.android directory
-using <code>rm -rf ~/.android</code>, then try to run 
-the emulator, it crashes. This happens because the emulator fails to create 
-a new .android directory before attempting to create the child SDK1.0 directory.
-To work around this issue, manually create a new .android directory using
-<code>mkdir ~/.android</code>, then run the emulator. The emulator 
-creates the SDK1.0 directory and starts normally. </li>
-<li>The final set of Intent patterns honored by Android 1.0 has not yet been
-fully documented. Documentation will be provided in future releases.</li>
-<li>In ADT Editor, you can add at most ten new resource values at a time,
-in a given res/values/*.xml, using the form in the Android Resources pane. 
-If you add more than ten, the Android Resources pane will not display the
-attributes fields for the additional resource entries. To work around this 
-problem, you can close the file in the editor and open it again, or you 
-can edit the resource entries in the XML text mode. </li>
-<li>The emulator's battery-control commands (<code>power &lt;option&gt</code>)
-are not working in this release.</li>
-
-</ul>
-
diff --git a/docs/html/tools/sdk/installing.jd b/docs/html/tools/sdk/installing.jd
deleted file mode 100644
index 19e8990..0000000
--- a/docs/html/tools/sdk/installing.jd
+++ /dev/null
@@ -1,591 +0,0 @@
-page.title=Installing the SDK
-excludeFromSuggestions=true
-
-@jd:body
-
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot +
-"assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot +
-"assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Preparing">1. Preparing Your Development Computer</a></li>
-    <li><a href="#Installing">2. Downloading the SDK Starter Package</a></li>
-    <li><a href="#InstallingADT">3. Installing the ADT Plugin for Eclipse</a></li>
-    <li><a href="#AddingComponents">4. Adding Platforms and Other Packages</a>
-      <ol>
-        <li><a href="#components">Available Packages</a></li>
-        <li><a href="#which">Recommended Packages</a></li>
-      </ol></li>
-    <li><a href="#sdkContents">5. Exploring the SDK (Optional)</a></li>
-    <li><a href="#NextSteps">Next Steps</a></li>
-    <li><a href="#troubleshooting">Troubleshooting</a></li>
-  </ol>
-
-<h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a></li>
-    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This page describes how to install the Android SDK
-and set up your development environment for the first time.</p>
-
-<p>If you encounter any problems during installation, see the
-<a href="#troubleshooting">Troubleshooting</a> section at the bottom of
-this page.</p>
-
-<h4>Updating?</h4>
-
-<p>If you already have an Android SDK, use the Android SDK Manager tool to install
-updated tools and new Android platforms into your existing environment. For information about how to
-do that, see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
-
-
-<h2 id="Preparing">Step 1. Preparing Your Development Computer</h2>
-
-<p>Before getting started with the Android SDK, take a moment to confirm that
-your development computer meets the <a href="requirements.html">System
-Requirements</a>. In particular, you might need to install the <a
-href="http://java.sun.com/javase/downloads/index.jsp">JDK</a>, if you don't have it already. </p>
-
-<p>If you will be developing in Eclipse with the Android Development
-Tools (ADT) Plugin&mdash;the recommended path if you are new to
-Android&mdash;make sure that you have a suitable version of Eclipse
-installed on your computer as described in the
-<a href="requirements.html">System Requirements</a> document.
-If you need to install Eclipse, you can download it from this location: </p>
-
-<p style="margin-left:2em;"><a href=
-"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></p>
-
-<p>The "Eclipse Classic" version is recommended. Otherwise, a Java or
-RCP version of Eclipse is recommended.</p>
-
-
-<h2 id="Installing">Step 2. Downloading the SDK Starter Package</h2>
-
-<p>The SDK starter package is not a full
-development environment&mdash;it includes only the core SDK Tools, which you can
-use to download the rest of the SDK packages (such as the latest Android platform).</p>
-
-<p>If you haven't already, get the latest version of the SDK starter package from the <a
-href="{@docRoot}sdk/index.html">SDK download page</a>.</p>
-
-<p>If you downloaded a {@code .zip} or {@code .tgz} package (instead of the SDK installer), unpack
-it to a safe location on your machine. By default, the SDK files are unpacked
-into a directory named <code>android-sdk-&lt;machine-platform&gt;</code>.</p>
-
-<p>If you downloaded the Windows installer ({@code .exe} file), run it now and it will check
-whether the proper Java SE Development Kit (JDK) is installed (installing it, if necessary), then
-install the SDK Tools into a default location (which you can modify).</p>
-
-<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
-refer to the SDK directory later, when setting up the ADT plugin and when using
-the SDK tools from the command line.</p>
-
-
-<h2 id="InstallingADT">Step 3. Installing the ADT Plugin for Eclipse</h2>
-
-<p>Android offers a custom plugin for the Eclipse IDE, called Android
-Development Tools (ADT), that is designed to give you a powerful, integrated
-environment in which to build Android applications. It extends the capabilites
-of Eclipse to let you quickly set up new Android projects, create an application
-UI, debug your applications
-using the Android SDK tools, and even export signed (or unsigned) APKs in order
-to distribute your application. In general, developing in Eclipse with ADT is a
-highly recommended approach and is the fastest way to get started with Android.
-</p>
-
-<p>If you'd like to use ADT for developing Android applications, install it now.
-Read <a href="{@docRoot}tools/sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a> for
-step-by-step installation instructions, then return here to continue the
-last step in setting up your Android SDK.</p>
-
-<p>If you prefer to work in a different IDE, you do not need to
-install Eclipse or ADT. Instead, you can directly use the SDK tools to build and
-debug your application. The <a href="{@docRoot}tools/workflow/index.html">Introduction</a>
-to Android application development outlines the major steps that you need to complete when
-developing in Eclipse or other IDEs.</p>
-
-
-
-<h2 id="AddingComponents">Step 4. Adding Platforms and Other Packages</h2>
-
-<p>The last step in setting up your SDK is using the Android SDK Manager (a
-tool included in the SDK starter package) to download essential SDK packages into your development
-environment.</p>
-
-<p>The SDK uses a modular structure that separates the major parts of the SDK&mdash;Android platform
-versions, add-ons, tools, samples, and documentation&mdash;into a set of separately installable
-packages. The SDK starter package, which you've already downloaded, includes only a single
-package: the latest version of the SDK Tools. To develop an Android application, you also need to
-download at least one Android platform and the associated platform tools. You can add other
-packages and platforms as well, which is highly recommended.</p>
-
-<p>If you used the Windows installer, when you complete the installation wizard, it will launch the
-Android SDK Manager with a default set of platforms and other packages selected
-for you to install. Simply click <strong>Install</strong> to accept the recommended set of
-packages and install them. You can then skip to <a href="#sdkContents">Step 5</a>, but we
-recommend you first read the section about the <a href="#components">Available Packages</a> to
-better understand the packages available from the Android SDK Manager.</p>
-
-<p>You can launch the Android SDK Manager in one of the following ways:</p>
-<ul>
-  <li>From within Eclipse, select <strong>Window &gt; Android SDK Manager</strong>.</li>
-  <li>On Windows, double-click the <code>SDK Manager.exe</code> file at the root of the Android
-SDK directory.</li>
-  <li>On Mac or Linux, open a terminal and navigate to the <code>tools/</code> directory in the
-Android SDK, then execute: <pre>android</pre> </li>
-</ul>
-
-<p>To download packages, use the graphical UI of the Android SDK
-Manager to browse the SDK repository and select new or updated
-packages (see figure 1). The Android SDK Manager installs the selected packages in
-your SDK environment. For information about which packages you should download, see <a
-href="#which">Recommended Packages</a>.</p>
-
-<img src="/images/sdk_manager_packages.png" />
-<p class="img-caption"><strong>Figure 1.</strong> The Android SDK Manager's
-<strong>Available Packages</strong> panel, which shows the SDK packages that are
-available for you to download into your environment.</p>
-
-
-<h3 id="components">Available Packages</h3>
-
-<p>By default, there are two repositories of packages for your SDK: <em>Android
-Repository</em> and <em>Third party Add-ons</em>.</p>
-
-<p>The <em>Android Repository</em> offers these types of packages:</p>
-
-<ul>
-<li><strong>SDK Tools</strong> &mdash; Contains tools for debugging and testing your application
-and other utility tools. These tools are installed with the Android SDK starter package and receive
-periodic updates. You can access these tools in the <code>&lt;sdk&gt;/tools/</code> directory of
-your SDK. To learn more about
-them, see <a href="{@docRoot}tools/index.html#tools-sdk">SDK Tools</a> in the
-developer guide.</li>
-
-<li><strong>SDK Platform-tools</strong> &mdash; Contains platform-dependent tools for developing
-and debugging your application. These tools support the latest features of the Android platform and
-are typically updated only when a new platform becomes available. You can access these tools in the
-<code>&lt;sdk&gt;/platform-tools/</code> directory. To learn more about them, see <a
-href="{@docRoot}tools/index.html#tools-platform">Platform Tools</a> in the
-developer guide.</li>
-
-<li><strong>Android platforms</strong> &mdash; An SDK platform is
-available for every production Android platform deployable to Android-powered devices. Each
-SDK platform package includes a fully compliant Android library, system image, sample code,
-and emulator skins. To learn more about a specific platform, see the list of platforms that appears
-under the section "Downloadable SDK Packages" on the left part of this page.</li>
-
-<li><strong>USB Driver for Windows</strong> (Windows only) &mdash; Contains driver files
-that you can install on your Windows computer, so that you can run and debug
-your applications on an actual device. You <em>do not</em> need the USB driver unless
-you plan to debug your application on an actual Android-powered device. If you
-develop on Mac OS X or Linux, you do not need a special driver to debug
-your application on an Android-powered device. See <a
-href="{@docRoot}tools/device.html">Using Hardware Devices</a> for more information
-about developing on a real device.</li>
-
-<li><strong>Samples</strong> &mdash; Contains the sample code and apps available
-for each Android development platform. If you are just getting started with
-Android development, make sure to download the samples to your SDK. <!--The download
-includes not only a set of very useful sample apps, but also the source for <a
-href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> and other
-tutorials. --></li>
-
-<li><strong>Documentation</strong> &mdash; Contains a local copy of the latest
-multiversion documentation for the Android framework API. </li>
-</ul>
-
-<p>The <em>Third party Add-ons</em> provide packages that allow you to create a development
-environment using a specific Android external library (such as the Google Maps library) or a
-customized (but fully compliant) Android system image. You can add additional Add-on repositories by
-clicking <strong>Add Add-on Site</strong>.</p>
-
-
-<h3 id="which">Recommended Packages</h3>
-
-<p>The SDK repository contains a range of packages that you can download.
-Use the table below to determine which packages you need, based on whether you
-want to set up a basic, recommended, or full development environment:
-</p>
-
-<table style="width:95%">
-
-<tr>
-<th>Environment</th>
-<th>SDK&nbsp;Package</th>
-<th>Comments</th>
-</tr>
-
-<tr>
-<td rowspan="3" style="font-size:.9em;background-color:#FFE;">Basic</td>
-<td style="font-size:.9em;background-color:#FFE;">SDK Tools</td>
-<td style="font-size:.9em;background-color:#FFE;">If you've just installed
-the SDK starter package, then you already have the latest version of this package. The
-SDK Tools package is required to develop an Android application. Make sure you keep this up to
-date.</td>
-</tr>
-
-<tr>
-<td style="font-size:.9em;background-color:#FFE;">SDK Platform-tools</td>
-<td style="font-size:.9em;background-color:#FFE;">This includes more tools that are required
-for application development. These tools are platform-dependent and typically update only when
-a new SDK platform is made available, in order to support new features in the platform. These
-tools are always backward compatible with older platforms, but you must be sure that you have
-the latest version of these tools when you install a new SDK platform.</td>
-</tr>
-
-<tr>
-<td style="font-size:.9em;background-color:#FFE;">SDK platform</td>
-<td style="font-size:.9em;background-color:#FFE;">You need to download <strong
-style="color:red">at least one platform</strong> into your environment, so that
-you will be able to compile your application and set up an Android Virtual
-Device (AVD) to run it on (in the emulator). To start with, just download the
-latest version of the platform. Later, if you plan to publish your application,
-you will want to download other platforms as well, so that you can test your
-application on the full range of Android platform versions that your application supports.</td>
-</tr>
-<tr>
-<td colspan="2"
-style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
-style="border:none"></td>
-</tr>
-<tr>
-<td rowspan="3">Recommended<br/>(plus Basic)</td>
-<td>Documentation</td>
-<td>The Documentation package is useful because it lets you work offline and
-also look up API reference information from inside Eclipse.</td>
-</tr>
-
-<tr>
-<td>Samples</td>
-<td>The Samples packages give you source code that you can use to learn about
-Android, load as a project and run, or reuse in your own app. Note that multiple
-samples packages are available &mdash; one for each Android platform version. When
-you are choosing a samples package to download, select the one whose API Level
-matches the API Level of the Android platform that you plan to use.</td>
-</tr>
-<tr>
-<td>Usb Driver</td>
-<td>The Usb Driver package is needed only if you are developing on Windows and
-have an Android-powered device on which you want to install your application for
-debugging and testing. For Mac OS X and Linux platforms, no
-special driver is needed.</td>
-</tr>
-<tr>
-<td colspan="2"
-style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
-style="border:none"></td>
-</tr>
-<tr>
-<td rowspan="3">Full<br/>(plus Recommended)</td>
-<td>Google APIs</td>
-<td>The Google APIs add-on gives your application access to the Maps external
-library, which makes it easy to display and manipulate Maps data in your
-application. </td>
-</tr>
-<tr>
-<td>Additional SDK Platforms</td>
-<td>If you plan to publish your application, you will want to download
-additional platforms corresponding to the Android platform versions on which you
-want the application to run. The recommended approach is to compile your
-application against the lowest version you want to support, but test it against
-higher versions that you intend the application to run on. You can test your
-applications on different platforms by running in an Android Virtual Device
-(AVD) on the Android emulator.</td>
-</tr>
-
-</table>
-
-<p>Once you've installed at least the basic configuration of SDK packages, you're ready to start
-developing Android apps. The next section describes the contents of the Android SDK to familiarize
-you with the packages you've just installed.</p>
-
-<p>For more information about using the Android SDK Manager, see the <a
-href="{@docRoot}sdk/exploring.html">Exploring the SDK</a> document. </p>
-
-
-<h2 id="sdkContents">Step 5. Exploring the SDK (Optional)</h2>
-
-<p>Once you've installed the SDK and downloaded the platforms, documentation,
-and add-ons that you need, we suggest that you open the SDK directory and take a look at what's
-inside.</p>
-
-<p>The table below describes the full SDK directory contents, with packages
-installed. </p>
-
-<table>
-<tr>
-<th colspan="3">Name</th><th>Description</th>
-</tr>
-<tr>
-<td colspan="3"><code>add-ons/</code></td>
-<td>Contains add-ons to the Android SDK development
-environment, which let you develop against external libraries that are available on some
-devices. </td>
-</tr>
-<tr>
-<td colspan="3"><code>docs/</code></td>
-<td>A full set of documentation in HTML format, including the Developer's Guide,
-API Reference, and other information. To read the documentation, load the
-file <code>index.html</code> in a web browser.</td>
-</tr>
-<tr>
-<td colspan="3"><code>platform-tools/</code></td>
-<td>Contains platform-dependent development tools that may be updated with each platform release.
-The platform tools include the Android Debug Bridge ({@code adb}) as well as other tools that you
-don't typically use directly. These tools are separate from the development tools in the {@code
-tools/} directory because these tools may be updated in order to support new
-features in the latest Android platform.</td>
-</tr>
-<tr>
-<td colspan="3"><code>platforms/</code></td>
-<td>Contains a set of Android platform versions that you can develop
-applications against, each in a separate directory.  </td>
-</tr>
-<tr>
-<td style="width:2em;"></td>
-<td colspan="2"><code><em>&lt;platform&gt;</em>/</code></td>
-<td>Platform version directory, for example "android-11". All platform version directories contain
-a similar set of files and subdirectory structure. Each platform directory also includes the
-Android library (<code>android.jar</code>) that is used to compile applications against the
-platform version.</td>
-</tr>
-<tr>
-<td colspan="3"><code>samples/</code></td>
-<td>Sample code and apps that are specific to platform version.</td>
-</tr>
-<tr>
-<td colspan="3"><code>tools/</code></td>
-<td>Contains the set of development and profiling tools that are platform-independent, such
-as the emulator, the Android SDK Manager, the AVD Manager, <code>ddms</code>,
-<code>hierarchyviewer</code>
-and more. The tools in this directory may be updated at any time using the Android SDK
-Manager and are independent of platform releases.</td>
-</tr>
-<tr>
-<td colspan="3"><code>SDK Readme.txt</code></td>
-<td>A file that explains how to perform the initial setup of your SDK,
-including how to launch the Android SDK Manager tool on all
-platforms.</td>
-</tr>
-<tr>
-<td colspan="3"><code>SDK Manager.exe</code></td>
-<td>Windows SDK only. A shortcut that launches the Android SDK
-Manager tool, which you use to add packages to your SDK.</td>
-</tr>
-<!--<tr>
-<td colspan="3"><code>documentation.html</code></td>
-<td>A file that loads the entry page for the local Android SDK
-documentation.</td>
-</tr>-->
-
-</table>
-
-
-<p>Optionally, you might want to add the location of the SDK's <code>tools/</code> and
-<code>platform-tools</code> to your <code>PATH</code> environment variable, to provide easy
-access to the tools.</p>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-        How to update your PATH</a>
-  <div class="toggleme">
-
-<p>Adding both <code>tools/</code> and <code>platform-tools/</code> to your PATH lets you run
-command line <a href="{@docRoot}tools/index.html">tools</a> without needing to
-supply the full path to the tool directories. Depending on your operating system, you can
-include these directories in your PATH in the following way:</p>
-
-<ul>
-
-  <li>On Windows, right-click on My Computer, and select Properties.
-  Under the Advanced tab, hit the Environment Variables button, and in the
-  dialog that comes up, double-click on Path (under System Variables). Add the full path to the
-  <code>tools/</code> and <code>platform-tools/</code> directories to the path. </li>
-
-  <li>On Linux, edit your <code>~/.bash_profile</code> or <code>~/.bashrc</code> file. Look
-  for a line that sets the PATH environment variable and add the
-  full path to the <code>tools/</code> and <code>platform-tools/</code> directories to it. If you
-  don't see a line setting the path, you can add one:
-  <pre>export PATH=${PATH}:&lt;sdk&gt;/tools:&lt;sdk&gt;/platform-tools</pre>
-  </li>
-
-  <li>On a Mac OS X, look in your home directory for <code>.bash_profile</code> and
-  proceed as for Linux. You can create the <code>.bash_profile</code> if
-  you don't already have one. </li>
-</ul>
-
-</div><!-- end toggleme -->
-</div><!-- end toggleable -->
-
-
-<h2 id="NextSteps">Next Steps</h2>
-<p>Once you have completed installation, you are ready to
-begin developing applications. Here are a few ways you can get started: </p>
-
-<p><strong>Set up the Hello World application</strong></p>
-<ul>
-  <li>If you have just installed the SDK for the first time, go to the <a
-  href="{@docRoot}training/basics/firstapp/index.html">Hello
-  World tutorial</a>. The tutorial takes you step-by-step through the process
-  of setting up your first Android project, including setting up an Android
-  Virtual Device (AVD) on which to run the application.
-</li>
-</ul>
-
-<p class="note">Following the Hello World tutorial is an essential
-first step in getting started with Android development. </p>
-
-<p><strong>Learn about Android</strong></p>
-<ul>
-  <li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
-  Guide</a> and the types of information it provides.</li>
-  <li>Read an introduction to Android as a platform in <a
-  href="{@docRoot}guide/basics/what-is-android.html">What is
-  Android?</a></li>
-  <li>Learn about the Android framework and how applications run on it in
-  <a href="{@docRoot}guide/components/fundamentals.html">Application
-  Fundamentals</a>.</li>
-  <li>Take a look at the Android framework API specification in the <a
-  href="{@docRoot}reference/packages.html">Reference</a> tab.</li>
-</ul>
-
-<p><strong>Explore the development tools</strong></p>
-<ul>
-  <li>Get an overview of the <a
-  href="{@docRoot}tools/index.html">development
-  tools</a> that are available to you.</li>
-  <li>Read the <a href="{@docRoot}tools/workflow/index.html">Introduction</a> to Android
-application development.
-  </li>
-  <li>Read <a href="{@docRoot}tools/device.html">Using Hardware Devices</a> to learn
-how to set up an Android-powered device so you can run and test your application.</li>
-</ul>
-
-<p><strong>Follow the Notepad tutorial</strong></p>
-
-<ul>
-  <li>The <a href="{@docRoot}training/notepad/index.html">
-  Notepad Tutorial</a> shows you how to build a full Android application
-  and provides  helpful commentary on the Android system and API. The
-  Notepad tutorial helps you bring together the important design
-  and architectural concepts in a moderately complex application.
-  </li>
-</ul>
-<p class="note">Following the Notepad tutorial is an excellent
-second step in getting started with Android development. </p>
-
-<p><strong>Explore some code</strong></p>
-
-<ul>
-  <li>The Android SDK includes sample code and applications for each platform
-version. You can browse the samples in the <a
-href="{@docRoot}resources/index.html">Resources</a> tab or download them
-into your SDK using the Android SDK Manager. Once you've downloaded the
-samples, you'll find them in
-<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;/</em></code>. </li>
-</ul>
-
-<p><strong>Visit the Android developer groups</strong></p>
-<ul>
-  <li>Take a look at the <a
-  href="{@docRoot}resources/community-groups.html">Community</a> pages to see a list of
-  Android developers groups. In particular, you might want to look at the
-  <a href="http://groups.google.com/group/android-developers">Android
-  Developers</a> group to get a sense for what the Android developer
-  community is like.</li>
-</ul>
-
-<h2 id="troubleshooting">Troubleshooting</h2>
-
-<h3>Ubuntu Linux Notes</h3>
-
-<ul>
-  <li>If you need help installing and configuring Java on your
-    development machine, you might find these resources helpful:
-    <ul>
-      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
-      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li>
-    </ul>
-  </li>
-  <li>Here are the steps to install Java and Eclipse, prior to installing
-  the Android SDK and ADT Plugin.
-    <ol>
-      <li>If you are running a 64-bit distribution on your development
-      machine, you need to install the <code>ia32-libs</code> package using
-      <code>apt-get:</code>:
-      <pre>apt-get install ia32-libs</pre>
-      </li>
-      <li>Next, install Java: <pre>apt-get install sun-java6-jdk</pre></li>
-      <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
-      version for download, so we recommend that you download Eclipse from
-      eclipse.org (<a
-      href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
-      downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
-      <li>Follow the steps given in previous sections to install the SDK
-      and the ADT plugin. </li>
-    </ol>
-  </li>
-</ul>
-
-<h3>Other Linux Notes</h3>
-
-<ul>
-  <li>If JDK is already installed on your development computer, please
-  take a moment to make sure that it meets the version requirements listed
-  in the <a href="requirements.html">System Requirements</a>.
-  In particular, note that some Linux distributions may include JDK 1.4 or Gnu
-  Compiler for Java, both of which are not supported for Android development.</li>
-</ul>
diff --git a/docs/html/tools/sdk/older_releases.jd b/docs/html/tools/sdk/older_releases.jd
deleted file mode 100644
index 94baa92..0000000
--- a/docs/html/tools/sdk/older_releases.jd
+++ /dev/null
@@ -1,614 +0,0 @@
-page.title=SDK Archives
-excludeFromSuggestions=true
-@jd:body
-
-<p>This page provides a full list of archived and obsolete SDK releases,
-including non-current versions of active releases and "early look" versions that
-were released before Android 1.0. <strong>These are provided for
-informational and archival purposes only</strong>.</p>
-
-<div class="special">
-<p>If you are just starting to develop applications for Android, please
-download the current <a href="{@docRoot}sdk/index.html">Android
-SDK</a>. With the current Android SDK, you can add any current and previous
-version of the Android platform as a component and use it for
-development and testing.</p>
-<p>If you already have an Android SDK for platform version 1.6 or newer, then
-you do not need to install a new SDK&mdash;especially not one from this page.
-You should install older platforms as components of your existing SDK.
-See <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
-</div>
-
-
-<h2>Archived SDKs</h2>
-
-<p>The tables below provides Android SDKs that are current in terms of their
-platform version, but do not provide the latest Android development
-environment and tools. Instead of downloading one of these, as a separate
-SDK for each version of the platform, you should instead use the new
-version-neutral Android SDK to download each version of
-the Android platfrom as an individual component.</p>
-
-<p>Please download the current <a
-href="http://developer.android.com/sdk/index.html">Android SDK</a>.</p>
-
-
-<h3>Release 1.6 r1</h3>
- <p><em>September 2009 - <a href="RELEASENOTES.html#1.6_r1">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.6_r1.zip">android-sdk-
-windows-1 .6_r1.zip</a>
-    </td>
-    <td>260529085 bytes</td>
-    <td>2bcbacbc7af0363058ca1cac6abad848</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.6_r1.zip">android-sdk-
-mac_x86-1 .6_r1.zip</a>
-    </td>
-    <td>247412515 bytes</td>
-    <td>eb13cc79602d492e89103efcf48ac1f6</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.6_r1.tgz">android-
-sdk- linux_x86-1.6_r1.tgz</a>
-    </td>
-    <td>238224860 bytes</td>
-    <td>b4bf0e610ff6db2fb6fb09c49cba1e79</td>
-  </tr>
-  
-  </table>
-
-
-<h3>Release 1.5 r3</h3>
- <p><em>July 2009 - <a href="RELEASENOTES.html#1.5_r3">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r3.zip">android-sdk-
-windows-1 .5_r3.zip</a>
-    </td>
-    <td>191477853 bytes</td>
-    <td>1725fd6963ce69102ba7192568dfc711</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r3.zip">android-sdk-
-mac_x86-1 .5_r3.zip</a>
-    </td>
-    <td>183024673 bytes</td>
-    <td>b1bafdaefdcec89a14b604b504e7daec</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r3.zip">android-
-sdk- linux_x86-1.5_r3.zip</a>
-    </td>
-    <td>178117561 bytes</td>
-    <td>350d0211678ced38da926b8c9ffa4fac</td>
-  </tr>
-  
-  </table>
-
-
-<h3>Release 1.1 r1</h3>
- <p><em>February 2009 - <a href="RELEASENOTES.html#1.1_r1">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.1_r1.zip">android-sdk-
-windows-1
-.1_r1.zip</a>
-    </td>
-    <td>86038515 bytes</td>
-    <td>8c4b9080b430025370689e03d20842f3</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.1_r1.zip">android-sdk-
-mac_x86-1
-.1_r1.zip</a>
-    </td>
-    <td>79046151 bytes</td>
-    <td>becf0f1763d61eedce15d2a903d6c1dd</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.1_r1.zip">android-
-sdk-
-linux_x86-1.1_r1.zip</a>
-    </td>
-    <td>79345522 bytes</td>
-    <td>ebcb16b0cd4aef198b4dd9a1418efbf1</td>
-  </tr>
-  
-  </table>
-
-
-<h3>Release 1.0 r2</h3>
- <p><em>November 2008 - <a href="RELEASENOTES.html#1.0_r2">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r2.zip">android-sdk-
-windows-1
-.0_r2.zip</a>
-    </td>
-    <td>98360564 bytes</td>
-    <td>a5e1af8ac145946b4a9627516ad4a711</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r2.zip">android-sdk-
-mac_x86-1
-.0_r2.zip</a>
-    </td>
-    <td>93771410 bytes</td>
-    <td>87b99d5e9f59b78363a63200c11498e8</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r2.zip">android-
-sdk-
-linux_x86-1.0_r2.zip</a>
-    </td>
-    <td>94186463 bytes</td>
-    <td>a1f3b6d854596f850f5008856d0f380e</td>
-  </tr>
-  
-  </table>
-
-
-
-
-<h2>Obsolete SDK Releases</h2>
-
-<p>These tables provide Android SDK releases that have been superceded by
-an active release (shown above) and that are now obsolete.</p>
-
-
-<h3>Release 1.5 r2</h3>
- <p><em>May 2009 - <a href="RELEASENOTES.html#1.5_r2">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r2.zip">android-sdk-
-windows-1 .5_r2.zip</a>
-    </td>
-    <td>178346828 bytes</td>
-    <td>ba54ac6bda45921d442b74b6de6ff6a9</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r2.zip">android-sdk-
-mac_x86-1 .5_r2.zip</a>
-    </td>
-    <td>169945128 bytes</td>
-    <td>f4e06a5194410243f213d0177713d6c9</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r2.zip">android-
-sdk- linux_x86-1.5_r2.zip</a>
-    </td>
-    <td>165035130 bytes</td>
-    <td>1d3c3d099e95a31c43a7b3e6ae307ed3</td>
-  </tr>
-  
-  </table>
-
-
-<h3>Release 1.5 r1</h3>
- <p><em>April 2009 - <a href="RELEASENOTES.html#1.5_r1">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r1.zip">android-sdk-
-windows-1 .5_r1.zip</a>
-    </td>
-    <td>176263368 bytes</td>
-    <td>42be980eb2d3efaced01ea6c32c0045f</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r1.zip">android-sdk-
-mac_x86-1 .5_r1.zip</a>
-    </td>
-    <td>167848675 bytes</td>
-    <td>5b2a8d9f096032db4a75bfa0d689a51b</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r1.zip">android-
-sdk- linux_x86-1.5_r1.zip</a>
-    </td>
-    <td>162938845 bytes</td>
-    <td>2addfd315da0ad8b5bde6b09d5ff3b06</td>
-  </tr>
-  
-  </table>
-
-
-<h3>Release 1.0 r1</h3>
- <p><em>September 23, 2008 - <a href="RELEASENOTES.html#1.0_r1">Release
-Notes</a></em></p>
-
-  <table class="download">
-    <tr>
-      <th>Platform</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>Windows</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r1.zip">android-sdk-
-windows-1 .0_r1.zip</a>
-    </td>
-    <td>89.7 MB bytes</td>
-    <td>d69f4ee93d4010f726c04302662fd999</td>
-  </tr>
-  <tr class="alt-color">
-    <td>Mac OS X (intel)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r1.zip">android-sdk-
-mac_x86-1 .0_r1.zip</a>
-    </td>
-    <td>87.5 MB bytes</td>
-    <td>564876ada22872e50c2866806de9fc5c</td>
-  </tr>
-  <tr>
-    <td>Linux (i386)</td>
-    <td>
-  <a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r1.zip">android-
-sdk- linux_x86-1.0_r1.zip</a>
-    </td>
-    <td>87.8 MB bytes</td>
-    <td>2660b4029039b7d714e59827e9a9a11d</td>
-  </tr>
-  
-  </table>
-
-
-
-
-<h2>Non-Compatible SDK Releases</h2>
-
-<!-- <div class="special"> -->
-<p>The SDKs listed below are "early-look" versions that were released in
-  the year preceding the full release of Android 1.0 in September 2008. Because
-  these early-look SDKs were released before the Android 1.0 API specification was
-  finalized, they do not provide a compliant Android execution environment.
-  Consequently, applications that you develop in these SDKs will not be able to
-  run on any Android-powered devices.</p>
-
-<p>If you have an older application that you built in one of the early-look
-SDKs, you must migrate it to the Android 1.0 SDK (or later release) before you
-will be able to deploy it to an Android-powered device. To help with this
-migration, each SDK package below provides information about API changes from
-the previous version. You can find the migration information in the
-documentation included in each SDK package.</p>
-<!-- </div> -->
-
-<h4>Version 0.9 Beta</h4>
-<p><em>August 18, 2008 - <a href="OLD_RELEASENOTES.html#0.9_beta">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-0.9_beta.zip">
-android-sdk-windows-0.9_beta.zip</a></td>
-     <td>93,126,573 bytes</td>
-     <td>305031ad8335d1b6040bdd5a65349d6d</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-0.9_beta.zip">
-android-sdk-mac_x86-0.9_beta.zip</a></td>
-     <td>91,374,464 bytes</td>
-     <td>9a6969159091cede46302e11049fe3ca</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-0.9_beta.zip"
->android-sdk-linux_x86-0.9_beta.zip</a></td>
-     <td>91,821,068 bytes</td>
-     <td>077e5ef549dd9c5be54bd88e6a8e196c</td>
-   </tr>
- </table>
-
-<h4>Version m5-rc15</h4>
- <p><em>March 3, 2008 - <a href="OLD_RELEASENOTES.html#m5-rc15">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_windows.zip">
-android-sdk_m5-rc15_windows.zip</a></td>
-     <td>79 MB</td>
-     <td>ecce40bc50201886d95ba2690cdbc5ce</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_mac-x86.zip">
-android-sdk_m5-rc15_mac-x86.zip</a></td>
-     <td>76 MB</td>
-     <td>45a6385bbc1b2cb295409cfc81fb04b4</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_linux-x86.zip">
-android-sdk_m5-rc15_linux-x86.zip</a></td>
-     <td>76 MB</td>
-     <td>e913f785afecdeed34c30639fd8c5862</td>
-   </tr>
- </table>
-
- <h4>Version m5-rc14</h4>
- <p><em>February 12, 2008 - <a href="OLD_RELEASENOTES.html#m5-rc14">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_windows.zip">
-android-sdk_m5-rc14_windows.zip</a></td>
-     <td>79 MB</td>
-     <td>ecc75c1e69588350634ca25867ce05a0</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_mac-x86.zip">
-android-sdk_m5-rc14_mac-x86.zip</a></td>
-     <td>76 MB</td>
-     <td>844c80d0adb1a326f5a9fff262c61efc</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_linux-x86.zip">
-android-sdk_m5-rc14_linux-x86.zip</a></td>
-     <td>76 MB</td>
-     <td>f8b863c8a880afe9bb84124f5976aab1</td>
-   </tr>
- </table>
-
-
-
-
- <h4>Version m3-rc37a</h4>
- <p><em>December 14, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc37a">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc37a.zip">
-android_sdk_windows_m3-rc37a.zip</a></td>
-     <td>58 MB</td>
-     <td>5db5aea20a2c2f010baefc4b1091a575</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc37a.zip">
-android_sdk_darwin_m3-rc37a.zip</a></td>
-     <td>54 MB</td>
-     <td>0b22e73fbd07b4af4009387afce3a37f</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc37a.zip">
-android_sdk_linux_m3-rc37a.zip</a></td>
-     <td>54 MB</td>
-     <td>41285beecc4f9926e6ecf5f12610b356</td>
-   </tr>
- </table>
-
-
-
-
- <h4>Version m3-rc22a</h4>
- <p><em>November 16, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc22a">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc22a.zip">
-android_sdk_windows_m3-rc22a.zip</a></td>
-     <td>59 MB</td>
-     <td>aa3dee05a9872752a3bc4efd0f93e98b</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc22a.zip">
-android_sdk_darwin_m3-rc22a.zip</a></td>
-     <td>55 MB</td>
-     <td>0547f45614ad94c3af22c3c0aa6f709f</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc22a.zip">
-android_sdk_linux_m3-rc22a.zip</a></td>
-     <td>55 MB</td>
-     <td>84b3455de5cdfd841a172c13d24c382e</td>
-   </tr>
- </table>
-
-
-
-
- <h4>Version m3-rc20a</h4>
- <p><em>November 12, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc20a">Release Notes</a></em></p>
- <table>
-   <tr>
-     <th colspan="2">Package</th>
-     <th>Size</th>
-     <th>MD5 Checksum</th>
-   </tr>
-   <tr>
-     <td>Windows</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc20a.zip">
-android_sdk_windows_m3-rc20a.zip</a></td>
-     <td>59 MB</td>
-     <td>a404b875708df7339ba77bdf2e08dc06</td>
-   </tr>
-   <tr class="alt">
-     <td>Mac OS X (intel)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc20a.zip">
-android_sdk_darwin_m3-rc20a.zip</a></td>
-     <td>55 MB</td>
-     <td>8fc29aeaa45eda84bfac854ebd02a6da</td>
-   </tr>
-   <tr>
-     <td>Linux (i386)</td>
-     <td>
-<a
-href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc20a.zip">
-android_sdk_linux_m3-rc20a.zip</a></td>
-     <td>55 MB</td>
-     <td>9196759df9b69cd89a220b156f133364</td>
-   </tr>
- </table>
diff --git a/docs/html/tools/sdk/win-usb.jd b/docs/html/tools/sdk/win-usb.jd
deleted file mode 100644
index d322340..0000000
--- a/docs/html/tools/sdk/win-usb.jd
+++ /dev/null
@@ -1,172 +0,0 @@
-page.title=Google USB Driver
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#notes">Revisions</a></li>
-    <li><a href="#WinUsbDriver">Downloading the Google USB Driver</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a></li>
-    <li><a href="{@docRoot}tools/device.html">Using Hardware Devices</a></li>
-    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-  </ol>
-</div>
-</div>
-
-<p>The Google USB driver is a downloadable component for the Android SDK, available
-from the SDK Manager. The driver is for Windows only and provides the necessary drivers for the
-following devices:</p>
-  <ul>
-    <li>ADP1 / T-Mobile G1*</li>
-    <li>ADP2 / Google Ion / T-Mobile myTouch 3G*</li>
-    <li>Verizon Droid*</li>
-    <li>Nexus One</li>
-    <li>Nexus S</li>
-  </ul>
-  <p>* <em>Or similar hardware on other carriers</em></p>
-  
-  <p>All other devices require Windows drivers provided by the hardware manufacturer, as listed in
-the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
-driver is also distributed by <a
-href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
-(listed as model SCH-I515).</p>
-
-<p class="note"><strong>Note:</strong>
-If you're developing on Mac OS X or Linux, then you do not need to install a USB driver. To start
-developing with your device, also read <a href="{@docRoot}tools/device.html">Using
-Hardware Devices</a>.</p>
-
-<p>The sections below provide instructions on how to download and install the Google USB Driver
-for Windows. </p>
-
-
-
-
-<h2 id="notes">Revisions</h2>
-
-<p>The sections below provide notes about successive revisions of the USB Driver
-for Windows, as denoted by revision number. To determine what revision of the
-USB Driver for Windows you are using, refer to the "Installed Packages" listing
-in the Android SDK Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
-width="9px" />
-USB Driver for Windows, Revision 4</a> <em>(December 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt><p>Adds support for the Nexus S.</p></dt>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-USB Driver for Windows, Revision 3</a> <em>(January 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt><p>Adds support for the Nexus One.</p></dt>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-USB Driver for Windows, Revision 2</a> <em>(November 2009)</em>
-  <div class="toggleme">
-
-<dl>
-<dt><p>Adds support for the Verizon Droid (or similar hardware on
-other carriers).</p></dt>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-USB Driver for Windows, Revision 1</a> <em>(October 2009)</em>
-  <div class="toggleme">
-
-<dl>
-<dt><p>Initial release of the WinUsb-based driver, with support
-for the T-Mobile G1 and myTouch 3G (and similar devices).</p></dt>
-</dl>
- </div>
-</div>
-
-
-<h2 id="WinUsbDriver">Downloading the Google USB Driver</h2>
-
-<div class="figure" style="width:536px;margin:0">
-  <img src="{@docRoot}images/developing/sdk-usb-driver.png" alt="" />
-  <p class="img-caption"><strong>Figure 1.</strong> The SDK Manager
-    with the Google USB Driver selected.</p>
-</div>
-
-<p>The USB Driver for Windows is available for download as an optional SDK
-component. You need the driver only if you are developing on Windows and 
-want to connect an Android-powered device (ADP, Nexus One, or Nexus S) to your
-development environment over USB. </p>
-
-<p>To download the driver, use the Android SDK Manager tool that is
-included with the <a href="{@docRoot}sdk/index.html">Android SDK</a>:</p>
-<ol>
-  <li>Launch the Android SDK Manager by double-clicking <code>SDK Manager.exe</code>,
-  at the root of your SDK directory.</li>
-  <li>Expand <em>Extras</em>.</li>
-  <li>Check <strong>Google USB Driver package</strong> and click <strong>Install</strong>.</li>
-  <li>Proceed to install the package. When done, the driver files are
-downloaded into the <code>&lt;sdk&gt;\extras\google\usb_driver\</code> directory.</li>
-</ol>
-
-<p>For installation information, read <a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a>.</p>
diff --git a/docs/html/tools/workflow/app-signing.jd b/docs/html/tools/workflow/app-signing.jd
deleted file mode 100644
index ac45242..0000000
--- a/docs/html/tools/workflow/app-signing.jd
+++ /dev/null
@@ -1,618 +0,0 @@
-page.title=Signing Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>All Android apps <em>must</em> be signed</li>
-<li>You can sign with a self-signed key</li>
-<li>How you sign your apps is critical &mdash; read this document carefully</li>
-<li>Determine your signing strategy early in the development process</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#signing">Signing Process</a></li>
-<li><a href="#strategies">Signing Strategies</a></li>
-<li><a href="#setup">Basic Setup for Signing</a></li>
-<li><a href="#debugmode">Signing in Debug Mode</a></li>
-<li><a href="#releasemode">Signing Release Mode</a>
-    <ol>
-    <li><a href="#cert">Obtain a suitable private key</a></li>
-    <li><a href="#releasecompile">Compile the application in release mode</a></li>
-    <li><a href="#signapp">Sign your application with your private key</a></li>
-    <li><a href="#align">Align the final APK package</a></li>
-    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
-    </ol>
-</li>
-<li><a href="#secure-key">Securing Your Private Key</a></li>
-
-</ol>
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a></li>
-<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>The Android system requires that all installed applications be digitally signed with a
-certificate whose private key is held by the application's developer. The Android system uses the
-certificate as a means of identifying the author of an application and establishing trust
-relationships between applications. The certificate is not used to control which applications the
-user can install. The certificate does not need to be signed by a certificate authority: it is
-perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
-
-<p>The important points to understand about signing Android applications are:</p>
-
-<ul>
-  <li>All applications <em>must</em> be signed. The system will not install an application
-on an emulator or a device if it is not signed.</li>
-  <li>To test and debug your application, the build tools sign your application with a special debug
-    key that is created by the Android SDK build tools.</li>
-  <li>When you are ready to release your application for end-users, you must sign it with a suitable
-    private key. You cannot publish an application that is signed with the debug key generated
-    by the SDK tools.</li>
-  <li>You can use self-signed certificates to sign your applications. No certificate authority is
-    needed.</li>
-  <li>The system tests a signer certificate's expiration date only at install time. If an
-application's signer certificate expires after the application is installed, the application
-will continue to function normally.</li>
-  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
-sign your application {@code .apk} files.</li>
-  <li>After you sign your application for release, we recommend that you use the
-    <code>zipalign</code> tool to optimize the final APK package.</li>
-</ul>
-
-<p>The Android system will not install or run an application that is not signed appropriately. This
-applies wherever the Android system is run, whether on an actual device or on the emulator.
-For this reason, you must <a href="#setup">set up signing</a> for your application before you can
-run it or debug it on an emulator or device.</p>
-
-<h2 id="signing">Signing Process</h3>
-
-<p>The Android build process signs your application differently depending on which build mode you
-use to build your application. There are two build modes: <em>debug mode</em> and <em>release
-mode</em>. You use debug mode when you are developing and testing your application. You use
-release mode when you want to build a release version of your application that you can
-distribute directly to users or publish on an application marketplace such as Google Play.</p>
-
-<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
-(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
-they know the debug key's alias and password. Each time you compile your application in debug mode,
-the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
-sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
-build tools, the tools don't need to prompt you for the debug key's alias and password each time
-you compile.</p>
-
-<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
-you don't have a private key, you can use the Keytool utility to create one for you. When you
-compile your application in release mode, the build tools use your private key along with the
-Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
-private key you use are your own, you will have to provide the password for the keystore and key
-alias.</p>
-
-<p>The debug signing process happens automatically when you run or debug your application using
-Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
-script with the <code>debug</code> option. You can automate the release signing process by using the
-Eclipse Export Wizard or by modifying the Ant build script and building with the
-<code>release</code> option.</p>
-
-<h2 id="strategies">Signing Strategies</h2>
-
-<p>Some aspects of application signing may affect how you approach the development
-of your application, especially if you are planning to release multiple
-applications. </p>
-
-<p>In general, the recommended strategy for all developers is to sign
-all of your applications with the same certificate, throughout the expected
-lifespan of your applications. There are several reasons why you should do so: </p>
-
-<ul>
-<li>Application upgrade &ndash; As you release updates to your application, you
-will want to continue to sign the updates with the same certificate or set of
-certificates, if you want users to upgrade seamlessly to the new version. When
-the system is installing an update to an application, it compares the
-certificate(s) in the new version with those in the existing version. If the
-certificates match exactly, including both the certificate data and order, then
-the system allows the update. If you sign the new version without using matching
-certificates, you will also need to assign a different package name to the
-application &mdash; in this case, the user installs the new version as a
-completely new application. </li>
-
-<li>Application modularity &ndash; The Android system allows applications that
-are signed by the same certificate to run in the same process, if the
-applications so requests, so that the system treats them as a single application.
-In this way you can deploy your application in modules, and users can update
-each of the modules independently if needed.</li>
-
-<li>Code/data sharing through permissions &ndash; The Android system provides
-signature-based permissions enforcement, so that an application can expose
-functionality to another application that is signed with a specified
-certificate. By signing multiple applications with the same certificate and
-using signature-based permissions checks, your applications can share code and
-data in a secure manner. </li>
-
-</ul>
-
-<p>Another important consideration in determining your signing strategy is
-how to set the validity period of the key that you will use to sign your
-applications.</p>
-
-<ul>
-<li>If you plan to support upgrades for a single application, you should ensure
-that your key has a validity period that exceeds the expected lifespan of
-that application. A validity period of 25 years or more is recommended.
-When your key's validity period expires, users will no longer be
-able to seamlessly upgrade to new versions of your application.</li>
-
-<li>If you will sign multiple distinct applications with the same key,
-you should ensure that your key's validity period exceeds the expected
-lifespan of <em>all versions of all of the applications</em>, including
-dependent applications that may be added to the suite in the future. </li>
-
-<li>If you plan to publish your application(s) on Google Play, the
-key you use to sign the application(s) must have a validity period
-ending after 22 October 2033. Google Play enforces this requirement
-to ensure that users can seamlessly upgrade applications when
-new versions are available. </li>
-</ul>
-
-<p>As you design your application, keep these points in mind and make sure to
-use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
-
-<h2 id="setup">Basic Setup for Signing</h2>
-
-<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
-the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
-the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
-variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
-Jarsigner to your <code>PATH</code> variable.</p>
-
-<p>If you are developing on a version of Linux that originally came with GNU Compiler for
-Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
-version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
-<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
-to the Keytool in the JDK.</p>
-
-<h2 id="debugmode">Signing in Debug Mode</h2>
-
-<p>The Android build tools provide a debug signing mode that makes it easier for you
-to develop and debug your application, while still meeting the Android system
-requirement for signing your APK.
-When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
-a debug keystore and key. This debug key is then used to automatically sign the APK, so
-you do not need to sign the package with your own key.</p>
-
-<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
-<ul>
-<li>Keystore name: "debug.keystore"</li>
-<li>Keystore password: "android"</li>
-<li>Key alias: "androiddebugkey"</li>
-<li>Key password: "android"</li>
-<li>CN: "CN=Android Debug,O=Android,C=US"</li>
-</ul>
-
-<p>If necessary, you can change the location/name of the debug keystore/key or
-supply a custom debug keystore/key to use. However, any custom debug
-keystore/key must use the same keystore/key names and passwords as the default
-debug key (as described above). (To do so in Eclipse/ADT, go to
-<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
-<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
-
-<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
-to the public when signed with the debug certificate.</p>
-
-<h3>Eclipse Users</h3>
-
-<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
-<a href="#setup">Basic Setup for Signing</a>),
-signing in debug mode is enabled by default. When you run or debug your
-application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
-the package, then installs it on
-the selected emulator or connected device. No specific action on your part is needed,
-provided ADT has access to Keytool.</p>
-
-<h3>Ant Users</h3>
-
-<p>If you are using Ant to build your {@code .apk} file, debug signing mode
-is enabled by using the <code>debug</code> option with the <code>ant</code> command
-(assuming that you are using a <code>build.xml</code> file generated by the
-<code>android</code> tool). When you run <code>ant debug</code> to
-compile your app, the build script generates a keystore/key and signs the APK for you.
-The script then also aligns the APK with the <code>zipalign</code> tool.
-No other action on your part is needed. Read
-<a href="{@docRoot}tools/building/building-cmdline.html#DebugMode">Building and Running Apps
-on the Command Line</a> for more information.</p>
-
-
-<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
-
-<p>The self-signed certificate used to sign your application in debug mode (the default on
-Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
-
-<p>When the certificate expires, you will get a build error. On Ant builds, the error
-looks like this:</p>
-
-<pre>debug:
-[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
-[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
-
-<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
-
-<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
-The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
-in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
-<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
-
-
-<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
-
-<p>Note that, if your development machine is using a non-Gregorian locale, the build
-tools may erroneously generate an already-expired debug certificate, so that you get an
-error when trying to compile your application. For workaround information, see the
-troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
-I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
-certificate</a>. </p>
-
-
-<h2 id="releasemode">Signing in Release Mode</h2>
-
-<p>When your application is ready for release to other users, you must:</p>
-<ol>
-  <li><a href="#cert">Obtain a suitable private key</a></li>
-  <li><a href="#releasecompile">Compile the application in release mode</a></li>
-  <li><a href="#signapp">Sign your application with your private key</a></li>
-  <li><a href="#align">Align the final APK package</a></li>
-</ol>
-
-<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
-to perform the compile, sign, and align procedures. The Export Wizard even allows you to
-generate a new keystore and private key in the process. So if you use Eclipse, you can
-skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
-
-
-
-<h3 id="cert">1. Obtain a suitable private key</h3>
-
-<p>In preparation for signing your application, you must first ensure that
-you have a suitable private key with which to sign. A suitable private
-key is one that:</p>
-
-<ul>
-<li>Is in your possession</li>
-<li>Represents the personal, corporate, or organizational entity to be identified
-with the application</li>
-<li>Has a validity period that exceeds the expected lifespan of the application
-or application suite. A validity period of more than 25 years is recommended.
-<p>If you plan to publish your application(s) on Google Play, note that a
-validity period ending after 22 October 2033 is a requirement. You can not upload an
-application if it is signed with a key whose validity expires before that date.
-</p></li>
-<li>Is not the debug key generated by the Android SDK tools. </li>
-</ul>
-
-<p>The key may be self-signed. If you do not have a suitable key, you must
-generate one using Keytool. Make sure that you have Keytool available, as described
-in <a href="#setup">Basic Setup</a>.</p>
-
-<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
-command and pass any of the options listed below (and any others, as
-needed). </p>
-
-<p class="warning"><strong>Warning:</strong> Keep your private key secure.
-Before you run Keytool, make sure to read
-<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
-your key secure and why doing so is critically important to you and to users. In
-particular, when you are generating your key, you should select strong passwords
-for both the keystore and key.</p>
-
-<table>
-<tr>
-<th>Keytool Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-genkey</code></td><td>Generate a key pair (public and private
-keys)</td>
-</tr>
-<tr>
-<td><code>-v</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
-the first 8 characters of the alias are used.</td>
-</tr>
-<tr>
-<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
-when generating the key. Both DSA and RSA are supported.</td>
-</tr>
-<tr>
-<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
-(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
-general, we recommend using a key size of 2048 bits or higher. </td>
-</tr>
-<tr>
-<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
-who created the key. The value is used as the issuer and subject fields in the
-self-signed certificate. </p><p>Note that you do not need to specify this option
-in the command line. If not supplied, Jarsigner prompts you to enter each
-of the Distinguished Name fields (CN, OU, and so on).</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
-key.</p> <p>As a security precaution, do not include this option in your command
-line. If not supplied, Keytool prompts you to enter the password. In this way,
-your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
-key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
-for the keystore containing the private key.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
-keystore.</p><p>As a security precaution, do not include this option in your
-command line. If not supplied, Keytool prompts you to enter the password. In
-this way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's an example of a Keytool command that generates a private key:</p>
-
-<pre>$ keytool -genkey -v -keystore my-release-key.keystore
--alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
-
-<p>Running the example command above, Keytool prompts you to provide
-passwords for the keystore and key, and to provide the Distinguished
-Name fields for your key. It then generates the keystore as a file called
-<code>my-release-key.keystore</code>. The keystore and key are
-protected by the passwords you entered. The keystore contains
-a single key, valid for 10000 days. The alias is a name that you &mdash;
-will use later, to refer to this keystore when signing your application. </p>
-
-<p>For more information about Keytool, see the documentation at
-<a
-href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
-
-
-
-<h3 id="releasecompile">2. Compile the application in release mode</h3>
-
-<p>In order to release your application to users, you must compile it in release mode.
-In release mode, the compiled application is not signed by default and you will need
-to sign it with your private key.</p>
-
-<p class="caution"><strong>Caution:</strong>
-You can not release your application unsigned, or signed with the debug key.</p>
-
-<h4>With Eclipse</h4>
-
-<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
-Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
-Package</strong>. Then specify the file location for the unsigned APK.
-(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
-the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
-
-<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
-<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
-
-<h4>With Ant</h4>
-
-<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
-with the <code>ant</code> command. For example, if you are running Ant from the
-directory containing your {@code build.xml} file, the command would look like this:</p>
-
-<pre>$ ant release</pre>
-
-<p>By default, the build script compiles the application APK without signing it. The output file
-in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
-Because the application APK is still unsigned, you must manually sign it with your private
-key and then align it using {@code zipalign}.</p>
-
-<p>However, the Ant build script can also perform the signing
-and aligning for you, if you have provided the path to your keystore and the name of
-your key alias in the project's {@code ant.properties} file. With this information provided,
-the build script will prompt you for your keystore and alias password when you perform
-<code>ant release</code>, it will sign the package and then align it. The final output
-file in {@code bin/} will instead be
-<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
-automated for you, you're able to skip the manual procedures below (steps 3 and 4).
-To learn how to specify your keystore and alias in the {@code ant.properties} file,
-see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">
-Building and Running Apps on the Command Line</a>.</p>
-
-
-
-<h3 id="signapp">3. Sign your application with your private key</h3>
-
-<p>When you have an application package that is ready to be signed, you can do sign it
-using the Jarsigner tool. Make sure that you have Jarsigner available on your
-machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
-the keystore containing your private key is  available.</p>
-
-<p>To sign your application, you run Jarsigner, referencing both the
-application's APK and the keystore containing the private key with which to
-sign the APK. The table below shows the options you could use. </p>
-
-<table>
-<tr>
-<th>Jarsigner Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
-the keystore containing your private key.</td>
-</tr>
-<tr>
-<td><code>-verbose</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
-Use the value {@code MD5withRSA}.</td>
-</tr>
-<tr>
-<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
-of an APK. Use the value {@code SHA1}.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
-keystore. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
-key. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's how you would use Jarsigner to sign an application package called
-<code>my_application.apk</code>, using the example keystore created above.
-</p>
-
-<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
-my_application.apk alias_name</pre>
-
-<p>Running the example command above, Jarsigner prompts you to provide
-passwords for the keystore and key. It then modifies the APK
-in-place, meaning the APK is now signed. Note that you can sign an
-APK multiple times with different keys.</p>
-
-<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
-changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
--digestalg}) when you sign an APK.</p>
-
-<p>To verify that your APK is signed, you can use a command like this:</p>
-
-<pre>$ jarsigner -verify my_signed.apk</pre>
-
-<p>If the APK is signed properly, Jarsigner prints "jar verified".
-If you want more details, you can try one of these commands:</p>
-
-<pre>$ jarsigner -verify -verbose my_application.apk</pre>
-
-<p>or</p>
-
-<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
-
-<p>The command above, with the <code>-certs</code> option added, will show you the
-"CN=" line that describes who created the key.</p>
-
-<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
-signed with the debug key generated by the Android SDK. If you intend to release
-your application, you must sign it with your private key instead of the debug
-key.</p>
-
-<p>For more information about Jarsigner, see the documentation at
-<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
-
-
-<h3 id="align">4. Align the final APK package</h3>
-
-<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
-This tool ensures that all uncompressed data starts with a particular byte alignment,
-relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
-a performance optimization when installed on a device. When aligned, the Android
-system is able to read files with {@code mmap()}, even if
-they contain binary data with alignment restrictions, rather than copying all
-of the data from the package. The benefit is a reduction in the amount of
-RAM consumed by the running application.</p>
-
-<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
-<code>tools/</code> directory. To align your signed APK, execute:</p>
-
-<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
-
-<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
-byte-alignment (don't use anything other than 4). The first file argument is
-your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
-(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
-
-<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
-private key <strong>before</strong> you optimize the package with {@code zipalign}.
-If you sign it after using {@code zipalign}, it will undo the alignment.</p>
-
-<p>For more information, read about the
-<a href="{@docRoot}tools/help/zipalign.html">zipalign</a> tool.
-
-
-<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
-
-<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
-export a <em>signed</em> APK (and even create a new keystore,
-if necessary). The Export Wizard performs all the interaction with
-the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
-instead of performing the manual procedures to compile, sign,
-and align, as discussed above. Once the wizard has compiled and signed your package,
-it will also perfom package alignment with {@code zipalign}.
-Because the Export Wizard uses both Keytool and Jarsigner, you should
-ensure that they are accessible on your computer, as described above
-in the <a href="#setup">Basic Setup for Signing</a>.</p>
-
-<p>To create a signed and aligned APK in Eclipse:</p>
-
-<ol>
-  <li>Select the project in the Package
-Explorer and select <strong>File > Export</strong>.</li>
-  <li>Open the Android folder, select Export Android Application,
-  and click <strong>Next</strong>.
-  <p>The Export Android Application wizard now starts, which will
-  guide you through the process of signing your application,
-  including steps for selecting the private key with which to sign the APK
-  (or creating a new keystore and private key).</p>
-  <li>Complete the Export Wizard and your application will be compiled,
-  signed, aligned, and ready for distribution.</li>
-</ol>
-
-
-
-<h2 id="secure-key">Securing Your Private Key</h2>
-
-<p>Maintaining the security of your private key is of critical importance, both
-to you and to the user. If you allow someone to use your key, or if you leave
-your keystore and passwords in an unsecured location such that a third-party
-could find and use them, your authoring identity and the trust of the user
-are compromised. </p>
-
-<p>If a third party should manage to take your key without your knowledge or
-permission, that person could sign and distribute applications that maliciously
-replace your authentic applications or corrupt them. Such a person could also
-sign and distribute applications under your identity that attack other
-applications or the system itself, or corrupt or steal user data. </p>
-
-<p>Your reputation as a developer entity depends on your securing your private
-key properly, at all times, until the key is expired. Here are some tips for
-keeping your key secure: </p>
-
-<ul>
-<li>Select strong passwords for the keystore and key.</li>
-<li>When you generate your key with Keytool, <em>do not</em> supply the
-<code>-storepass</code> and <code>-keypass</code> options at the command line.
-If you do so, your passwords will be available in your shell history,
-which any user on your computer could access.</li>
-<li>Similarly, when signing your applications with Jarsigner,
-<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
-options at the command line. </li>
-<li>Do not give or lend anyone your private key, and do not let unauthorized
-persons know your keystore and key passwords.</li>
-</ul>
-
-<p>In general, if you follow common-sense precautions when generating, using,
-and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/tools/workflow/publishing/app-signing.jd b/docs/html/tools/workflow/publishing/app-signing.jd
deleted file mode 100644
index ac45242..0000000
--- a/docs/html/tools/workflow/publishing/app-signing.jd
+++ /dev/null
@@ -1,618 +0,0 @@
-page.title=Signing Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>All Android apps <em>must</em> be signed</li>
-<li>You can sign with a self-signed key</li>
-<li>How you sign your apps is critical &mdash; read this document carefully</li>
-<li>Determine your signing strategy early in the development process</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#signing">Signing Process</a></li>
-<li><a href="#strategies">Signing Strategies</a></li>
-<li><a href="#setup">Basic Setup for Signing</a></li>
-<li><a href="#debugmode">Signing in Debug Mode</a></li>
-<li><a href="#releasemode">Signing Release Mode</a>
-    <ol>
-    <li><a href="#cert">Obtain a suitable private key</a></li>
-    <li><a href="#releasecompile">Compile the application in release mode</a></li>
-    <li><a href="#signapp">Sign your application with your private key</a></li>
-    <li><a href="#align">Align the final APK package</a></li>
-    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
-    </ol>
-</li>
-<li><a href="#secure-key">Securing Your Private Key</a></li>
-
-</ol>
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a></li>
-<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>The Android system requires that all installed applications be digitally signed with a
-certificate whose private key is held by the application's developer. The Android system uses the
-certificate as a means of identifying the author of an application and establishing trust
-relationships between applications. The certificate is not used to control which applications the
-user can install. The certificate does not need to be signed by a certificate authority: it is
-perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
-
-<p>The important points to understand about signing Android applications are:</p>
-
-<ul>
-  <li>All applications <em>must</em> be signed. The system will not install an application
-on an emulator or a device if it is not signed.</li>
-  <li>To test and debug your application, the build tools sign your application with a special debug
-    key that is created by the Android SDK build tools.</li>
-  <li>When you are ready to release your application for end-users, you must sign it with a suitable
-    private key. You cannot publish an application that is signed with the debug key generated
-    by the SDK tools.</li>
-  <li>You can use self-signed certificates to sign your applications. No certificate authority is
-    needed.</li>
-  <li>The system tests a signer certificate's expiration date only at install time. If an
-application's signer certificate expires after the application is installed, the application
-will continue to function normally.</li>
-  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
-sign your application {@code .apk} files.</li>
-  <li>After you sign your application for release, we recommend that you use the
-    <code>zipalign</code> tool to optimize the final APK package.</li>
-</ul>
-
-<p>The Android system will not install or run an application that is not signed appropriately. This
-applies wherever the Android system is run, whether on an actual device or on the emulator.
-For this reason, you must <a href="#setup">set up signing</a> for your application before you can
-run it or debug it on an emulator or device.</p>
-
-<h2 id="signing">Signing Process</h3>
-
-<p>The Android build process signs your application differently depending on which build mode you
-use to build your application. There are two build modes: <em>debug mode</em> and <em>release
-mode</em>. You use debug mode when you are developing and testing your application. You use
-release mode when you want to build a release version of your application that you can
-distribute directly to users or publish on an application marketplace such as Google Play.</p>
-
-<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
-(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
-they know the debug key's alias and password. Each time you compile your application in debug mode,
-the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
-sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
-build tools, the tools don't need to prompt you for the debug key's alias and password each time
-you compile.</p>
-
-<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
-you don't have a private key, you can use the Keytool utility to create one for you. When you
-compile your application in release mode, the build tools use your private key along with the
-Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
-private key you use are your own, you will have to provide the password for the keystore and key
-alias.</p>
-
-<p>The debug signing process happens automatically when you run or debug your application using
-Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
-script with the <code>debug</code> option. You can automate the release signing process by using the
-Eclipse Export Wizard or by modifying the Ant build script and building with the
-<code>release</code> option.</p>
-
-<h2 id="strategies">Signing Strategies</h2>
-
-<p>Some aspects of application signing may affect how you approach the development
-of your application, especially if you are planning to release multiple
-applications. </p>
-
-<p>In general, the recommended strategy for all developers is to sign
-all of your applications with the same certificate, throughout the expected
-lifespan of your applications. There are several reasons why you should do so: </p>
-
-<ul>
-<li>Application upgrade &ndash; As you release updates to your application, you
-will want to continue to sign the updates with the same certificate or set of
-certificates, if you want users to upgrade seamlessly to the new version. When
-the system is installing an update to an application, it compares the
-certificate(s) in the new version with those in the existing version. If the
-certificates match exactly, including both the certificate data and order, then
-the system allows the update. If you sign the new version without using matching
-certificates, you will also need to assign a different package name to the
-application &mdash; in this case, the user installs the new version as a
-completely new application. </li>
-
-<li>Application modularity &ndash; The Android system allows applications that
-are signed by the same certificate to run in the same process, if the
-applications so requests, so that the system treats them as a single application.
-In this way you can deploy your application in modules, and users can update
-each of the modules independently if needed.</li>
-
-<li>Code/data sharing through permissions &ndash; The Android system provides
-signature-based permissions enforcement, so that an application can expose
-functionality to another application that is signed with a specified
-certificate. By signing multiple applications with the same certificate and
-using signature-based permissions checks, your applications can share code and
-data in a secure manner. </li>
-
-</ul>
-
-<p>Another important consideration in determining your signing strategy is
-how to set the validity period of the key that you will use to sign your
-applications.</p>
-
-<ul>
-<li>If you plan to support upgrades for a single application, you should ensure
-that your key has a validity period that exceeds the expected lifespan of
-that application. A validity period of 25 years or more is recommended.
-When your key's validity period expires, users will no longer be
-able to seamlessly upgrade to new versions of your application.</li>
-
-<li>If you will sign multiple distinct applications with the same key,
-you should ensure that your key's validity period exceeds the expected
-lifespan of <em>all versions of all of the applications</em>, including
-dependent applications that may be added to the suite in the future. </li>
-
-<li>If you plan to publish your application(s) on Google Play, the
-key you use to sign the application(s) must have a validity period
-ending after 22 October 2033. Google Play enforces this requirement
-to ensure that users can seamlessly upgrade applications when
-new versions are available. </li>
-</ul>
-
-<p>As you design your application, keep these points in mind and make sure to
-use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
-
-<h2 id="setup">Basic Setup for Signing</h2>
-
-<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
-the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
-the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
-variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
-Jarsigner to your <code>PATH</code> variable.</p>
-
-<p>If you are developing on a version of Linux that originally came with GNU Compiler for
-Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
-version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
-<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
-to the Keytool in the JDK.</p>
-
-<h2 id="debugmode">Signing in Debug Mode</h2>
-
-<p>The Android build tools provide a debug signing mode that makes it easier for you
-to develop and debug your application, while still meeting the Android system
-requirement for signing your APK.
-When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
-a debug keystore and key. This debug key is then used to automatically sign the APK, so
-you do not need to sign the package with your own key.</p>
-
-<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
-<ul>
-<li>Keystore name: "debug.keystore"</li>
-<li>Keystore password: "android"</li>
-<li>Key alias: "androiddebugkey"</li>
-<li>Key password: "android"</li>
-<li>CN: "CN=Android Debug,O=Android,C=US"</li>
-</ul>
-
-<p>If necessary, you can change the location/name of the debug keystore/key or
-supply a custom debug keystore/key to use. However, any custom debug
-keystore/key must use the same keystore/key names and passwords as the default
-debug key (as described above). (To do so in Eclipse/ADT, go to
-<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
-<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
-
-<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
-to the public when signed with the debug certificate.</p>
-
-<h3>Eclipse Users</h3>
-
-<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
-<a href="#setup">Basic Setup for Signing</a>),
-signing in debug mode is enabled by default. When you run or debug your
-application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
-the package, then installs it on
-the selected emulator or connected device. No specific action on your part is needed,
-provided ADT has access to Keytool.</p>
-
-<h3>Ant Users</h3>
-
-<p>If you are using Ant to build your {@code .apk} file, debug signing mode
-is enabled by using the <code>debug</code> option with the <code>ant</code> command
-(assuming that you are using a <code>build.xml</code> file generated by the
-<code>android</code> tool). When you run <code>ant debug</code> to
-compile your app, the build script generates a keystore/key and signs the APK for you.
-The script then also aligns the APK with the <code>zipalign</code> tool.
-No other action on your part is needed. Read
-<a href="{@docRoot}tools/building/building-cmdline.html#DebugMode">Building and Running Apps
-on the Command Line</a> for more information.</p>
-
-
-<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
-
-<p>The self-signed certificate used to sign your application in debug mode (the default on
-Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
-
-<p>When the certificate expires, you will get a build error. On Ant builds, the error
-looks like this:</p>
-
-<pre>debug:
-[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
-[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
-
-<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
-
-<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
-The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
-in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
-<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
-
-
-<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
-
-<p>Note that, if your development machine is using a non-Gregorian locale, the build
-tools may erroneously generate an already-expired debug certificate, so that you get an
-error when trying to compile your application. For workaround information, see the
-troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
-I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
-certificate</a>. </p>
-
-
-<h2 id="releasemode">Signing in Release Mode</h2>
-
-<p>When your application is ready for release to other users, you must:</p>
-<ol>
-  <li><a href="#cert">Obtain a suitable private key</a></li>
-  <li><a href="#releasecompile">Compile the application in release mode</a></li>
-  <li><a href="#signapp">Sign your application with your private key</a></li>
-  <li><a href="#align">Align the final APK package</a></li>
-</ol>
-
-<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
-to perform the compile, sign, and align procedures. The Export Wizard even allows you to
-generate a new keystore and private key in the process. So if you use Eclipse, you can
-skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
-
-
-
-<h3 id="cert">1. Obtain a suitable private key</h3>
-
-<p>In preparation for signing your application, you must first ensure that
-you have a suitable private key with which to sign. A suitable private
-key is one that:</p>
-
-<ul>
-<li>Is in your possession</li>
-<li>Represents the personal, corporate, or organizational entity to be identified
-with the application</li>
-<li>Has a validity period that exceeds the expected lifespan of the application
-or application suite. A validity period of more than 25 years is recommended.
-<p>If you plan to publish your application(s) on Google Play, note that a
-validity period ending after 22 October 2033 is a requirement. You can not upload an
-application if it is signed with a key whose validity expires before that date.
-</p></li>
-<li>Is not the debug key generated by the Android SDK tools. </li>
-</ul>
-
-<p>The key may be self-signed. If you do not have a suitable key, you must
-generate one using Keytool. Make sure that you have Keytool available, as described
-in <a href="#setup">Basic Setup</a>.</p>
-
-<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
-command and pass any of the options listed below (and any others, as
-needed). </p>
-
-<p class="warning"><strong>Warning:</strong> Keep your private key secure.
-Before you run Keytool, make sure to read
-<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
-your key secure and why doing so is critically important to you and to users. In
-particular, when you are generating your key, you should select strong passwords
-for both the keystore and key.</p>
-
-<table>
-<tr>
-<th>Keytool Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-genkey</code></td><td>Generate a key pair (public and private
-keys)</td>
-</tr>
-<tr>
-<td><code>-v</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
-the first 8 characters of the alias are used.</td>
-</tr>
-<tr>
-<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
-when generating the key. Both DSA and RSA are supported.</td>
-</tr>
-<tr>
-<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
-(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
-general, we recommend using a key size of 2048 bits or higher. </td>
-</tr>
-<tr>
-<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
-who created the key. The value is used as the issuer and subject fields in the
-self-signed certificate. </p><p>Note that you do not need to specify this option
-in the command line. If not supplied, Jarsigner prompts you to enter each
-of the Distinguished Name fields (CN, OU, and so on).</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
-key.</p> <p>As a security precaution, do not include this option in your command
-line. If not supplied, Keytool prompts you to enter the password. In this way,
-your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
-key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
-for the keystore containing the private key.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
-keystore.</p><p>As a security precaution, do not include this option in your
-command line. If not supplied, Keytool prompts you to enter the password. In
-this way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's an example of a Keytool command that generates a private key:</p>
-
-<pre>$ keytool -genkey -v -keystore my-release-key.keystore
--alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
-
-<p>Running the example command above, Keytool prompts you to provide
-passwords for the keystore and key, and to provide the Distinguished
-Name fields for your key. It then generates the keystore as a file called
-<code>my-release-key.keystore</code>. The keystore and key are
-protected by the passwords you entered. The keystore contains
-a single key, valid for 10000 days. The alias is a name that you &mdash;
-will use later, to refer to this keystore when signing your application. </p>
-
-<p>For more information about Keytool, see the documentation at
-<a
-href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
-
-
-
-<h3 id="releasecompile">2. Compile the application in release mode</h3>
-
-<p>In order to release your application to users, you must compile it in release mode.
-In release mode, the compiled application is not signed by default and you will need
-to sign it with your private key.</p>
-
-<p class="caution"><strong>Caution:</strong>
-You can not release your application unsigned, or signed with the debug key.</p>
-
-<h4>With Eclipse</h4>
-
-<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
-Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
-Package</strong>. Then specify the file location for the unsigned APK.
-(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
-the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
-
-<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
-<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
-
-<h4>With Ant</h4>
-
-<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
-with the <code>ant</code> command. For example, if you are running Ant from the
-directory containing your {@code build.xml} file, the command would look like this:</p>
-
-<pre>$ ant release</pre>
-
-<p>By default, the build script compiles the application APK without signing it. The output file
-in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
-Because the application APK is still unsigned, you must manually sign it with your private
-key and then align it using {@code zipalign}.</p>
-
-<p>However, the Ant build script can also perform the signing
-and aligning for you, if you have provided the path to your keystore and the name of
-your key alias in the project's {@code ant.properties} file. With this information provided,
-the build script will prompt you for your keystore and alias password when you perform
-<code>ant release</code>, it will sign the package and then align it. The final output
-file in {@code bin/} will instead be
-<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
-automated for you, you're able to skip the manual procedures below (steps 3 and 4).
-To learn how to specify your keystore and alias in the {@code ant.properties} file,
-see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">
-Building and Running Apps on the Command Line</a>.</p>
-
-
-
-<h3 id="signapp">3. Sign your application with your private key</h3>
-
-<p>When you have an application package that is ready to be signed, you can do sign it
-using the Jarsigner tool. Make sure that you have Jarsigner available on your
-machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
-the keystore containing your private key is  available.</p>
-
-<p>To sign your application, you run Jarsigner, referencing both the
-application's APK and the keystore containing the private key with which to
-sign the APK. The table below shows the options you could use. </p>
-
-<table>
-<tr>
-<th>Jarsigner Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
-the keystore containing your private key.</td>
-</tr>
-<tr>
-<td><code>-verbose</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
-Use the value {@code MD5withRSA}.</td>
-</tr>
-<tr>
-<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
-of an APK. Use the value {@code SHA1}.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
-keystore. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
-key. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's how you would use Jarsigner to sign an application package called
-<code>my_application.apk</code>, using the example keystore created above.
-</p>
-
-<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
-my_application.apk alias_name</pre>
-
-<p>Running the example command above, Jarsigner prompts you to provide
-passwords for the keystore and key. It then modifies the APK
-in-place, meaning the APK is now signed. Note that you can sign an
-APK multiple times with different keys.</p>
-
-<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
-changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
--digestalg}) when you sign an APK.</p>
-
-<p>To verify that your APK is signed, you can use a command like this:</p>
-
-<pre>$ jarsigner -verify my_signed.apk</pre>
-
-<p>If the APK is signed properly, Jarsigner prints "jar verified".
-If you want more details, you can try one of these commands:</p>
-
-<pre>$ jarsigner -verify -verbose my_application.apk</pre>
-
-<p>or</p>
-
-<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
-
-<p>The command above, with the <code>-certs</code> option added, will show you the
-"CN=" line that describes who created the key.</p>
-
-<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
-signed with the debug key generated by the Android SDK. If you intend to release
-your application, you must sign it with your private key instead of the debug
-key.</p>
-
-<p>For more information about Jarsigner, see the documentation at
-<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
-
-
-<h3 id="align">4. Align the final APK package</h3>
-
-<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
-This tool ensures that all uncompressed data starts with a particular byte alignment,
-relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
-a performance optimization when installed on a device. When aligned, the Android
-system is able to read files with {@code mmap()}, even if
-they contain binary data with alignment restrictions, rather than copying all
-of the data from the package. The benefit is a reduction in the amount of
-RAM consumed by the running application.</p>
-
-<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
-<code>tools/</code> directory. To align your signed APK, execute:</p>
-
-<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
-
-<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
-byte-alignment (don't use anything other than 4). The first file argument is
-your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
-(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
-
-<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
-private key <strong>before</strong> you optimize the package with {@code zipalign}.
-If you sign it after using {@code zipalign}, it will undo the alignment.</p>
-
-<p>For more information, read about the
-<a href="{@docRoot}tools/help/zipalign.html">zipalign</a> tool.
-
-
-<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
-
-<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
-export a <em>signed</em> APK (and even create a new keystore,
-if necessary). The Export Wizard performs all the interaction with
-the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
-instead of performing the manual procedures to compile, sign,
-and align, as discussed above. Once the wizard has compiled and signed your package,
-it will also perfom package alignment with {@code zipalign}.
-Because the Export Wizard uses both Keytool and Jarsigner, you should
-ensure that they are accessible on your computer, as described above
-in the <a href="#setup">Basic Setup for Signing</a>.</p>
-
-<p>To create a signed and aligned APK in Eclipse:</p>
-
-<ol>
-  <li>Select the project in the Package
-Explorer and select <strong>File > Export</strong>.</li>
-  <li>Open the Android folder, select Export Android Application,
-  and click <strong>Next</strong>.
-  <p>The Export Android Application wizard now starts, which will
-  guide you through the process of signing your application,
-  including steps for selecting the private key with which to sign the APK
-  (or creating a new keystore and private key).</p>
-  <li>Complete the Export Wizard and your application will be compiled,
-  signed, aligned, and ready for distribution.</li>
-</ol>
-
-
-
-<h2 id="secure-key">Securing Your Private Key</h2>
-
-<p>Maintaining the security of your private key is of critical importance, both
-to you and to the user. If you allow someone to use your key, or if you leave
-your keystore and passwords in an unsecured location such that a third-party
-could find and use them, your authoring identity and the trust of the user
-are compromised. </p>
-
-<p>If a third party should manage to take your key without your knowledge or
-permission, that person could sign and distribute applications that maliciously
-replace your authentic applications or corrupt them. Such a person could also
-sign and distribute applications under your identity that attack other
-applications or the system itself, or corrupt or steal user data. </p>
-
-<p>Your reputation as a developer entity depends on your securing your private
-key properly, at all times, until the key is expired. Here are some tips for
-keeping your key secure: </p>
-
-<ul>
-<li>Select strong passwords for the keystore and key.</li>
-<li>When you generate your key with Keytool, <em>do not</em> supply the
-<code>-storepass</code> and <code>-keypass</code> options at the command line.
-If you do so, your passwords will be available in your shell history,
-which any user on your computer could access.</li>
-<li>Similarly, when signing your applications with Jarsigner,
-<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
-options at the command line. </li>
-<li>Do not give or lend anyone your private key, and do not let unauthorized
-persons know your keystore and key passwords.</li>
-</ul>
-
-<p>In general, if you follow common-sense precautions when generating, using,
-and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/tools/workflow/publishing/preparing.jd b/docs/html/tools/workflow/publishing/preparing.jd
deleted file mode 100644
index 9925037..0000000
--- a/docs/html/tools/workflow/publishing/preparing.jd
+++ /dev/null
@@ -1,358 +0,0 @@
-page.title=Preparing for Release
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>Quickview</h2>
-    <ul>
-      <li>Learn which resources you'll need to release your app.</li>
-      <li>Find out how to configure and build your app for release.</li>
-      <li>Learn best practices for releasing your app.</li>
-    </ul>
-    <h2>In this document</h2>
-    <ol>
-      <li><a href="#publishing-intro">Introduction</a></li>
-      <li><a href="#publishing-gather">Gathering Materials and Resources</a></li>
-      <li><a href="#publishing-configure">Configuring Your Application</a></li>
-      <li><a href="#publishing-build">Building Your Application</a></li>
-      <li><a href="#publishing-resources">Preparing External Servers and Resources</a></li>
-      <li><a href="#publishing-test">Testing Your Application for Release</a></li>
-    </ol>
-    <h2>See also</h2>
-    <ol>
-      <li><a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a></li>
-      <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
-      <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
-    </ol>
-  </div>
-</div>
-
-<p>Before you distribute your Android application to users you need to prepare it for release. The
-preparation process is a required <a href="{@docRoot}tools/workflow/index.html">development
-task</a> for all Android applications and is the first step in the publishing process (see figure
-1).</p>
-
-<p>When you prepare your application for release, you configure, build, and test a release
-version of your application. The configuration tasks are straightforward, involving basic code
-cleanup and code modification tasks that help optimize your application. The build process is
-similar to the debug build process and can be done using JDK and Android SDK tools. The testing
-tasks serve as a final check, ensuring that your application performs as expected under real-world
-conditions. When you are finished preparing your application for release you have a signed
-<code>.apk</code> file, which you can distribute directly to users or distribute through an
-application marketplace such as Google Play.</p>
-
-<p>This document summarizes the main tasks you need to perform to prepare your application for
-release. The tasks that are described in this document apply to all Android applications regardless
-how they are released or distributed to users. If you are releasing your application through Google
-Play, you should also read <a href="{@docRoot}tools/publishing/publishing.html">Publishing on
-Google Play</a> to be sure your release-ready application satisfies all Google Play
-requirements.</p>
-
-<p class="note"><strong>Note:</strong> As a best practice, your application should meet all of your
-release criteria for functionality, performance, and stability before you perform the tasks outlined
-in this document.</p>
-
-<img src="{@docRoot}images/publishing/publishing_overview_prep.png"
-     alt="Shows how the preparation process fits into the development process"
-     height="190"
-     id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Preparing for release is a required <a
-href="{@docRoot}tools/workflow/index.html">development
-task</a> and is the first step in the publishing process.
-</p>
-
-<h2 id="publishing-intro">Introduction</h2>
-
-<p>To release your application to users you need to create a release-ready package that users can
-install and run on their Android-powered devices. The release-ready package contains the same
-components as the debug <code>.apk</code> file &mdash; compiled source code, resources, manifest
-file, and so on &mdash; and it is built using the same build tools. However, unlike the debug
-<code>.apk</code> file, the release-ready <code>.apk</code> file is signed with your own certificate
-and it is optimized with the zipalign tool.</p>
-
-<div class="figure" style="width:331px">
-  <img src="{@docRoot}images/publishing/publishing_preparing.png"
-       alt="Shows the five tasks you perform to prepare your app for release"
-       height="450" />
-  <p class="img-caption">
-    <strong>Figure 2.</strong> You perform five main tasks to prepare your application for
-    release.
-  </p>
-</div>
-
-<p>The signing and optimization tasks are usually seamless if you are building your application with
-Eclipse and the ADT plugin or with the Ant build script (included with the Android SDK). For
-example, you can use the Eclipse Export Wizard to compile, sign, and optimize your application all
-at once. You can also configure the Ant build script to do the same when you build from the command
-line.</p>
-
-<p>To prepare your application for release you typically perform five main tasks (see figure 2).
-Each main task may include one or more smaller tasks depending on how you are releasing your
-application. For example, if you are releasing your application through Google Play you may want
-to add special filtering rules to your manifest while you are configuring your application for
-release. Similarly, to meet Google Play publishing guidelines you may have to prepare screenshots
-and create promotional text while you are gathering materials for release.</p>
-
-<p>You usually perform the tasks listed in figure 2 after you have throroughly debugged and tested
-your application. The Android SDK contains several tools to help you test and debug your Android
-applications. For more information, see the <a
-href="{@docRoot}tools/debugging/index.html">Debugging</a> and <a
-href="{@docRoot}tools/testing/index.html">Testing</a> sections in the Dev Guide.</p>
-
-<h2 id="publishing-gather">Gathering Materials and Resources</h2>
-
-<p>To begin preparing your application for release you need to gather several supporting items. At a
-minimum this includes cryptographic keys for signing your application and an application icon. You
-might also want to include an end-user license agreement.</p>
-
-<h4 id="publishing-keys">Cryptographic keys</h4>
-
-<p>The Android system requires that each installed application be digitally signed with a
-certificate that is owned by the application's developer (that is, a certificate for which the
-developer holds the private key). The Android system uses the certificate as a means of identifying
-the author of an application and establishing trust relationships between applications. The
-certificate that you use for signing does not need to be signed by a certificate authority; the
-Android system allows you to sign your applications with a self-signed certificate. To learn about
-certificate requirements, see <a href="{@docRoot}tools/publishing/app-signing.html#cert">Obtain a
-suitable private key</a>.</p>
-
-<p class="caution"><strong>Important:</strong> Your application must be signed with a cryptographic
-key whose validity period ends after 22 October 2033.</p>
-
-<p>You may also have to obtain other release keys if your application accesses a service or uses a
-third-party library that requires you to use a key that is based on your private key. For example,
-if your application uses the <a
-href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html">MapView</a>
-class, which is part of the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
-library</a>, you will need to register your application with the Google Maps service and obtain
-a Maps API key. For information about getting a Maps API key, see <a
-href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API
-key</a>.</p>
-
-<h4>Application Icon</h4>
-
-<p>Be sure you have an application icon and that it meets the recommended <a
-href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">icon guidelines</a>. Your
-application's icon helps users identify your application on a device's Home
-screen and in the Launcher window. It also appears in Manage Applications, My Downloads, and
-elsewhere. In addition, publishing services such as Google Play display your icon to users.</p>
-
-<p class="note"><strong>Note:</strong> If you are releasing your application on Google Play, you
-need to create a high resolution
-  version of your icon. See <a
-href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">Graphic
-Assets for your Application</a> for more information.</p>
-
-<h4>End-user License Agreement</h4>
-
-<p>Consider preparing an End User License Agreement (EULA) for your application. A EULA can help
-protect your person, organization, and intellectual property, and we recommend that you provide one
-with your application.</p>
-
-<h4>Miscellaneous Materials</h4>
-
-<p>You might also have to prepare promotional and marketing materials to publicize your application.
-For example, if you are releasing your application on Google Play you will need to prepare some
-promotional text and you will need to create screenshots of your application. For more
-information, see
-<a href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">
-Graphic Assets for your Application</a></p>
-
-<h2 id="publishing-configure">Configuring Your Application for Release</h2>
-
-<p>After you gather all of your supporting materials you can start configuring your application
-for release. This section provides a summary of the configuration changes we recommend that you make
-to your source code, resource files, and application manifest prior to releasing your application.
-Although most of the configuration changes listed in this section are optional, they are
-considered good coding practices and we encourage you to implement them. In some cases,
-you may have already made these configuration changes as part of your development process.</p>
-
-<h4>Choose a good package name</h4>
-
-<p>Make sure you choose a package name that is suitable over the life of your application. You
-cannot change the package name after you distribute your application to users. You can set the
-package name in application's manifest file. For more information, see the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a> attribute
-documentation.</p>
-
-<h4>Turn off logging and debugging</h4>
-
-<p>Make sure you deactivate logging and disable the debugging option before you build your
-application for release. You can deactivate logging by removing calls to
-{@link android.util.Log} methods in your source files. You can disable debugging by removing the
-<code>android:debuggable</code> attribute from the <code>&lt;application&gt;</code> tag in your
-manifest file, or by setting the <code>android:debuggable</code> attribute to
-<code>false</code> in your manifest file. Also, remove any log files or static test files that
-were created in your project.</p>
-
-<p>Also, you should remove all {@link android.os.Debug} tracing calls that you
-added to your code, such as {@link android.os.Debug#startMethodTracing()} and
-{@link android.os.Debug#stopMethodTracing()} method calls.</p>
-
-<h4>Clean up your project directories</h4>
-
-<p>Clean up your project and make sure it conforms to the directory structure described in <a
-href="{@docRoot}tools/projects/index.html#ApplicationProjects">Android Projects</a>.
-Leaving stray or orphaned files in your project can prevent your application from compiling and
-cause your application to behave unpredictably. At a minimum you should do the following cleanup
-tasks:</p>
-
-<ul>
-  <li>Review the contents of your <code>jni/</code>, <code>lib/</code>, and <code>src/</code>
-  directories.  The <code>jni/</code> directory should contain only source files associated with the
-  <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>, such as
-  <code>.c</code>, <code>.cpp</code>, <code>.h</code>, and <code>.mk</code> files. The
-  <code>lib/</code> directory should contain only third-party library files or private library
-  files, including prebuilt shared and static libraries (for example, <code>.so</code> files). The
-  <code>src/</code> directory should contain only the source files for your application
-  (<code>.java</code> and <code>.aidl</code> files). The <code>src/</code> directory should not
-  contain any <code>.jar</code> files.</li>
-  <li>Check your project for private or proprietary data files that your application does not use
-  and remove them. For example, look in your project's <code>res/</code> directory for old
-  drawable files, layout files, and values files that you are no longer using and delete them.</li>
-  <li>Check your <code>lib/</code> directory for test libraries and remove them if they are no
-  longer being used by your application.</li>
-  <li>Review the contents of your <code>assets/</code> directory and your <code>res/raw/</code>
-    directory for raw asset files and static files that you need to update or remove prior to
-    release.</li>
-</ul>
-
-<h4>Review and update your manifest settings</h4>
-
-<p>Verify that the following manifest items are set correctly:</p>
-
-<ul>
-  <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
-  &lt;uses-permission&gt;</a> element
-    <p>You should specify only those permissions that are relevant and required for your application.</p>
-  </li>
-  <li><code>android:icon</code> and <code>android:label</code> attributes
-    <p>You must specify values for these attributes, which are located in the
-    <a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a>
-    element.</p>
-  </li>
-  <li><code>android:versionCode</code> and <code>android:versionName</code> attributes.
-    <p>We recommend that you specify values for these attributes, which are located in the
-      <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
-      element. For more information see
-      <a href="{@docRoot}tools/publishing/versioning.html">Versioning your Application</a>.</p>
-  </li>
-</ul>
-
-<p>There are several additional manifest elements that you can set if you are releasing your
-application on Google Play. For example, the <code>android:minSdkVersion</code> and
-<code>android:targetSdkVersion</code> attributes, which are located in the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"> &lt;uses-sdk&gt;</a> element. For more
-information about these and other Google Play settings, see <a
-href="{@docRoot}/guide//appendix/market-filters.html">Filters on Google Play</a>.</p>
-
-<h4>Address compatibility issues</h4>
-
-<p>Android provides several tools and techniques to make your application compatible with a wide
-range of devices. To make your application available to the largest number of users, consider
-doing the following:</p>
-
-<ul>
-  <li><strong>Add support for multiple screen configurations</strong>
-    <p>Make sure you meet the
-    <a href="{@docRoot}guide/practices/screens_support.html#screen-independence">
-    best practices for supporting multiple screens</a>. By supporting multiple screen configurations
-    you can create an application that functions properly and looks good on any of the screen sizes
-    supported by Android.</p>
-  </li>
-  <li><strong>Optimize your application for Android 3.0 devices.</strong>
-    <p>If your application is designed for devices older than Android 3.0, make it compatible
-    with Android 3.0 devices by following the guidelines and best practices described in
-    <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0
-    </a>.</p>
-  </li>
-  <li><strong>Consider using the Support Library</strong>
-    <p>If your application is designed for devices running Android 3.x, make your application
-    compatible with older versions of Android by adding the
-    <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> to your
-    application project. The Support Library provides static support libraries that you can add to
-    your Android application, which enables you to use APIs that are either not available on
-    older platform versions or use utility APIs that are not part of the framework APIs.</p>
-  </li>
-</ul>
-
-<h4>Update URLs for servers and services</h4>
-
-<p>If your application accesses remote servers or services, make sure you are using the production
-URL or path for the server or service and not a test URL or path.</p>
-
-<h4>Implement Licensing (if you are releasing on Google Play)</h4>
-
-<p>If you are releasing a paid application through Google Play, consider adding support for
-Google Play Licensing. Licensing lets you control access to your application based on whether the
-current user has purchased it. Using Google Play Licensing is optional even if you are
-releasing your app through Google Play.</p>
-
-<p>For more information about Google Play Licensing Service and how to use it in your
-application, see <a href="{@docRoot}google/play/licensing/index.html">Application Licensing</a>.</p>
-
-<h2 id="publishing-build">Building Your Application for Release</h2>
-
-<p>After you finish configuring your application you can build it into a release-ready
-<code>.apk</code> fle that is signed and optimized. The JDK includes the tools for signing the
-<code>.apk</code> file (Keytool and Jarsigner); the Android SDK includes the tools for compiling and
-optimizing the <code>.apk</code> file. If you are using Eclipse with the ADT plugin or you are using
-the Ant build script from the command line, you can automate the entire build process.</p>
-
-<h3>Building with Eclipse</h3>
-
-<p>You can use the Eclipse Export Wizard to build a release-ready <code>.apk</code> file that is
-signed with your private key and optimized. To learn how to run the Export Wizard, see
-<a href="{@docRoot}tools/publishing/app-signing.html#ExportWizard">Compile and sign with Eclipse
-ADT</a>. The Export Wizard compiles your application for release, signs your application with your
-private key, and optimizes your application with the zipalign tool. The Export Wizard should run
-successfully if you have run or debugged your application from Eclipse and you have no errors in
-your application (see <a href="{@docRoot}tools/building/building-eclipse.html">Building
-and Running from Eclipse with ADT</a> for more information.</p>
-
-<p>The Export Wizard assumes that you have a <a href="#billing-keys">certificate and private key</a>
-suitable for signing your application. If you do not have a suitable certificate and private key,
-the Export Wizard will help you generate one (see
-<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
-information about the signing process and signing guidelines.</p>
-
-<h3>Building with Ant</h3>
-
-<p>You can use the Ant build script (included in the Android SDK) to build a release-ready
-<code>.apk</code> file that is signed with your private key and optimized. To learn how to do this,
-see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">Building in
-Release Mode</a>. This build method assumes you have a <a href="#billing-keys">certificate and
-private key</a> suitable for signing your application. If you do not have a suitable certificate and
-private key, the Export Wizard will help you generate one (see
-<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
-information about the signing process and signing guidelines.</p>
-
-<h2 id="publishing-resources">Preparing External Servers and Resources</h2>
-
-<p>If your application relies on a remote server, make sure the server is secure and that it is
-configured for production use. This is particularly important if you are implementing <a
-href="{@docRoot}google/play/billing/index.html">in-app billing</a> in your application and you are
-performing the signature verification step on a remote server.</p>
-
-<p>Also, if your application fetches content from a remote server or a real-time service (such as a
-content feed), be sure the content you are providing is up to date and production-ready.</p>
-
-<h2 id="publishing-test">Testing Your Application for Release</h2>
-
-<p>Testing the release version of your application helps ensure that your application runs properly
-under realistic device and network conditions. Ideally, you should test your application on at least
-one handset-sized device and one tablet-sized device to verify that your user interface elements are
-sized correctly and that your application's performance and battery efficiency are acceptable.</p>
-
-<p>As a starting point for testing, see
-<a href="{@docRoot}tools/testing/what_to_test.html">What to Test</a>. This article provides
-a summary of common Android situations that you should consider when you are testing. When you are
-done testing and you are satisfied that the release version of your application
-behaves correctly, you can release your application to users. For more information, see
-<a href="{@docRoot}tools/publishing/publishing_overview.html#publishing-release">Releasing Your
-Application to Users</a>. If you are publishing your application on Google Play, see
-<a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a>.</p>
-
-
diff --git a/docs/html/tools/workflow/publishing/publishing.jd b/docs/html/tools/workflow/publishing/publishing.jd
deleted file mode 100644
index ab6321c..0000000
--- a/docs/html/tools/workflow/publishing/publishing.jd
+++ /dev/null
@@ -1,703 +0,0 @@
-page.title=Publishing on Google Play
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Learn how to publish and update apps on Google Play.</li>
-<li>Find out how to create links to apps that are published on Google Play.</li>
-<li>Learn about Google Play features.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#overview">About Google Play</a>
-<li><A href="#marketpublish">Publishing Apps on Google Play</a></li>
-<li><a href="#marketupgrade">Publishing Updates on Google Play</a></li>
-<li><a href="#marketLicensing">Using Google Play Licensing Service</a></li>
-<li><a href="#marketinappbilling">Using Google Play In-app Billing</a></li>
-<li><a href="#marketintent">Linking to Your Apps on Google Play</a>
-  <ol>
-    <li><a href="#OpeningDetails">Opening an app's details page</a></li>
-    <li><a href="#PerformingSearch">Performing a search</a></li>
-    <li><a href="#BuildaButton">Build a Google Play button</a></li>
-    <li><a href="#UriSummary">Summary of URI formats</a></li>
-  </ol>
-</li>
-</ol>
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a></li>
-<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></li>
-</ol>
-
-<div id="qv-extra">
-  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
-  <div id="qv-sub-rule">
-    <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
-    <h2 style="color:#669999;">Already know about Google Play and want to get started?</h2>
-    <p>Go to <a href="http://play.google.com/apps/publish">Google Play</a>, create a developer
-account, and upload your application. For more information about required assets, listing details,
-and publishing options, see <a
-href="http://market.android.com/support/bin/answer.py?answer=113469">Upload
-Applications</a>.</p>
-  </div>
-</div>
-
-</div>
-</div>
-
-<p>One of the most effective ways to get your application into users' hands is to
-publish it on an application marketplace like Google Play. Publishing on Google Play is a
-straightforward process that you can do in just a few simple steps&mdash;register, configure,
-upload, and publish. Registration takes only a few minutes and needs to be done only once.
-The configuration and publishing steps can all be done through the Google Play Developer Console
-after you register as a Google Play developer.</p>
-
-<p>To start publishing on Google Play, first read this topic and then go to the <a
-href="https://play.google.com/apps/publish">Google Play Developer Console</a> and register as
-a Google Play developer.</p>
-
-
-<h2 id="overview">About Google Play</h2>
-
-<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
-your Android applications to users around the world. When you release your applications through
-Google Play you have access to a suite of developer tools that let you analyze your sales,
-identify market trends, and control who your applications are being distributed to. You also have
-access to several revenue-enhancing features, such as <a
-href="{@docRoot}google/play/billing/index.html">in-app billing</a> and
-<a href="{@docRoot}google/play/licensing/index.html">application licensing</a>.</p>
-
-<p>Before you can publish applications on Google Play, you need to <a
-href="http://play.google.com/apps/publish">register</a> as a Google Play developer. During the
-registration process you will need to create a developer profile, pay a registration fee, and agree
-to the <a href="http://www.android.com/us/developer-distribution-agreement.html">Google Play
-Developer Distribution Agreement</a>. After you register you can access the Developer
-Console, where you can upload applications, configure publishing options, and monitor publishing
-data. If you want to sell your applications or use the in-app billing feature, you will also need
-to set up a Google Wallet merchant account. For more information about the registration process,
-see <a href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113468">
-Developer Registration</a>.</p>
-
-<h2 id="marketpublish">Publishing Apps on Google Play</h2>
-
-<p>Publishing your application on Google Play is a simple process that involves three basic
-tasks (see figure 1):</p>
-
-<ul>
-  <li>Creating various graphical assets that
-accompany your app on Google Play.</li>
-  <li>Using the Google Play <a
-href="http://play.google.com/apps/publish">Developer Console</a> to configure publishing options,
-specify listing details, and upload your app and graphical assets to Google Play.</li>
-  <li>Reviewing your publishing settings and changing the release
-status of your app from Unpublished to Published.</li>
-</ul>
-
-<img src="{@docRoot}images/publishing/publishing_android_market.png"
-     alt="Shows the three steps that are required to publish on Google Play"
-     height="168"
-     id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> To publish apps on Google Play you must first <a
-href="{@docRoot}tools/publishing/preparing.html">prepare your app for release</a> and then perform
-three simple tasks.
-</p>
-
-<p class="caution"><strong>Important:</strong> You must <a
-href="{@docRoot}tools/publishing/preparing.html">prepare your application for release</a> before you
-can publish it on Google Play. When you prepare your application for release you configure it for
-release and build it in release mode. Building in release mode signs your application's {@code .apk}
-file with your private release key. You cannot publish an application on Google Play unless it is
-signed with your own private release key.</p>
-
-<h3>Preparing promotional materials</h3>
-
-<p>To fully leverage the marketing and publicity capabilities of Google Play, you need to create
-several graphical assets that accompany your app on Google Play, such as screenshots, videos,
-promotional graphics, and promotional text. At a minimum you must provide two screenshots of your
-application and a high resolution application icon. The screenshots are displayed on the details
-page for your application on Google Play, and the high resolution application icon is displayed
-in various locations throughout Google Play. The high resolution icon does not replace the
-launcher icon for your application, rather, it serves as a supplemental icon and should look
-the same as your launcher icon. Promotional video,
-graphics, and text are optional, although we strongly recommended that you prepare these for your
-app. For more information about the graphic assets that accompany your application, see <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1078870">Graphic
-Assets for your Application</a>.</p>
-
-<h3>Configuring options and uploading assets</h3>
-
-<p>Google Play lets you target your application to a worldwide pool of users and devices. To
-reach these users you can use the Developer Console to configure various publishing
-options and listing details for your app. For example, you can choose the <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138294&topic=
-2365624&ctx=topic">countries</a> you want to reach, the listing languages you want to use, and the
-<a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138412&topic=
-15867&ctx=topic">price</a> you want to charge in each country. You can also configure listing
-details such as the application type, <a
-href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113475&topic=
-2365760&ctx=topic">category</a>, and <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=188189&topic=
-2364761&ctx=topic">content rating</a>. In addition, if you want to sell items within your app using
-the in-app billing feature, you can use the Developer Console to <a
-href="http://grendel.sea.corp.google.com:48014/google/play/billing/billing_admin.html#billing-list
-- setup">create a product list</a> and control which items are available for purchase in your
-app.</p>
-
-<p>When you are finished setting publishing options and listing details, you can upload your assets
-and your application to Google Play. You can also upload your application as a draft
-(unpublished) application, which lets you do final testing before you publish it for final
-release.</p>
-
-<p>To learn more about Google Play publishing settings, see the following resources:</p>
-
-<ul>
-  <li><a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113469&topic=
-236562&ctx=topic">Upload Applications</a>&mdash;provides a summary of the publishing settings
-you can configure for an app.</li>
-  <li><a
-href="http://support.google.com/androidmarket/developer/bin/topic.py?hl=en&topic=15867">Selling
-Your Apps</a>&mdash;provides guidance about pricing, supported currencies, tax rates, and many
-other topics related to selling apps.</li>
-  <li><a
-href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1169947&topic=
-15867&ctx=topic">Selling Apps in Multiple Currencies</a>&mdash;provides a description of how
-pricing, payouts, and exchange rates work.</li>
-</ul>
-
-<h3>Publishing your application</h3>
-
-<p>When you are satisfied that your publishing settings are correctly configured and your uploaded
-application is ready to be released to the public, you can simply click <strong>Publish</strong> in
-the Developer Console to make your app available for download
-around the world. Keep in mind, it can take several hours for your app to appear on Google
-Play after you click <strong>Publish</strong> in the Developer Console.</p>
-
-<h3>Controlling Distribution to Devices</h3>
-
-<p>If your application targets different device configurations, you can control which Android-powered
-devices have access to your application on Google Play by
-using Google Play filters. Filtering compares device configurations that you declare in your
-app's manifest file to the configuration defined by a device. For example, if you declare the camera
-filter in your manifest, only those devices that have a camera will see your app on Google
-Play. Filters must be configured in your application's manifest file when you are <a
-href="{@docRoot}tools/publishing/preparing.html">preparing your app for release</a> (that is, before
-you upload your app to Google Play). For more information, see <a
-href="{@docRoot}google/play/filters.html">Filters on Google Play</a>.</p>
-
-<p>You can also use the multiple APK feature to distribute different {@code .apk} files under the same
-application listing and the same package name; however, you should use this option only as a last
-resort. Android applications usually run on most compatible devices with a single APK, by supplying
-alternative resources for different configurations (for example, different layouts for different screen
-sizes) and the Android system selects the appropriate resources for the device at runtime. In a
-few cases, however, a single APK is unable to support all device configurations, because alternative
-resources make the APK file too big (greater than 50MB) or other technical challenges prevent a
-single APK from working on all devices. Although we encourage you to develop and publish a single
-APK that supports as many device configurations as possible, doing so is sometimes
-not possible. To help you publish your application for as many devices as possible, Google Play
-allows you to publish multiple APKs under the same application listing. Google Play then supplies
-each APK to the appropriate devices based on configuration support you've declared in the manifest
-file of each APK. To use this feature, you need to build your separate {@code .apk} files when you are <a
-href="{@docRoot}tools/publishing/preparing.html">preparing your app for release</a> (that is, before
-you upload your app to Google Play). For more information, see <a
-href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
-
-<h2 id="marketupgrade">Publishing Updates on Google Play</h2>
-
-<p>At any time after publishing an application on Google Play, you can upload
-and publish an update to the same application package. When you publish an
-update to an application, users who have already installed the
-application may receive a notification that an update is
-available for the application. They can then choose to update the application
-to the latest version.</p>
-
-<p>Before uploading the updated application, be sure that you have incremented
-the <code>android:versionCode</code> and <code>android:versionName</code>
-attributes in the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html"><code>&lt;manifest&gt;</code></a>
-element of the manifest file. Also, the package name must be the same as the existing version and
-the {@code .apk} file must be signed with the same private key. If the package name and signing
-certificate do <em>not</em> match those of the existing version, Google Play will
-consider it a new application, publish it as such, and will not offer it to existing users as an
-update.</p>
-
-<p>If you plan to publish your application on Google Play, you must make sure
-  that it meets the requirements listed below, which are enforced by Google Play
-  when you upload the application.</p>
-
-<h2 id="marketLicensing">Using Google Play Licensing Service</h2>
-
-<p>Google Play offers a licensing service that lets you enforce licensing
-policies for paid applications that you publish through Google Play. With
-Google Play Licensing, your applications can query Google Play at runtime
-to obtain the licensing status for the current user, then allow or disallow
-further use of the application as appropriate. Using the service, you can apply a flexible
-licensing policy on an application-by-application basis&mdash;each
-application can enforce its licensing status in the way most appropriate
-for it. </p>
-
-<p>Any application that you publish through Google Play can use the Google
-Play Licensing Service. The service uses no dedicated framework APIs, so you can
-add licensing to any application that uses a minimum API Level of 3 or
-higher.</p>
-
-<p>For complete information about Google Play Licensing Service and how to
-use it in your application, read <a
-href="{@docRoot}google/play/licensing/index.html">Application Licensing</a>.</p>
-
-<h2 id="marketinappbilling">Using Google Play In-app Billing</h2>
-
-<p><a href="{@docRoot}google/play/billing/billing_overview.html">Google Play In-app Billing</a>
-is a Google Play service that lets you sell digital content in your applications. You can use
-the service to sell a wide range of content, including downloadable  content such as media files or
-photos, and virtual content such as game levels or potions.</p>
-
-<p>When you use Google Play's in-app billing service to sell an item, Google Play handles all
-billing details so your application never has to directly process any financial transactions.
-Google Play uses the same checkout service that is used for application purchases, so your users
-experience a consistent and familiar purchase flow (see figure 1). Also, the transaction fee for
-in-app purchases is the same as the transaction fee for application purchases (30%).</p>
-
-<p>Any application that you publish through Google Play can implement in-app billing. No special
-account or registration is required other than a Google Play publisher account and a Google
-Wallet merchant account. Also, because the service uses no dedicated framework APIs, you can add
-in-app billing to any application that uses a minimum API level of 4 or higher.</p>
-
-<p>To help you integrate in-app billing into your application, the Android SDK provides a <a
-href="{@docRoot}google/play/billing/billing_integrate.html#billing-download">sample application</a>
-that demonstrates a simple implementation of in-app billing. The sample application contains
-examples of billing-related classes you can use to implement in-app billing in your application. It
-also contains examples of the database, user interface, and business logic you might use to
-implement in-app billing. For more information about the in-app billing feature, see the
-<a href="{@docRoot}google/play/billing/index.html">In-app Billing documentation</a>.</p>
-
-<h2 id="marketintent">Linking to Your Apps on Google Play</h2>
-
-<p>To help users discover your published applications, you can use two special Google Play URIs
-that direct users to your application's details page or perform a search for all of your published
-applications on Google Play. You can use these URIs to create a button in your application or a
-link on a web page that:</p>
-
-<ul>
-  <li>Opens your application's details page in the Google Play application or web site.</li>
-  <li>Searches for all your published applications in the Google Play application or web
-site.</li>
-</ul>
-
-<p>You can launch the Google Play application or web site in the following ways:</p>
-<ul>
-  <li>Initiate an {@link android.content.Intent} from your application that launches the
-Google Play application on the user's device.</li>
-  <li>Provide a link on a web page that opens the Google Play web site (but will also
-open the Google Play application if clicked from a device).</li>
-</ul>
-
-<p>In both cases, whether you want to initiate the action from your application or from a web
-page, the URIs are quite similar. The only difference is the URI prefix.</p>
-
-<p>To open the Google Play application from your application, the prefix for the intent's data
-URI is:</p>
-
-<p style="margin-left:2em"><code>market://</code></p>
-
-<p>To open Google Play store from your web site, the prefix for the link URI is:</p>
-
-<p style="margin-left:2em"><code>http://play.google.com/store/</code></p>
-
-<p>The following sections describe how to create a complete URI for each action.</p>
-
-<p class="note"><strong>Note:</strong> If you create a link to open Google Play from your web
-site and the user selects it from an Android-powered device, the device's Google Play application will
-resolve the link so the user can use the Google Play application on the device instead of opening the web
-site. As such, you should always use {@code http://play.google.com/store/apps/...} URIs when
-creating a link on
-a web page. When pointing to your apps from within your Android app, use the
-{@code market://} URIs in an intent, so that the Google Play application always opens.</p>
-
-
-<h3 id="OpeningDetails">Opening an app's details page</h3>
-
-<p>As described above, you can open the details page for a specific application either on the
-Google Play application or the Google Play web site. The details page allows the user to see
-the application description, screenshots, reviews and more, and choose to install it.</p>
-
-<p>The format for the URI that opens the details page is:</p>
-
-<p style="margin-left:2em"><code>&lt;URI_prefix&gt;<b>apps/details?id=</b>&lt;package_name&gt;</code></p>
-
-<p>The <code>&lt;package_name&gt;</code> is a placeholder for the target application's
-fully-qualified package name, as declared in the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#package">{@code
-package}</a> attribute of the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">{@code
-&lt;manifest&gt;}</a> element.</p>
-
-<p>For example: <code>http://play.google.com/store/apps/details?id=com.example.myapp</code></p>
-
-
-<h4>Opening the app details page from your Android app</h4>
-
-<p>To open the Google Play details page from your application,
-create an intent with the {@link android.content.Intent#ACTION_VIEW} action and include a data URI
-in this format:</p>
-
-<p style="margin-left:2em"><code>market://details?id=&lt;package_name&gt;</code></p>
-
-<p>For example, here's how you can create an intent and open an application's details page in
-Google Play:</p>
-
-<pre>
-Intent intent = new Intent(Intent.ACTION_VIEW);
-intent.setData(Uri.parse("market://details?id=com.example.android"));
-startActivity(intent);
-</pre>
-
-<p>This will open the Google Play application on the device to view the {@code
-com.example.android} application.</p>
-
-
-<h4>Opening the app details page from a web site</h4>
-
-<p>To open the details page from your web site, create a link with a URI in this
-format:</p>
-
-<p style="margin-left:2em">
-  <code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
-</p>
-
-<p>For example, here's a link that opens an application's details page on Google Play:</p>
-
-<pre>
-&lt;a href="http://play.google.com/store/apps/details?id=com.example.android">App Link&lt;/a>
-</pre>
-
-<p>When clicked from a desktop web browser, this opens the Google Play web site to view the
-{@code com.example.android} application. When clicked from an Android-powered device, users are
-given the option to use either their web browser or the Google Play application to view the
-application.</p>
-
-
-
-<h3 id="PerformingSearch">Performing a search</h3>
-
-<p>To initiate a search on Google Play, the format for the URI is:</p>
-
-<p style="margin-left:2em">
-  <code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;query&gt;</code>
-</p>
-
-<p>The <code>&lt;query&gt;</code> is a placeholder for the search query to execute in Google
-Play. The query can be a raw text string or you can include a parameter that performs a search
-based on the publisher name:</p>
-
-<ul>
-  <li>To perform a raw text search, append the query string:
-  <p><code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;search_query&gt;</code></p></li>
-
-  <li>To search based on the publisher name, use the {@code pub:} parameter in the query, followed
-by the publisher name:
-  <p><code>&lt;URI_prefix&gt;<b>search?q=pub:</b>&lt;publisher_name&gt;</code></p>
-  <p>You can use this type of search to show all of your published applications.</p></li>
-</ul>
-
-
-<h4>Searching from your Android app</h4>
-
-<p>To initiate a search on Google Play from your application, create an intent with the
-{@link android.content.Intent#ACTION_VIEW} action and include a data URI in this format:</p>
-
-<p style="margin-left:2em"><code>market://search?q=&lt;query&gt;</code></p>
-
-<p>The query may include the {@code pub:} parameter described above.</p>
-
-<p>For example, here's how you can initiate a search in the Google Play application, based on the
-publisher name:</p>
-
-<pre>
-Intent intent = new Intent(Intent.ACTION_VIEW);
-intent.setData(Uri.parse("market://search?q=pub:Your Publisher Name"));
-startActivity(intent);
-</pre>
-
-<p>This opens the Google Play application to perform the search. The search result shows all
-applications published by the publisher that are compatible with the current device.</p>
-
-
-<h4>Searching from a web site</h4>
-
-<p>To initiate a search on Google Play from your web site, create a link with a URI in this
-format:</p>
-
-<p style="margin-left:2em">
-  <code>http://play.google.com/store/search?q=&lt;query&gt;</code>
-</p>
-
-<p>The query may include the {@code pub:} parameter described above.</p>
-
-<p>For example, here's a link that initiates a search on Google Play, based on the
-publisher name:</p>
-
-<pre>
-&lt;a href="http://play.google.com/store/search?q=pub:Your Publisher Name">Search Link&lt;/a>
-</pre>
-
-<p>When clicked from a desktop web browser, this opens the Google Play web site and performs the
-search. When clicked from an Android-powered device, users are given the option to use either their
-web browser or the Google Play application to perform the search.</p>
-
-
-
-<h3 id="BuildaButton">Build a Google Play button</h3>
-
-<p>Use the following form to create a button for your web site that takes users to your application
-on Google Play. Input either your application's package name or your publisher name and the button
-will take users to Google Play to either view your application's information or view a list of your
-published apps. If users click the button while on an Android-powered device, the Google Play
-application will respond to show users your application(s).</p>
-
-<p>This form offers two styles of the official brand badge each at recommended sizes. You can pick
-between either "Get it on Google Play" or "Android app on Google Play." You should not modify the
-badge images in any way. For more usage guidelines,
-see the <a href="http://www.android.com/branding.html">Android Brand Guidelines</a>.</p>
-
-<style type="text/css">
-
-form.button-form {
-  margin-top:2em;
-}
-
-/* the label and input elements are blocks that float left in order to
-   keep the left edgets of the input aligned, and IE 6/7 do not fully support "inline-block" */
-label.block {
-  display: block;
-  float: left;
-  width: 100px;
-  padding-right: 10px;
-}
-
-input.text {
-  display: block;
-  float: left;
-  width: 250px;
-}
-
-div.button-row {
-  white-space:nowrap;
-  min-height:80px;
-}
-
-div.button-row input {
-  vertical-align:120%;
-}
-
-#jd-content div.button-row img {
-  margin: 0;
-}
-
-</style>
-
-<script type="text/javascript">
-
-// variables for creating 'try it out' demo button
-var imagePath = "http://www.android.com/images/brand/"
-var linkStart = "<a href=\"http://play.google.com/store/";
-var imageStart = "\">\n"
-        + "  <img alt=\"";
-  // leaves opening for the alt text value
-var imageSrc = "\"\n       src=\"" + imagePath;
-  // leaves opening for the image file name
-var imageEnd = ".png\" />\n</a>";
-
-// variables for creating code snippet
-var linkStartCode = "&lt;a href=\"http://play.google.com/store/";
-var imageStartCode = "\"&gt;\n"
-        + "  &lt;img alt=\"";
-  // leaves opening for the alt text value
-var imageSrcCode = "\"\n       src=\"" + imagePath;
-  // leaves opening for the image file name
-var imageEndCode = ".png\" />\n&lt;/a>";
-
-/** Generate the HTML snippet and demo based on form values */
-function buildButton(form) {
-  var selectedValue = $('form input[type=radio]:checked').val();
-  var altText = selectedValue.indexOf("get_it") != -1 ? "Get it on Google Play" : "Android app on Google Play";
-
-  if (form["package"].value != "com.example.android") {
-    $("#preview").show();
-    $("#snippet").show().html(linkStartCode + "apps/details?id=" + form["package"].value
-            + imageStartCode + altText + imageSrcCode
-            + selectedValue + imageEndCode);
-    $("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
-            + imageStart + altText + imageSrc
-            + selectedValue + imageEnd);
-  } else if (form["publisher"].value != "Example, Inc.") {
-    $("#preview").show();
-    $("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
-            + imageStartCode + altText + imageSrcCode
-            + selectedValue + imageEndCode);
-    $("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
-            + imageStart + altText + imageSrc
-            + selectedValue + imageEnd);
-  } else {
-    alert("Please enter your package name or publisher name");
-  }
-  return false;
-}
-
-/** Listen for Enter key */
-function onTextEntered(event, form, me) {
-  // 13 = enter
-  if (event.keyCode == 13) {
-    buildButton(form);
-  }
-}
-
-/** When input is focused, remove example text and disable other input */
-function onInputFocus(object, example) {
-  if (object.value == example) {
-    $(object).val('').css({'color' : '#000'});
-  }
-  $('input[type="text"]:not(input[name='+object.name+'])',
-          object.parentNode).attr('disabled','true');
-  $('#'+object.name+'-clear').show();
-}
-
-/** When input is blured, restore example text if appropriate and enable other input */
-function onInputBlur(object, example) {
-  if (object.value.length < 1) {
-    $(object).attr('value',example).css({'color':'#ccc'});
-    $('input[type="text"]', object.parentNode).removeAttr('disabled');
-    $('#'+object.name+'-clear').hide();
-  }
-}
-
-/** Clear the form to start over */
-function clearLabel(id, example) {
-  $("#preview").hide();
-  $('#'+id+'').html('').attr('value',example).css({'color':'#ccc'});
-  $('input[type="text"]', $('#'+id+'').parent()).removeAttr('disabled');
-  $('#'+id+'-clear').hide();
-  return false;
-}
-
-/** When the doc is ready, find the inputs and color the input grey if the value is the example
-    text. This is necessary to handle back-navigation, which can auto-fill the form with previous
-    values (and text should not be grey) */
-$(document).ready(function() {
-  $(".button-form input.text").each(function(index) {
-    if ($(this).val() == $(this).attr("default")) {
-      $(this).css("color","#ccc");
-    } else {
-      /* This is necessary to handle back-navigation to the page after form was filled */
-      $('input[type="text"]:not(input[name='+this.name+'])',
-              this.parentNode).attr('disabled','true');
-      $('#'+this.name+'-clear').show();
-    }
-  });
-});
-
-</script>
-
-<form class="button-form">
-  <label class="block" for="package">Package name:</label>
-  <input class="text" type="text" id="package" name="package"
-         value="com.example.android"
-         default="com.example.android"
-         onfocus="onInputFocus(this, 'com.example.android')"
-         onblur="onInputBlur(this, 'com.example.android')"
-         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
-         <a id="package-clear" style="display:none" href="#"
-            onclick="return clearLabel('package','com.example.android');">clear</a>
-  <p style="clear:both;margin:0">&nbsp;<em>or</em></p>
-  <label class="block" style="margin-top:5px" for="publisher">Publisher name:</label>
-  <input class="text" type="text" id="publisher" name="publisher"
-         value="Example, Inc."
-         default="Example, Inc."
-         onfocus="onInputFocus(this, 'Example, Inc.')"
-         onblur="onInputBlur(this, 'Example, Inc.')"
-         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
-         <a id="publisher-clear" style="display:none" href="#"
-            onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
-         <br/><br/>
-
-<div class="button-row">
-  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
-    <label for="ns"><img src="//www.android.com/images/brand/get_it_on_play_logo_small.png"
-alt="Get it on Google Play (small)" /></label>
-    &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
-    <label for="nm"><img src="//www.android.com/images/brand/get_it_on_play_logo_large.png"
-alt="Get it on Google Play (large)" /></label>
-</div>
-
-<div class="button-row">
-  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
-    <label for="ws"><img src="//www.android.com/images/brand/android_app_on_play_logo_small.png"
-alt="Android app on Google Play (small)" /></label>
-    &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
-    <label for="wm"><img src="//www.android.com/images/brand/android_app_on_play_logo_large.png"
-alt="Android app on Google Play (large)" /></label>
-</div>
-
-  <input type="button" onclick="return buildButton(this.parentNode)" value="Build my button"
-style="padding:5px" />
-  <br/>
-</form>
-
-<div id="preview" style="display:none">
-  <p>Copy and paste this HTML into your web site:</p>
-  <textarea id="snippet" cols="100" rows="5" onclick="this.select()"
-style="font-family:monospace;background-color:#efefef;padding:5px;display:none;margin-bottom:1em">
-  </textarea >
-
-<p>Try it out:</p>
-<div id="button-preview" style="margin-top:1em"></div>
-</div>
-
-
-
-
-
-
-<h3 id="UriSummary">Summary of URI formats</h3>
-
-<p>The table below provides a summary of the URIs currently supported by the Google Play (both on
-the web and in the Android application), as discussed in the previous sections.</p>
-
-<table>
-<tr>
-<th>For this result</th>
-<th>Use this URI in a web page link</th>
-<th>Or this URI in an {@link android.content.Intent#ACTION_VIEW} intent</th>
-</tr>
-
-<tr>
-<td>Display the details screen for a specific application</td>
-<td><code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
-<td><code>market://details?id=&lt;package_name&gt;</code></td>
-</tr>
-
-<tr>
-<td>Search for applications using a general string query.</td>
-<td><code>http://play.google.com/store/search?q=&lt;query&gt;</code></td>
-<td><code>market://search?q=&lt;query&gt;</code></td>
-</tr>
-
-<tr>
-<td>Search for applications by publisher name</td>
-<td><nobr><code>http://play.google.com/store/search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
-<td><nobr><code>market://search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
-</tr>
-
-</table>
diff --git a/docs/html/tools/workflow/publishing/publishing_overview.jd b/docs/html/tools/workflow/publishing/publishing_overview.jd
deleted file mode 100644
index a1973c9..0000000
--- a/docs/html/tools/workflow/publishing/publishing_overview.jd
+++ /dev/null
@@ -1,231 +0,0 @@
-page.title=Publishing Overview
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>Quickview</h2>
-  <ul>
-    <li>Learn how to publish Android apps.</li>
-    <li>Find out how to prepare apps for release.</li>
-    <li>Learn how to release apps to users.</li>
-  </ul>
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
-    <li><a href="#publishing-release">Releasing Your Application to Users</a>
-    <ol>
-      <li><a href="#publishing-market">Releasing on Google Play</a></li>
-      <li><a href="#publishing-website">Releasing on your own website</a></li>
-      <li><a href="#publishing-email">Releasing through email</a></li>
-    </ol>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for
-    Release</a></li>
-    <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
-  </ol>
-</div>
-</div>
-
-<p>Publishing is the process that makes your Android applications available to users. When you
-publish an Android application you perform two main tasks:</p>
-
-<ul>
-  <li>You prepare the application for release.
-    <p>During the preparation step you build a release version of your application, which users can
-      download and install on their Android-powered devices.</p>
-  </li>
-  <li>You release the application to users.
-    <p>During the release step you publicize, sell, and distribute the release version of your
-      application to users.</p>
-  </li>
-</ul>
-
-<p>Usually, you release your application through an application marketplace, such as Google Play.
-However, you can also release applications by sending them directly to users or by letting users
-download them from your own website.</p>
-
-<p>Figure 1 shows how the publishing process fits into the overall Android <a
-href="{@docRoot}tools/workflow/index.html">application development process</a>.
-The publishing process is typically performed after you finish testing your application in a debug
-environment. Also, as a best practice, your application should meet all of your release criteria for
-functionality, performance, and stability before you begin the publishing process.</p>
-
-<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
-       process fits into the overall development process" height="86" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
-href="{@docRoot}tools/workflow/index.html">application development process</a>.
-</p>
-
-<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
-
-<p>Preparing your application for release is a multi-step process that involves the following
-tasks:</p>
-
-<ul>
-
-  <li>Configuring your application for release.
-    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
-    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-    attribute from your manifest file. You should also provide values for the
-    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
-    located in the
-    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
-    element. You may also have to configure several other settings to meet Google Play
-    requirements or accomodate whatever method you're using to release your application.</p>
-  </li>
-  <li>Building and signing a release version of your application.
-    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
-    with the Android SDK tools provide everything you need to build and sign a release version of
-    your application.</p>
-  </li>
-  <li>Testing the release version of your application.
-    <p>Before you distribute your application, you should thoroughly test the release version on at
-    least one target handset device and one target tablet device.</p>
-  </li>
-  <li>Updating application resources for release.
-    <p>You need to be sure that all application resources such as multimedia files and graphics
-    are updated and included with your application or staged on the proper production servers.</p>
-  </li>
-  <li>Preparing remote servers and services that your application depends on.
-    <p>If your application depends on external servers or services, you need to be sure they
-    are secure and production ready.</p>
-  </li>
-</ul>
-
-<p>You may have to perform several other tasks as part of the preparation process. For example, you
-will need to get a private key for signing your application, and you may need to get a Maps API
-release key if you are using the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
-library</a>. You will also need to create an icon for your application, and you may want to prepare
-an End User License Agreement (EULA) to protect your person, organization, and intellectual
-property.</p>
-
-<p>When you are finished preparing your application for release you will have a signed
-<code>.apk</code> file that you can distribute to users.</p>
-
-<p>To learn how to prepare your application for release, see <a
-href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
-topic provides step-by-step instructions for configuring and building a release version of your
-application.</p>
-
-<h2 id="publishing-release">Releasing Your Application to Users</h2>
-
-<p>You can release your Android applications several ways. Usually, you release applications
-through an application marketplace, such as Google Play, but you can also release applications
-on your own website or by sending an application directly to a user. Google Play is the
-recommended marketplace for Android applications and is particularly useful if you want to
-distribute your applications to a large global audience. The other two release methods&mdash;server
-distribution and email distribution&mdash;are useful if you are releasing an application to a small
-group of users (for example, a work group in an enterprise environment), or if you do not want to
-make your application available to the general public.</p>
-
-<h3 id="publishing-market">Releasing Your Applications on Google Play</h3>
-
-<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
-your Android applications to users around the world. When you release your applications through
-Google Play you have access to a suite of developer tools that let you analyze your sales,
-identify market trends, and control who your applications are being distributed to. You also have
-access to several revenue-enhancing features that are not available anywhere else, such as <a
-href="{@docRoot}google/play/billing/index.html">in-app billing</a> and <a
-href="{@docRoot}google/play/licensing.html">application licensing</a>. This rich array of tools
-and features, coupled with numerous end-user community features, makes Google Play the premier
-marketplace for selling and buying Android applications.</p>
-
-<p>Releasing your application on Google Play is a simple process that involves three basic
-  steps:</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
-       alt="Screenshot showing the graphical user interface element that allows unknown sources
-       to be installed" />
-  <p class="img-caption">
-    <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
-    applications that are not published on Google Play .
-  </p>
-</div>
-
-<ul>
-  <li>Preparing promotional materials.
-    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
-    create promotional materials for your application, such as screenshots, videos, graphics, and
-    promotional text.</p>
-  </li>
-  <li>Configuring options and uploading assets.
-    <p>Google Play lets you target your application to a worldwide pool of users and devices.
-    By configuring various Google Play settings, you can choose the countries you want to
-    reach, the listing languages you want to use, and the price you want to charge in each
-    country. You can also configure listing details such as the application type, category, and
-    content rating. When you are done configuring options you can upload your promotional materials
-    and your application as a draft (unpublished) application.</p>
-  </li>
-  <li>Publishing the release version of your application.
-    <p>If you are satisfied that your publishing settings are correctly configured and your
-    uploaded application is ready to be released to the public, you can simply click
-    <strong>Publish</strong > in the developer console and within minutes your application will be
-    live and available for download around the world.</p>
-  </li>
-</ul>
-
-<p>For information about Google Play, see <a
-href="{@docRoot}tools/publishing/publishing.html#market">Publishing on Google Play</a>. This
-topic provides an introduction to Google Play features and provides a step-by-step guide for
-distributing your applications on Google Play.</p>
-
-<h3 id="publishing-website">Releasing your application on your own website</h3>
-
-<p>If you do not want to release your application on an application marketplace like Google Play,
-you can release your application by making it available for download on your own website or server.
-To do this, you must first prepare your application for release (that is, you must build it for
-release and sign it). Then all you need to do is host the release-ready application on your website
-and provide a download link for the application. When users browse to your website with their
-Android-powered devices and download your application, the Android system will automatically start
-installing the application on the device. However, the installation process will start automatically
-only if the user has configured their device to allow the installation of non-Google Play
-applications.</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_via_email.png"
-       alt="Screenshot showing the graphical user interface users see when you send them an app"
-       height="453" />
-  <p class="img-caption">
-    <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
-    an application via email.
-  </p>
-</div>
-
-<p>By default, Android-powered devices allow users to install applications only if the applications
-have been downloaded from Google Play. To allow the installation of applications from other
-sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
-they need to make this configuration change before they download your application to their
-device (see figure 2).</p>
-
-<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
-applications from unknown sources.</p>
-
-<p>Although it is relatively easy to release your application on your own website, it can be
-inefficient and cumbersome. For example, if you want to monetize your application you will
-have to process and track all financial transactions yourself and you will not be able to use
-Google Play's in-app billing feature to sell in-app products. In addition, you will not be
-able to use the licensing feature to help prevent unauthorized installation and use of your
-application.</p>
-
-<h3 id="publishing-email">Releasing your application through email</h3>
-
-<p>The easiest and quickest way to release your application is to send it to a user through
-email. To do this, you prepare your application for release and then attach it to an email
-and send it to a user. When the user opens your email message on their Android-powered device
-the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
-button in the email message (see figure 3). Users can install your application by touching the
-button.</p>
-
-<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
-user has configured their device to allow the installation of non-Google Play applications and
-they open your email with the native Gmail application.</p>
-
-<p>Releasing applications through email is convenient if you are sending your application to
-only a few trusted users, but it provides few protections from piracy and unauthorized
-distribution; that is, anyone you send your application to can simply forward it to someone else.
-else.
diff --git a/docs/html/tools/workflow/publishing/versioning.jd b/docs/html/tools/workflow/publishing/versioning.jd
deleted file mode 100644
index e0b4435..0000000
--- a/docs/html/tools/workflow/publishing/versioning.jd
+++ /dev/null
@@ -1,174 +0,0 @@
-page.title=Versioning Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Your application <em>must</em> be versioned</a></li>
-<li>You set the version in the application's manifest file</li>
-<li>How you version your applications affects how users upgrade </li>
-<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#appversioning">Setting Application Version</a></li>
-<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
-</ol>
-
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
-<li><a href="{@docRoot}tools/publishing/publishing.html#market">Publishing On Google Play</a></li>
-<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Versioning is a critical component of your application upgrade and maintenance
-strategy. Versioning is important because:</p>
-
-<ul>
-<li>Users need to have specific information about the application version that
-is installed on their devices and the upgrade versions available for
-installation. </li>
-<li>Other applications &mdash; including other applications that you publish as
-a suite &mdash; need to query the system for your application's version, to
-determine compatibility and identify dependencies.</li>
-<li>Services through which you will publish your application(s) may also need to
-query your application for its version, so that they can display the version to
-users. A publishing service may also need to check the application version to
-determine compatibility and establish upgrade/downgrade relationships.</li>
-</ul>
-
-<p>The Android system does not use app version information to enforce
-restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
-developer) are responsible for enforcing version restrictions within your application or by
-informing users of the version restrictions and limitations. The Android system does, however,
-enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
-manifest. This attribute allows an application to specify the minimum system API with which it is
-compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
-Version</a>.</p>
-
-<h2 id="appversioning">Setting Application Version</h2>
-<p>To define the version information for your application, you set attributes in
-the application's manifest file. Two attributes are available, and you should
-always define values for both of them: </p>
-
-<ul>
-<li><code>android:versionCode</code> &mdash; An integer value that represents
-the version of the application code, relative to other versions.
-
-<p>The value is an integer so that other applications can programmatically
-evaluate it, for example to check an upgrade or downgrade relationship. You can
-set the value to any integer you want, however you should make sure that each
-successive release of your application uses a greater value. The system does not
-enforce this behavior, but increasing the value with successive releases is
-normative. </p>
-
-<p>Typically, you would release the first version of your application with
-versionCode set to 1, then monotonically increase the value with each release,
-regardless whether the release constitutes a major or minor release. This means
-that the <code>android:versionCode</code> value does not necessarily have a
-strong resemblance to the application release version that is visible to the
-user (see <code>android:versionName</code>, below). Applications and publishing
-services should not display this version value to users.</p>
-</li>
-<li><code>android:versionName</code> &mdash; A string value that represents the
-release version of the application code, as it should be shown to users.
-<p>The value is a string so that you can describe the application version as a
-&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
-absolute or relative version identifier. </p>
-
-<p>As with <code>android:versionCode</code>, the system does not use this value
-for any internal purpose, other than to enable applications to display it to
-users. Publishing services may also extract the <code>android:versionName</code>
-value for display to users.</p>
-</li>
-</ul>
-
-<p>You define both of these version attributes in the
-<code>&lt;manifest&gt;</code> element of the manifest file. </p>
-
-<p>Here's an example manifest that shows the <code>android:versionCode</code>
-and <code>android:versionName</code> attributes in the
-<code>&lt;manifest&gt;</code> element. </p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.example.package.name"
-      android:versionCode="2"
-      android:versionName="1.1"&gt;
-    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
-        ...
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<p>In this example, note that <code>android:versionCode</code> value indicates
-that the current .apk contains the second release of the application code, which
-corresponds to a minor follow-on release, as shown by the
-<code>android:versionName</code> string. </p>
-
-<p>The Android framework provides an API to let applications query the system
-for version information about your application. To obtain version information,
-applications use the
-{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
-method of {@link android.content.pm.PackageManager PackageManager}. </p>
-
-<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
-
-<p>If your application requires a specific minimum version of the Android
-platform, or is designed only to support a certain range of Android platform
-versions, you can specify those version requirements as API Level identifiers
-in the application's manifest file. Doing so ensures that your
-application can only be installed on devices that
-are running a compatible version of the Android system. </p>
-
-<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
-element in the application's manifest, with one or more of these attributes: </p>
-
-<ul>
-<li><code>android:minSdkVersion</code> &mdash; The minimum version
-of the Android platform on which the application will run, specified
-by the platform's API Level identifier. </li>
-<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
-on which the application is designed to run. In some cases, this allows the
-application to use manifest elements or behaviors defined in the target
-API Level, rather than being restricted to using only those defined
-for the minimum API Level.</li>
-<li><code>android:maxSdkVersion</code> &mdash; The maximum version
-of the Android platform on which the application is designed to run,
-specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-documentation before using this attribute. </li>
-</ul>
-
-<p>When preparing to install your application, the system checks the value of this
-attribute and compares it to the system version. If the
-<code>android:minSdkVersion</code> value is greater than the system version, the
-system aborts the installation of the application. Similarly, the system
-installs your application only if its <code>android:maxSdkVersion</code>
-is compatible with the platform version.</p>
-
-<p>If you do not specify these attributes in your manifest, the system assumes
-that your application is compatible with all platform versions, with no
-maximum API Level. </p>
-
-<p>To specify a minimum platform version for your application, add a
-<code>&lt;uses-sdk&gt;</code> element as a child of
-<code>&lt;manifest&gt;</code>, then define the
-<code>android:minSdkVersion</code> as an attribute. </p>
-
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-manifest element documentation and the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
diff --git a/docs/html/tools/workflow/publishing_overview.jd b/docs/html/tools/workflow/publishing_overview.jd
deleted file mode 100644
index a1973c9..0000000
--- a/docs/html/tools/workflow/publishing_overview.jd
+++ /dev/null
@@ -1,231 +0,0 @@
-page.title=Publishing Overview
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>Quickview</h2>
-  <ul>
-    <li>Learn how to publish Android apps.</li>
-    <li>Find out how to prepare apps for release.</li>
-    <li>Learn how to release apps to users.</li>
-  </ul>
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
-    <li><a href="#publishing-release">Releasing Your Application to Users</a>
-    <ol>
-      <li><a href="#publishing-market">Releasing on Google Play</a></li>
-      <li><a href="#publishing-website">Releasing on your own website</a></li>
-      <li><a href="#publishing-email">Releasing through email</a></li>
-    </ol>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for
-    Release</a></li>
-    <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
-  </ol>
-</div>
-</div>
-
-<p>Publishing is the process that makes your Android applications available to users. When you
-publish an Android application you perform two main tasks:</p>
-
-<ul>
-  <li>You prepare the application for release.
-    <p>During the preparation step you build a release version of your application, which users can
-      download and install on their Android-powered devices.</p>
-  </li>
-  <li>You release the application to users.
-    <p>During the release step you publicize, sell, and distribute the release version of your
-      application to users.</p>
-  </li>
-</ul>
-
-<p>Usually, you release your application through an application marketplace, such as Google Play.
-However, you can also release applications by sending them directly to users or by letting users
-download them from your own website.</p>
-
-<p>Figure 1 shows how the publishing process fits into the overall Android <a
-href="{@docRoot}tools/workflow/index.html">application development process</a>.
-The publishing process is typically performed after you finish testing your application in a debug
-environment. Also, as a best practice, your application should meet all of your release criteria for
-functionality, performance, and stability before you begin the publishing process.</p>
-
-<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
-       process fits into the overall development process" height="86" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
-href="{@docRoot}tools/workflow/index.html">application development process</a>.
-</p>
-
-<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
-
-<p>Preparing your application for release is a multi-step process that involves the following
-tasks:</p>
-
-<ul>
-
-  <li>Configuring your application for release.
-    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
-    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-    attribute from your manifest file. You should also provide values for the
-    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
-    located in the
-    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
-    element. You may also have to configure several other settings to meet Google Play
-    requirements or accomodate whatever method you're using to release your application.</p>
-  </li>
-  <li>Building and signing a release version of your application.
-    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
-    with the Android SDK tools provide everything you need to build and sign a release version of
-    your application.</p>
-  </li>
-  <li>Testing the release version of your application.
-    <p>Before you distribute your application, you should thoroughly test the release version on at
-    least one target handset device and one target tablet device.</p>
-  </li>
-  <li>Updating application resources for release.
-    <p>You need to be sure that all application resources such as multimedia files and graphics
-    are updated and included with your application or staged on the proper production servers.</p>
-  </li>
-  <li>Preparing remote servers and services that your application depends on.
-    <p>If your application depends on external servers or services, you need to be sure they
-    are secure and production ready.</p>
-  </li>
-</ul>
-
-<p>You may have to perform several other tasks as part of the preparation process. For example, you
-will need to get a private key for signing your application, and you may need to get a Maps API
-release key if you are using the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
-library</a>. You will also need to create an icon for your application, and you may want to prepare
-an End User License Agreement (EULA) to protect your person, organization, and intellectual
-property.</p>
-
-<p>When you are finished preparing your application for release you will have a signed
-<code>.apk</code> file that you can distribute to users.</p>
-
-<p>To learn how to prepare your application for release, see <a
-href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
-topic provides step-by-step instructions for configuring and building a release version of your
-application.</p>
-
-<h2 id="publishing-release">Releasing Your Application to Users</h2>
-
-<p>You can release your Android applications several ways. Usually, you release applications
-through an application marketplace, such as Google Play, but you can also release applications
-on your own website or by sending an application directly to a user. Google Play is the
-recommended marketplace for Android applications and is particularly useful if you want to
-distribute your applications to a large global audience. The other two release methods&mdash;server
-distribution and email distribution&mdash;are useful if you are releasing an application to a small
-group of users (for example, a work group in an enterprise environment), or if you do not want to
-make your application available to the general public.</p>
-
-<h3 id="publishing-market">Releasing Your Applications on Google Play</h3>
-
-<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
-your Android applications to users around the world. When you release your applications through
-Google Play you have access to a suite of developer tools that let you analyze your sales,
-identify market trends, and control who your applications are being distributed to. You also have
-access to several revenue-enhancing features that are not available anywhere else, such as <a
-href="{@docRoot}google/play/billing/index.html">in-app billing</a> and <a
-href="{@docRoot}google/play/licensing.html">application licensing</a>. This rich array of tools
-and features, coupled with numerous end-user community features, makes Google Play the premier
-marketplace for selling and buying Android applications.</p>
-
-<p>Releasing your application on Google Play is a simple process that involves three basic
-  steps:</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
-       alt="Screenshot showing the graphical user interface element that allows unknown sources
-       to be installed" />
-  <p class="img-caption">
-    <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
-    applications that are not published on Google Play .
-  </p>
-</div>
-
-<ul>
-  <li>Preparing promotional materials.
-    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
-    create promotional materials for your application, such as screenshots, videos, graphics, and
-    promotional text.</p>
-  </li>
-  <li>Configuring options and uploading assets.
-    <p>Google Play lets you target your application to a worldwide pool of users and devices.
-    By configuring various Google Play settings, you can choose the countries you want to
-    reach, the listing languages you want to use, and the price you want to charge in each
-    country. You can also configure listing details such as the application type, category, and
-    content rating. When you are done configuring options you can upload your promotional materials
-    and your application as a draft (unpublished) application.</p>
-  </li>
-  <li>Publishing the release version of your application.
-    <p>If you are satisfied that your publishing settings are correctly configured and your
-    uploaded application is ready to be released to the public, you can simply click
-    <strong>Publish</strong > in the developer console and within minutes your application will be
-    live and available for download around the world.</p>
-  </li>
-</ul>
-
-<p>For information about Google Play, see <a
-href="{@docRoot}tools/publishing/publishing.html#market">Publishing on Google Play</a>. This
-topic provides an introduction to Google Play features and provides a step-by-step guide for
-distributing your applications on Google Play.</p>
-
-<h3 id="publishing-website">Releasing your application on your own website</h3>
-
-<p>If you do not want to release your application on an application marketplace like Google Play,
-you can release your application by making it available for download on your own website or server.
-To do this, you must first prepare your application for release (that is, you must build it for
-release and sign it). Then all you need to do is host the release-ready application on your website
-and provide a download link for the application. When users browse to your website with their
-Android-powered devices and download your application, the Android system will automatically start
-installing the application on the device. However, the installation process will start automatically
-only if the user has configured their device to allow the installation of non-Google Play
-applications.</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_via_email.png"
-       alt="Screenshot showing the graphical user interface users see when you send them an app"
-       height="453" />
-  <p class="img-caption">
-    <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
-    an application via email.
-  </p>
-</div>
-
-<p>By default, Android-powered devices allow users to install applications only if the applications
-have been downloaded from Google Play. To allow the installation of applications from other
-sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
-they need to make this configuration change before they download your application to their
-device (see figure 2).</p>
-
-<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
-applications from unknown sources.</p>
-
-<p>Although it is relatively easy to release your application on your own website, it can be
-inefficient and cumbersome. For example, if you want to monetize your application you will
-have to process and track all financial transactions yourself and you will not be able to use
-Google Play's in-app billing feature to sell in-app products. In addition, you will not be
-able to use the licensing feature to help prevent unauthorized installation and use of your
-application.</p>
-
-<h3 id="publishing-email">Releasing your application through email</h3>
-
-<p>The easiest and quickest way to release your application is to send it to a user through
-email. To do this, you prepare your application for release and then attach it to an email
-and send it to a user. When the user opens your email message on their Android-powered device
-the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
-button in the email message (see figure 3). Users can install your application by touching the
-button.</p>
-
-<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
-user has configured their device to allow the installation of non-Google Play applications and
-they open your email with the native Gmail application.</p>
-
-<p>Releasing applications through email is convenient if you are sending your application to
-only a few trusted users, but it provides few protections from piracy and unauthorized
-distribution; that is, anyone you send your application to can simply forward it to someone else.
-else.
diff --git a/docs/html/tools/workflow/versioning.jd b/docs/html/tools/workflow/versioning.jd
deleted file mode 100644
index e0b4435..0000000
--- a/docs/html/tools/workflow/versioning.jd
+++ /dev/null
@@ -1,174 +0,0 @@
-page.title=Versioning Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Your application <em>must</em> be versioned</a></li>
-<li>You set the version in the application's manifest file</li>
-<li>How you version your applications affects how users upgrade </li>
-<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#appversioning">Setting Application Version</a></li>
-<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
-</ol>
-
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
-<li><a href="{@docRoot}tools/publishing/publishing.html#market">Publishing On Google Play</a></li>
-<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Versioning is a critical component of your application upgrade and maintenance
-strategy. Versioning is important because:</p>
-
-<ul>
-<li>Users need to have specific information about the application version that
-is installed on their devices and the upgrade versions available for
-installation. </li>
-<li>Other applications &mdash; including other applications that you publish as
-a suite &mdash; need to query the system for your application's version, to
-determine compatibility and identify dependencies.</li>
-<li>Services through which you will publish your application(s) may also need to
-query your application for its version, so that they can display the version to
-users. A publishing service may also need to check the application version to
-determine compatibility and establish upgrade/downgrade relationships.</li>
-</ul>
-
-<p>The Android system does not use app version information to enforce
-restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
-developer) are responsible for enforcing version restrictions within your application or by
-informing users of the version restrictions and limitations. The Android system does, however,
-enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
-manifest. This attribute allows an application to specify the minimum system API with which it is
-compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
-Version</a>.</p>
-
-<h2 id="appversioning">Setting Application Version</h2>
-<p>To define the version information for your application, you set attributes in
-the application's manifest file. Two attributes are available, and you should
-always define values for both of them: </p>
-
-<ul>
-<li><code>android:versionCode</code> &mdash; An integer value that represents
-the version of the application code, relative to other versions.
-
-<p>The value is an integer so that other applications can programmatically
-evaluate it, for example to check an upgrade or downgrade relationship. You can
-set the value to any integer you want, however you should make sure that each
-successive release of your application uses a greater value. The system does not
-enforce this behavior, but increasing the value with successive releases is
-normative. </p>
-
-<p>Typically, you would release the first version of your application with
-versionCode set to 1, then monotonically increase the value with each release,
-regardless whether the release constitutes a major or minor release. This means
-that the <code>android:versionCode</code> value does not necessarily have a
-strong resemblance to the application release version that is visible to the
-user (see <code>android:versionName</code>, below). Applications and publishing
-services should not display this version value to users.</p>
-</li>
-<li><code>android:versionName</code> &mdash; A string value that represents the
-release version of the application code, as it should be shown to users.
-<p>The value is a string so that you can describe the application version as a
-&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
-absolute or relative version identifier. </p>
-
-<p>As with <code>android:versionCode</code>, the system does not use this value
-for any internal purpose, other than to enable applications to display it to
-users. Publishing services may also extract the <code>android:versionName</code>
-value for display to users.</p>
-</li>
-</ul>
-
-<p>You define both of these version attributes in the
-<code>&lt;manifest&gt;</code> element of the manifest file. </p>
-
-<p>Here's an example manifest that shows the <code>android:versionCode</code>
-and <code>android:versionName</code> attributes in the
-<code>&lt;manifest&gt;</code> element. </p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.example.package.name"
-      android:versionCode="2"
-      android:versionName="1.1"&gt;
-    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
-        ...
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<p>In this example, note that <code>android:versionCode</code> value indicates
-that the current .apk contains the second release of the application code, which
-corresponds to a minor follow-on release, as shown by the
-<code>android:versionName</code> string. </p>
-
-<p>The Android framework provides an API to let applications query the system
-for version information about your application. To obtain version information,
-applications use the
-{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
-method of {@link android.content.pm.PackageManager PackageManager}. </p>
-
-<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
-
-<p>If your application requires a specific minimum version of the Android
-platform, or is designed only to support a certain range of Android platform
-versions, you can specify those version requirements as API Level identifiers
-in the application's manifest file. Doing so ensures that your
-application can only be installed on devices that
-are running a compatible version of the Android system. </p>
-
-<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
-element in the application's manifest, with one or more of these attributes: </p>
-
-<ul>
-<li><code>android:minSdkVersion</code> &mdash; The minimum version
-of the Android platform on which the application will run, specified
-by the platform's API Level identifier. </li>
-<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
-on which the application is designed to run. In some cases, this allows the
-application to use manifest elements or behaviors defined in the target
-API Level, rather than being restricted to using only those defined
-for the minimum API Level.</li>
-<li><code>android:maxSdkVersion</code> &mdash; The maximum version
-of the Android platform on which the application is designed to run,
-specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-documentation before using this attribute. </li>
-</ul>
-
-<p>When preparing to install your application, the system checks the value of this
-attribute and compares it to the system version. If the
-<code>android:minSdkVersion</code> value is greater than the system version, the
-system aborts the installation of the application. Similarly, the system
-installs your application only if its <code>android:maxSdkVersion</code>
-is compatible with the platform version.</p>
-
-<p>If you do not specify these attributes in your manifest, the system assumes
-that your application is compatible with all platform versions, with no
-maximum API Level. </p>
-
-<p>To specify a minimum platform version for your application, add a
-<code>&lt;uses-sdk&gt;</code> element as a child of
-<code>&lt;manifest&gt;</code>, then define the
-<code>android:minSdkVersion</code> as an attribute. </p>
-
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-manifest element documentation and the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
diff --git a/docs/html/training/contacts-provider/ContactsList.zip b/docs/html/training/contacts-provider/ContactsList.zip
deleted file mode 100644
index d2a5cfb..0000000
--- a/docs/html/training/contacts-provider/ContactsList.zip
+++ /dev/null
Binary files differ
diff --git a/docs/html/training/implementing-navigation/lateral.jd b/docs/html/training/implementing-navigation/lateral.jd
index 3784372..b314497 100644
--- a/docs/html/training/implementing-navigation/lateral.jd
+++ b/docs/html/training/implementing-navigation/lateral.jd
@@ -1,5 +1,5 @@
 page.title=Creating Swipe Views with Tabs
-page.tags="viewpager","horizontal","paging"
+page.tags="viewpager","horizontal","paging","swipe view"
 
 trainingnavtop=true
 
diff --git a/docs/html/training/multiple-threads/threadsample.zip b/docs/html/training/multiple-threads/threadsample.zip
deleted file mode 100644
index bdc3ccf..0000000
--- a/docs/html/training/multiple-threads/threadsample.zip
+++ /dev/null
Binary files differ
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index 0ff6ae9..512d3b1 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -85,8 +85,8 @@
     }
 
     virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int index) {
-        DEFER_LOGD("%d  replaying DrawingBatch %p, with %d ops (batch id %x, merge id %p)",
-                index, this, mOps.size(), mOps[0]->getBatchId(), mOps[0]->getMergeId());
+        DEFER_LOGD("%d  replaying DrawBatch %p, with %d ops (batch id %x, merge id %p)",
+                index, this, mOps.size(), getBatchId(), getMergeId());
 
         status_t status = DrawGlInfo::kStatusDone;
         DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
@@ -196,10 +196,10 @@
     }
 
     virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int index) {
-        DEFER_LOGD("%d  replaying DrawingBatch %p, with %d ops (batch id %x, merge id %p)",
+        DEFER_LOGD("%d  replaying MergingDrawBatch %p, with %d ops (batch id %x, merge id %p)",
                 index, this, mOps.size(), getBatchId(), getMergeId());
         if (mOps.size() == 1) {
-            return DrawBatch::replay(renderer, dirty, false);
+            return DrawBatch::replay(renderer, dirty, 0);
         }
 
         DrawOp* op = mOps[0];
diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp
index c11741c..d4512a7 100644
--- a/libs/hwui/DisplayList.cpp
+++ b/libs/hwui/DisplayList.cpp
@@ -511,6 +511,10 @@
     for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
         DisplayListOp *op = mDisplayListData->displayListOps[i];
 
+#if DEBUG_DISPLAY_LIST
+        op->output(level + 1);
+#endif
+
         logBuffer.writeCommand(level, op->name());
         handler(op, saveCount, mClipToBounds);
     }
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index a6f9999..6839b18 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -220,6 +220,9 @@
     DrawBoundedOp(float left, float top, float right, float bottom, SkPaint* paint)
             : DrawOp(paint), mLocalBounds(left, top, right, bottom) {}
 
+    DrawBoundedOp(const Rect& localBounds, SkPaint* paint)
+            : DrawOp(paint), mLocalBounds(localBounds) {}
+
     // Calculates bounds as smallest rect encompassing all points
     // NOTE: requires at least 1 vertex, and doesn't account for stroke size (should be handled in
     // subclass' constructor)
@@ -1284,23 +1287,10 @@
 class DrawTextOp : public DrawBoundedOp {
 public:
     DrawTextOp(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float length)
-            : DrawBoundedOp(paint), mText(text), mBytesCount(bytesCount), mCount(count),
-            mX(x), mY(y), mPositions(positions), mLength(length) {
-        // duplicates bounds calculation from OpenGLRenderer::drawText, but doesn't alter mX
-        SkPaint::FontMetrics metrics;
-        paint->getFontMetrics(&metrics, 0.0f);
-        switch (paint->getTextAlign()) {
-        case SkPaint::kCenter_Align:
-            x -= length / 2.0f;
-            break;
-        case SkPaint::kRight_Align:
-            x -= length;
-            break;
-        default:
-            break;
-        }
-        mLocalBounds.set(x, mY + metrics.fTop, x + length, mY + metrics.fBottom);
+            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds)
+            : DrawBoundedOp(bounds, paint), mText(text), mBytesCount(bytesCount), mCount(count),
+            mX(x), mY(y), mPositions(positions), mTotalAdvance(totalAdvance) {
+        mLocalBounds.translate(x,y);
         memset(&mPrecacheTransform.data[0], 0xff, 16 * sizeof(float));
     }
 
@@ -1326,7 +1316,7 @@
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
         return renderer.drawText(mText, mBytesCount, mCount, mX, mY,
-                mPositions, getPaint(renderer), mLength);
+                mPositions, getPaint(renderer), mTotalAdvance, mLocalBounds);
     }
 
     virtual status_t multiDraw(OpenGLRenderer& renderer, Rect& dirty,
@@ -1339,7 +1329,8 @@
 
             DrawTextOp& op = *((DrawTextOp*)ops[i]);
             status |= renderer.drawText(op.mText, op.mBytesCount, op.mCount, op.mX, op.mY,
-                    op.mPositions, op.getPaint(renderer), op.mLength, drawOpMode);
+                    op.mPositions, op.getPaint(renderer), op.mTotalAdvance, op.mLocalBounds,
+                    drawOpMode);
         }
         return status;
     }
@@ -1357,7 +1348,7 @@
     float mX;
     float mY;
     const float* mPositions;
-    float mLength;
+    float mTotalAdvance;
     mat4 mPrecacheTransform;
 };
 
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index bfd4086..6d85a16 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -420,17 +420,16 @@
 
 status_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
         float x, float y, const float* positions, SkPaint* paint,
-        float length, DrawOpMode drawOpMode) {
+        float totalAdvance, const Rect& bounds, DrawOpMode drawOpMode) {
 
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
 
-    if (length < 0.0f) length = paint->measureText(text, bytesCount);
-
     text = refText(text, bytesCount);
     positions = refBuffer<float>(positions, count * 2);
     paint = refPaint(paint);
 
-    DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, x, y, positions, paint, length);
+    DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count,
+            x, y, positions, paint, totalAdvance, bounds);
     addDrawOp(op);
     return DrawGlInfo::kStatusDone;
 }
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index db08921..85d6107 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -121,7 +121,8 @@
     virtual status_t drawPosText(const char* text, int bytesCount, int count,
             const float* positions, SkPaint* paint);
     virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float length, DrawOpMode drawOpMode);
+            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
+            DrawOpMode drawOpMode);
 
     virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
 
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 884c0a7..2465b48 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2850,8 +2850,8 @@
     return fontTransform;
 }
 
-status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
-        float x, float y, const float* positions, SkPaint* paint, float length,
+status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float x, float y,
+        const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
         DrawOpMode drawOpMode) {
 
     if (drawOpMode == kDrawOpMode_Immediate &&
@@ -2859,24 +2859,8 @@
         return DrawGlInfo::kStatusDone;
     }
 
-    if (length < 0.0f) length = paint->measureText(text, bytesCount);
-    switch (paint->getTextAlign()) {
-        case SkPaint::kCenter_Align:
-            x -= length / 2.0f;
-            break;
-        case SkPaint::kRight_Align:
-            x -= length;
-            break;
-        default:
-            break;
-    }
-
-    SkPaint::FontMetrics metrics;
-    paint->getFontMetrics(&metrics, 0.0f);
     if (drawOpMode == kDrawOpMode_Immediate) {
-        if (quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom)) {
-            return DrawGlInfo::kStatusDone;
-        }
+        if (quickReject(bounds)) return DrawGlInfo::kStatusDone;
     } else {
         // merged draw operations don't need scissor, but clip should still be valid
         mCaches.setScissorEnabled(mScissorOptimizationDisabled);
@@ -2927,7 +2911,7 @@
 
     // TODO: Implement better clipping for scaled/rotated text
     const Rect* clip = !pureTranslate ? NULL : mSnapshot->clipRect;
-    Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
+    Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
 
     bool status;
     TextSetupFunctor functor(*this, x, y, pureTranslate, alpha, mode, paint);
@@ -2938,20 +2922,20 @@
         SkPaint paintCopy(*paint);
         paintCopy.setTextAlign(SkPaint::kLeft_Align);
         status = fontRenderer.renderPosText(&paintCopy, clip, text, 0, bytesCount, count, x, y,
-                positions, hasActiveLayer ? &bounds : NULL, &functor, forceFinish);
+                positions, hasActiveLayer ? &layerBounds : NULL, &functor, forceFinish);
     } else {
         status = fontRenderer.renderPosText(paint, clip, text, 0, bytesCount, count, x, y,
-                positions, hasActiveLayer ? &bounds : NULL, &functor, forceFinish);
+                positions, hasActiveLayer ? &layerBounds : NULL, &functor, forceFinish);
     }
 
     if ((status || drawOpMode != kDrawOpMode_Immediate) && hasActiveLayer) {
         if (!pureTranslate) {
-            transform.mapRect(bounds);
+            transform.mapRect(layerBounds);
         }
-        dirtyLayerUnchecked(bounds, getRegion());
+        dirtyLayerUnchecked(layerBounds, getRegion());
     }
 
-    drawTextDecorations(text, bytesCount, length, oldX, oldY, paint);
+    drawTextDecorations(text, bytesCount, totalAdvance, oldX, oldY, paint);
 
     return DrawGlInfo::kStatusDrew;
 }
@@ -3235,17 +3219,12 @@
 #define kStdUnderline_Offset    (1.0f / 9.0f)
 #define kStdUnderline_Thickness (1.0f / 18.0f)
 
-void OpenGLRenderer::drawTextDecorations(const char* text, int bytesCount, float length,
+void OpenGLRenderer::drawTextDecorations(const char* text, int bytesCount, float underlineWidth,
         float x, float y, SkPaint* paint) {
     // Handle underline and strike-through
     uint32_t flags = paint->getFlags();
     if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
         SkPaint paintCopy(*paint);
-        float underlineWidth = length;
-        // If length is > 0.0f, we already measured the text for the text alignment
-        if (length <= 0.0f) {
-            underlineWidth = paintCopy.measureText(text, bytesCount);
-        }
 
         if (CC_LIKELY(underlineWidth > 0.0f)) {
             const float textSize = paintCopy.getTextSize();
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 43535e1..d9ba93a 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -242,6 +242,9 @@
 
     ANDROID_API const Rect& getClipBounds();
     ANDROID_API bool quickReject(float left, float top, float right, float bottom);
+    bool quickReject(const Rect& bounds) {
+        return quickReject(bounds.left, bounds.top, bounds.right, bounds.bottom);
+    }
     bool quickRejectNoScissor(float left, float top, float right, float bottom);
     virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
     virtual bool clipPath(SkPath* path, SkRegion::Op op);
@@ -281,7 +284,7 @@
     virtual status_t drawPosText(const char* text, int bytesCount, int count,
             const float* positions, SkPaint* paint);
     virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float length = -1.0f,
+            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
             DrawOpMode drawOpMode = kDrawOpMode_Immediate);
     virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
 
@@ -825,12 +828,12 @@
      *
      * @param text The text to decor
      * @param bytesCount The number of bytes in the text
-     * @param length The length in pixels of the text, can be <= 0.0f to force a measurement
+     * @param totalAdvance The total advance in pixels, defines underline/strikethrough length
      * @param x The x coordinate where the text will be drawn
      * @param y The y coordinate where the text will be drawn
      * @param paint The paint to draw the text with
      */
-    void drawTextDecorations(const char* text, int bytesCount, float length,
+    void drawTextDecorations(const char* text, int bytesCount, float totalAdvance,
             float x, float y, SkPaint* paint);
 
    /**
diff --git a/location/Android.mk b/location/Android.mk
index 12db2f7..feeb8ce 100644
--- a/location/Android.mk
+++ b/location/Android.mk
@@ -14,6 +14,4 @@
 
 LOCAL_PATH := $(call my-dir)
 
-ifeq ($(TARGET_BUILD_APPS),)
 include $(call all-makefiles-under, $(LOCAL_PATH))
-endif
diff --git a/nfc-extras/Android.mk b/nfc-extras/Android.mk
index 131d898..330e2d4 100644
--- a/nfc-extras/Android.mk
+++ b/nfc-extras/Android.mk
@@ -9,6 +9,3 @@
 LOCAL_MODULE:= com.android.nfc_extras
 
 include $(BUILD_JAVA_LIBRARY)
-
-# put the classes.jar, with full class files instead of classes.dex inside, into the dist directory
-$(call dist-for-goals, droidcore, $(full_classes_jar):com.android.nfc_extras.jar)
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 371f20e..85121fe 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -141,6 +141,10 @@
     // core/res/res/values/config.xml
     static final int LONG_PRESS_HOME_NOTHING = 0;
     static final int LONG_PRESS_HOME_RECENT_SYSTEM_UI = 1;
+    static final int LONG_PRESS_HOME_ASSIST = 2;
+
+    static final int DOUBLE_TAP_HOME_NOTHING = 0;
+    static final int DOUBLE_TAP_HOME_RECENT_SYSTEM_UI = 1;
 
     static final int APPLICATION_MEDIA_SUBLAYER = -2;
     static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
@@ -200,6 +204,7 @@
     WindowManagerFuncs mWindowManagerFuncs;
     PowerManager mPowerManager;
     IStatusBarService mStatusBarService;
+    boolean mPreloadedRecentApps;
     final Object mServiceAquireLock = new Object();
     Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
     SearchManager mSearchManager;
@@ -404,7 +409,8 @@
     boolean mShowingDream;
     boolean mDreamingLockscreen;
     boolean mHomePressed;
-    boolean mHomeLongPressed;
+    boolean mHomeConsumed;
+    boolean mHomeDoubleTapPending;
     Intent mHomeIntent;
     Intent mCarDockIntent;
     Intent mDeskDockIntent;
@@ -437,7 +443,10 @@
     int mOverscanBottom = 0;
 
     // What we do when the user long presses on home
-    private int mLongPressOnHomeBehavior = -1;
+    private int mLongPressOnHomeBehavior;
+
+    // What we do when the user double-taps on home
+    private int mDoubleTapOnHomeBehavior;
 
     // Screenshot trigger states
     // Time to volume and power must be pressed within this interval of each other.
@@ -760,36 +769,35 @@
     }
 
     private void handleLongPressOnHome() {
-        // We can't initialize this in init() since the configuration hasn't been loaded yet.
-        if (mLongPressOnHomeBehavior < 0) {
-            mLongPressOnHomeBehavior
-                    = mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior);
-            if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
-                    mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
-                mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
-            }
-        }
-
         if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
+            mHomeConsumed = true;
             performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
-            sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
 
-            // Eat the longpress so it won't dismiss the recent apps dialog when
-            // the user lets go of the home key
-            mHomeLongPressed = true;
-            try {
-                IStatusBarService statusbar = getStatusBarService();
-                if (statusbar != null) {
-                    statusbar.toggleRecentApps();
-                }
-            } catch (RemoteException e) {
-                Slog.e(TAG, "RemoteException when showing recent apps", e);
-                // re-acquire status bar service next time it is needed.
-                mStatusBarService = null;
+            if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
+                toggleRecentApps();
+            } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_ASSIST) {
+                launchAssistAction();
             }
         }
     }
 
+    private void handleDoubleTapOnHome() {
+        if (mDoubleTapOnHomeBehavior == DOUBLE_TAP_HOME_RECENT_SYSTEM_UI) {
+            mHomeConsumed = true;
+            toggleRecentApps();
+        }
+    }
+
+    private final Runnable mHomeDoubleTapTimeoutRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (mHomeDoubleTapPending) {
+                mHomeDoubleTapPending = false;
+                launchHomeFromHotKey();
+            }
+        }
+    };
+
     /**
      * Create (if necessary) and show or dismiss the recent apps dialog according
      * according to the requested behavior.
@@ -890,6 +898,21 @@
                 com.android.internal.R.integer.config_lidNavigationAccessibility);
         mLidControlsSleep = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_lidControlsSleep);
+
+        mLongPressOnHomeBehavior = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_longPressOnHomeBehavior);
+        if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
+                mLongPressOnHomeBehavior > LONG_PRESS_HOME_ASSIST) {
+            mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
+        }
+
+        mDoubleTapOnHomeBehavior = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_doubleTapOnHomeBehavior);
+        if (mDoubleTapOnHomeBehavior < DOUBLE_TAP_HOME_NOTHING ||
+                mDoubleTapOnHomeBehavior > DOUBLE_TAP_HOME_RECENT_SYSTEM_UI) {
+            mDoubleTapOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
+        }
+
         // register for dock events
         IntentFilter filter = new IntentFilter();
         filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
@@ -1962,48 +1985,44 @@
             // If we have released the home key, and didn't do anything else
             // while it was pressed, then it is time to go home!
             if (!down) {
-                final boolean homeWasLongPressed = mHomeLongPressed;
+                cancelPreloadRecentApps();
+
                 mHomePressed = false;
-                mHomeLongPressed = false;
-                if (!homeWasLongPressed) {
-                    if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
-                        try {
-                            IStatusBarService statusbar = getStatusBarService();
-                            if (statusbar != null) {
-                                statusbar.cancelPreloadRecentApps();
-                            }
-                        } catch (RemoteException e) {
-                            Slog.e(TAG, "RemoteException when showing recent apps", e);
-                            // re-acquire status bar service next time it is needed.
-                            mStatusBarService = null;
-                        }
-                    }
-
-                    mHomePressed = false;
-                    if (!canceled) {
-                        // If an incoming call is ringing, HOME is totally disabled.
-                        // (The user is already on the InCallScreen at this point,
-                        // and his ONLY options are to answer or reject the call.)
-                        boolean incomingRinging = false;
-                        try {
-                            ITelephony telephonyService = getTelephonyService();
-                            if (telephonyService != null) {
-                                incomingRinging = telephonyService.isRinging();
-                            }
-                        } catch (RemoteException ex) {
-                            Log.w(TAG, "RemoteException from getPhoneInterface()", ex);
-                        }
-
-                        if (incomingRinging) {
-                            Log.i(TAG, "Ignoring HOME; there's a ringing incoming call.");
-                        } else {
-                            launchHomeFromHotKey();
-                        }
-                    } else {
-                        Log.i(TAG, "Ignoring HOME; event canceled.");
-                    }
+                if (mHomeConsumed) {
+                    mHomeConsumed = false;
                     return -1;
                 }
+
+                if (canceled) {
+                    Log.i(TAG, "Ignoring HOME; event canceled.");
+                    return -1;
+                }
+
+                // If an incoming call is ringing, HOME is totally disabled.
+                // (The user is already on the InCallScreen at this point,
+                // and his ONLY options are to answer or reject the call.)
+                try {
+                    ITelephony telephonyService = getTelephonyService();
+                    if (telephonyService != null && telephonyService.isRinging()) {
+                        Log.i(TAG, "Ignoring HOME; there's a ringing incoming call.");
+                        return -1;
+                    }
+                } catch (RemoteException ex) {
+                    Log.w(TAG, "RemoteException from getPhoneInterface()", ex);
+                }
+
+                // Delay handling home if a double-tap is possible.
+                if (mDoubleTapOnHomeBehavior != DOUBLE_TAP_HOME_NOTHING) {
+                    mHandler.removeCallbacks(mHomeDoubleTapTimeoutRunnable); // just in case
+                    mHomeDoubleTapPending = true;
+                    mHandler.postDelayed(mHomeDoubleTapTimeoutRunnable,
+                            ViewConfiguration.getDoubleTapTimeout());
+                    return -1;
+                }
+
+                // Go home!
+                launchHomeFromHotKey();
+                return -1;
             }
 
             // If a system window has focus, then it doesn't make sense
@@ -2025,25 +2044,21 @@
                     }
                 }
             }
-            if (down) {
-                if (!mHomePressed && mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
-                    try {
-                        IStatusBarService statusbar = getStatusBarService();
-                        if (statusbar != null) {
-                            statusbar.preloadRecentApps();
-                        }
-                    } catch (RemoteException e) {
-                        Slog.e(TAG, "RemoteException when preloading recent apps", e);
-                        // re-acquire status bar service next time it is needed.
-                        mStatusBarService = null;
-                    }
+
+            // Remember that home is pressed and handle special actions.
+            if (repeatCount == 0) {
+                mHomePressed = true;
+                if (mHomeDoubleTapPending) {
+                    mHomeDoubleTapPending = false;
+                    mHandler.removeCallbacks(mHomeDoubleTapTimeoutRunnable);
+                    handleDoubleTapOnHome();
+                } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI
+                        || mDoubleTapOnHomeBehavior == DOUBLE_TAP_HOME_RECENT_SYSTEM_UI) {
+                    preloadRecentApps();
                 }
-                if (repeatCount == 0) {
-                    mHomePressed = true;
-                } else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
-                    if (!keyguardOn) {
-                        handleLongPressOnHome();
-                    }
+            } else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
+                if (!keyguardOn) {
+                    handleLongPressOnHome();
                 }
             }
             return -1;
@@ -2090,19 +2105,10 @@
             return 0;
         } else if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
             if (!keyguardOn) {
-                try {
-                    IStatusBarService statusbar = getStatusBarService();
-                    if (statusbar != null) {
-                        if (down && repeatCount == 0) {
-                            statusbar.preloadRecentApps();
-                        } else if (!down) {
-                            statusbar.toggleRecentApps();
-                        }
-                    }
-                } catch (RemoteException e) {
-                    Slog.e(TAG, "RemoteException when preloading recent apps", e);
-                    // re-acquire status bar service next time it is needed.
-                    mStatusBarService = null;
+                if (down && repeatCount == 0) {
+                    preloadRecentApps();
+                } else if (!down) {
+                    toggleRecentApps();
                 }
             }
             return -1;
@@ -2405,6 +2411,51 @@
         return mSearchManager;
     }
 
+    private void preloadRecentApps() {
+        mPreloadedRecentApps = true;
+        try {
+            IStatusBarService statusbar = getStatusBarService();
+            if (statusbar != null) {
+                statusbar.preloadRecentApps();
+            }
+        } catch (RemoteException e) {
+            Slog.e(TAG, "RemoteException when preloading recent apps", e);
+            // re-acquire status bar service next time it is needed.
+            mStatusBarService = null;
+        }
+    }
+
+    private void cancelPreloadRecentApps() {
+        if (mPreloadedRecentApps) {
+            mPreloadedRecentApps = false;
+            try {
+                IStatusBarService statusbar = getStatusBarService();
+                if (statusbar != null) {
+                    statusbar.cancelPreloadRecentApps();
+                }
+            } catch (RemoteException e) {
+                Slog.e(TAG, "RemoteException when showing recent apps", e);
+                // re-acquire status bar service next time it is needed.
+                mStatusBarService = null;
+            }
+        }
+    }
+
+    private void toggleRecentApps() {
+        mPreloadedRecentApps = false; // preloading no longer needs to be canceled
+        sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
+        try {
+            IStatusBarService statusbar = getStatusBarService();
+            if (statusbar != null) {
+                statusbar.toggleRecentApps();
+            }
+        } catch (RemoteException e) {
+            Slog.e(TAG, "RemoteException when showing recent apps", e);
+            // re-acquire status bar service next time it is needed.
+            mStatusBarService = null;
+        }
+    }
+
     /**
      * A home key -> launch home action was detected.  Take the appropriate action
      * given the situation with the keyguard.
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 10d7591..c774763 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -2619,6 +2619,18 @@
             info->addMotionRange(AMOTION_EVENT_AXIS_HSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f,
                     0.0f);
         }
+        if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_BOX) {
+            const InputDeviceInfo::MotionRange& x = mOrientedRanges.x;
+            const InputDeviceInfo::MotionRange& y = mOrientedRanges.y;
+            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_1, mSource, x.min, x.max, x.flat,
+                    x.fuzz, x.resolution);
+            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_2, mSource, y.min, y.max, y.flat,
+                    y.fuzz, y.resolution);
+            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_3, mSource, x.min, x.max, x.flat,
+                    x.fuzz, x.resolution);
+            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_4, mSource, y.min, y.max, y.flat,
+                    y.fuzz, y.resolution);
+        }
     }
 }
 
@@ -3448,6 +3460,19 @@
 
     out.haveDistanceScale = in.tryGetProperty(String8("touch.distance.scale"),
             out.distanceScale);
+
+    out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_DEFAULT;
+    String8 coverageCalibrationString;
+    if (in.tryGetProperty(String8("touch.coverage.calibration"), coverageCalibrationString)) {
+        if (coverageCalibrationString == "none") {
+            out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_NONE;
+        } else if (coverageCalibrationString == "box") {
+            out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_BOX;
+        } else if (coverageCalibrationString != "default") {
+            ALOGW("Invalid value for touch.coverage.calibration: '%s'",
+                    coverageCalibrationString.string());
+        }
+    }
 }
 
 void TouchInputMapper::resolveCalibration() {
@@ -3486,6 +3511,11 @@
     } else {
         mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE;
     }
+
+    // Coverage
+    if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_DEFAULT) {
+        mCalibration.coverageCalibration = Calibration::COVERAGE_CALIBRATION_NONE;
+    }
 }
 
 void TouchInputMapper::dumpCalibration(String8& dump) {
@@ -3578,6 +3608,17 @@
         dump.appendFormat(INDENT4 "touch.distance.scale: %0.3f\n",
                 mCalibration.distanceScale);
     }
+
+    switch (mCalibration.coverageCalibration) {
+    case Calibration::COVERAGE_CALIBRATION_NONE:
+        dump.append(INDENT4 "touch.coverage.calibration: none\n");
+        break;
+    case Calibration::COVERAGE_CALIBRATION_BOX:
+        dump.append(INDENT4 "touch.coverage.calibration: box\n");
+        break;
+    default:
+        ALOG_ASSERT(false);
+    }
 }
 
 void TouchInputMapper::reset(nsecs_t when) {
@@ -4185,13 +4226,31 @@
             distance = 0;
         }
 
-        // X and Y
+        // Coverage
+        int32_t rawLeft, rawTop, rawRight, rawBottom;
+        switch (mCalibration.coverageCalibration) {
+        case Calibration::COVERAGE_CALIBRATION_BOX:
+            rawLeft = (in.toolMinor & 0xffff0000) >> 16;
+            rawRight = in.toolMinor & 0x0000ffff;
+            rawBottom = in.toolMajor & 0x0000ffff;
+            rawTop = (in.toolMajor & 0xffff0000) >> 16;
+            break;
+        default:
+            rawLeft = rawTop = rawRight = rawBottom = 0;
+            break;
+        }
+
+        // X, Y, and the bounding box for coverage information
         // Adjust coords for surface orientation.
-        float x, y;
+        float x, y, left, top, right, bottom;
         switch (mSurfaceOrientation) {
         case DISPLAY_ORIENTATION_90:
             x = float(in.y - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
             y = float(mRawPointerAxes.x.maxValue - in.x) * mXScale + mXTranslate;
+            left = float(rawTop - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
+            right = float(rawBottom- mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
+            bottom = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
+            top = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
             orientation -= M_PI_2;
             if (orientation < - M_PI_2) {
                 orientation += M_PI;
@@ -4200,10 +4259,18 @@
         case DISPLAY_ORIENTATION_180:
             x = float(mRawPointerAxes.x.maxValue - in.x) * mXScale + mXTranslate;
             y = float(mRawPointerAxes.y.maxValue - in.y) * mYScale + mYTranslate;
+            left = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
+            right = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
+            bottom = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
+            top = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
             break;
         case DISPLAY_ORIENTATION_270:
             x = float(mRawPointerAxes.y.maxValue - in.y) * mYScale + mYTranslate;
             y = float(in.x - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
+            left = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
+            right = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
+            bottom = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
+            top = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
             orientation += M_PI_2;
             if (orientation > M_PI_2) {
                 orientation -= M_PI;
@@ -4212,6 +4279,10 @@
         default:
             x = float(in.x - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
             y = float(in.y - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
+            left = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
+            right = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
+            bottom = float(rawBottom - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
+            top = float(rawTop - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
             break;
         }
 
@@ -4224,11 +4295,18 @@
         out.setAxisValue(AMOTION_EVENT_AXIS_SIZE, size);
         out.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, touchMajor);
         out.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, touchMinor);
-        out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, toolMajor);
-        out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
         out.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, orientation);
         out.setAxisValue(AMOTION_EVENT_AXIS_TILT, tilt);
         out.setAxisValue(AMOTION_EVENT_AXIS_DISTANCE, distance);
+        if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_BOX) {
+            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_1, left);
+            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_2, top);
+            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_3, right);
+            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_4, bottom);
+        } else {
+            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, toolMajor);
+            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
+        }
 
         // Write output properties.
         PointerProperties& properties = mCurrentCookedPointerData.pointerProperties[i];
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index f87f98e..0189ba7 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -1267,6 +1267,14 @@
         bool haveDistanceScale;
         float distanceScale;
 
+        enum CoverageCalibration {
+            COVERAGE_CALIBRATION_DEFAULT,
+            COVERAGE_CALIBRATION_NONE,
+            COVERAGE_CALIBRATION_BOX,
+        };
+
+        CoverageCalibration coverageCalibration;
+
         inline void applySizeScaleAndBias(float* outSize) const {
             if (haveSizeScale) {
                 *outSize *= sizeScale;
diff --git a/services/input/tests/Android.mk b/services/input/tests/Android.mk
index 211e64b..f3e2dee 100644
--- a/services/input/tests/Android.mk
+++ b/services/input/tests/Android.mk
@@ -40,7 +40,7 @@
     $(eval LOCAL_SRC_FILES := $(file)) \
     $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \
     $(eval LOCAL_MODULE_TAGS := $(module_tags)) \
-    $(eval include $(BUILD_EXECUTABLE)) \
+    $(eval include $(BUILD_NATIVE_TEST)) \
 )
 
 # Build the manual test programs.
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
index a402642..7a107e7 100644
--- a/services/java/com/android/server/AppOpsService.java
+++ b/services/java/com/android/server/AppOpsService.java
@@ -551,6 +551,9 @@
                         pkgUid = mContext.getPackageManager().getPackageUid(packageName,
                                 UserHandle.getUserId(uid));
                     } catch (NameNotFoundException e) {
+                        if ("media".equals(packageName)) {
+                            pkgUid = Process.MEDIA_UID;
+                        }
                     }
                     if (pkgUid != uid) {
                         // Oops!  The package name is not valid for the uid they are calling
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 4348a81..868278b 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -287,13 +287,14 @@
         }
 
         public void record(StatusBarNotification nr) {
-            // Nuke heavy parts of notification before storing in archive
-            nr.getNotification().lightenPayload();
-
             if (mBuffer.size() == BUFFER_SIZE) {
                 mBuffer.removeFirst();
             }
-            mBuffer.addLast(nr);
+
+            // We don't want to store the heavy bits of the notification in the archive,
+            // but other clients in the system process might be using the object, so we
+            // store a (lightened) copy.
+            mBuffer.addLast(nr.cloneLight());
         }
 
 
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 7d7aeec..7c5959d 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -286,7 +286,8 @@
             // only initialize the power service after we have started the
             // lights service, content providers and the battery service.
             power.init(context, lights, ActivityManagerService.self(), battery,
-                    BatteryStatsService.getService(), display);
+                    BatteryStatsService.getService(),
+                    ActivityManagerService.self().getAppOpsService(), display);
 
             Slog.i(TAG, "Alarm Manager");
             alarm = new AlarmManagerService(context);
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 2b5544b..2f8250f 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -95,6 +95,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -405,7 +406,17 @@
         synchronized (mLock) {
             final int resolvedUserId = mSecurityPolicy
                     .resolveCallingUserIdEnforcingPermissionsLocked(userId);
-            return getUserStateLocked(resolvedUserId).mInstalledServices;
+            // The automation service is a fake one and should not be reported
+            // to clients as being installed - it really is not.
+            UserState userState = getUserStateLocked(resolvedUserId);
+            if (userState.mUiAutomationService != null) {
+                List<AccessibilityServiceInfo> installedServices =
+                        new ArrayList<AccessibilityServiceInfo>();
+                installedServices.addAll(userState.mInstalledServices);
+                installedServices.remove(userState.mUiAutomationService);
+                return installedServices;
+            }
+            return userState.mInstalledServices;
         }
     }
 
@@ -415,9 +426,18 @@
         synchronized (mLock) {
             final int resolvedUserId = mSecurityPolicy
                     .resolveCallingUserIdEnforcingPermissionsLocked(userId);
+
+            // The automation service is a fake one and should not be reported
+            // to clients as being enabled. The automation service is always the
+            // only active one, if it exists.
+            UserState userState = getUserStateLocked(resolvedUserId);
+            if (userState.mUiAutomationService != null) {
+                return Collections.emptyList();
+            }
+
             result = mEnabledServicesForFeedbackTempList;
             result.clear();
-            List<Service> services = getUserStateLocked(resolvedUserId).mBoundServices;
+            List<Service> services = userState.mBoundServices;
             while (feedbackType != 0) {
                 final int feedbackTypeBit = (1 << Integer.numberOfTrailingZeros(feedbackType));
                 feedbackType &= ~feedbackTypeBit;
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 89a1715..d1cc6ba 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -28,6 +28,7 @@
 import android.appwidget.AppWidgetManager;
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.app.IAppOpsService;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.internal.os.ProcessStats;
 import com.android.internal.util.FastXmlSerializer;
@@ -1554,6 +1555,10 @@
         return mSelf;
     }
 
+    public IAppOpsService getAppOpsService() {
+        return mAppOpsService;
+    }
+
     static class AThread extends Thread {
         ActivityManagerService mService;
         Looper mLooper;
@@ -6336,7 +6341,6 @@
                     new RuntimeException("here").fillInStackTrace());
         }
         synchronized (this) {
-            mWindowManager.moveTaskToStack(taskId, stackId, toTop);
             mStackSupervisor.moveTaskToStack(taskId, stackId, toTop);
         }
     }
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 0b45bce..a40b13c 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -754,8 +754,7 @@
     boolean continueLaunchTickingLocked() {
         if (launchTickTime != 0) {
             final ActivityStack stack = task.stack;
-            Message msg = stack.mHandler.obtainMessage(ActivityStack.LAUNCH_TICK_MSG);
-            msg.obj = this;
+            Message msg = stack.mHandler.obtainMessage(ActivityStack.LAUNCH_TICK_MSG, this);
             stack.mHandler.removeMessages(ActivityStack.LAUNCH_TICK_MSG);
             stack.mHandler.sendMessageDelayed(msg, ActivityStack.LAUNCH_TICK);
             return true;
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 174cdbe..d6a6eb8 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -50,7 +50,6 @@
 import android.app.AppGlobals;
 import android.app.IActivityController;
 import android.app.IThumbnailReceiver;
-import android.app.IApplicationThread;
 import android.app.ResultInfo;
 import android.app.ActivityManager.RunningTaskInfo;
 import android.content.ComponentName;
@@ -258,8 +257,7 @@
                     Slog.w(TAG, "Activity pause timeout for " + r);
                     synchronized (mService) {
                         if (r.app != null) {
-                            mService.logAppTooSlow(r.app, r.pauseTime,
-                                    "pausing " + r);
+                            mService.logAppTooSlow(r.app, r.pauseTime, "pausing " + r);
                         }
                         activityPausedLocked(r.appToken, true);
                     }
@@ -268,8 +266,7 @@
                     ActivityRecord r = (ActivityRecord)msg.obj;
                     synchronized (mService) {
                         if (r.continueLaunchTickingLocked()) {
-                            mService.logAppTooSlow(r.app, r.launchTickTime,
-                                    "launching " + r);
+                            mService.logAppTooSlow(r.app, r.launchTickTime, "launching " + r);
                         }
                     }
                 } break;
@@ -285,8 +282,7 @@
                 case LAUNCH_TIMEOUT_MSG: {
                     if (mService.mDidDexOpt) {
                         mService.mDidDexOpt = false;
-                        Message nmsg = mHandler.obtainMessage(LAUNCH_TIMEOUT_MSG);
-                        mHandler.sendMessageDelayed(nmsg, LAUNCH_TIMEOUT);
+                        mHandler.sendEmptyMessageDelayed(LAUNCH_TIMEOUT_MSG, LAUNCH_TIMEOUT);
                         return;
                     }
                     synchronized (mService) {
@@ -729,8 +725,7 @@
             mLaunchingActivity.acquire();
             if (!mHandler.hasMessages(LAUNCH_TIMEOUT_MSG)) {
                 // To be safe, don't allow the wake lock to be held for too long.
-                Message msg = mHandler.obtainMessage(LAUNCH_TIMEOUT_MSG);
-                mHandler.sendMessageDelayed(msg, LAUNCH_TIMEOUT);
+                mHandler.sendEmptyMessageDelayed(LAUNCH_TIMEOUT_MSG, LAUNCH_TIMEOUT);
             }
         }
 
@@ -2070,8 +2065,7 @@
                 if (mService.isSleepingOrShuttingDown()) {
                     r.setSleeping(true);
                 }
-                Message msg = mHandler.obtainMessage(STOP_TIMEOUT_MSG);
-                msg.obj = r;
+                Message msg = mHandler.obtainMessage(STOP_TIMEOUT_MSG, r);
                 mHandler.sendMessageDelayed(msg, STOP_TIMEOUT);
             } catch (Exception e) {
                 // Maybe just ignore exceptions here...  if the process
@@ -2662,12 +2656,10 @@
                 if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYING: " + r
                         + " (destroy requested)");
                 r.state = ActivityState.DESTROYING;
-                Message msg = mHandler.obtainMessage(DESTROY_TIMEOUT_MSG);
-                msg.obj = r;
+                Message msg = mHandler.obtainMessage(DESTROY_TIMEOUT_MSG, r);
                 mHandler.sendMessageDelayed(msg, DESTROY_TIMEOUT);
             } else {
-                if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r
-                        + " (destroy skipped)");
+                if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (destroy skipped)");
                 r.state = ActivityState.DESTROYED;
                 if (DEBUG_APP) Slog.v(TAG, "Clearing app during destroy for activity " + r);
                 r.app = null;
@@ -2678,8 +2670,7 @@
                 removeActivityFromHistoryLocked(r);
                 removedFromHistory = true;
             } else {
-                if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r
-                        + " (no app)");
+                if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (no app)");
                 r.state = ActivityState.DESTROYED;
                 if (DEBUG_APP) Slog.v(TAG, "Clearing app during destroy for activity " + r);
                 r.app = null;
@@ -3425,12 +3416,7 @@
         return new ArrayList<TaskRecord>(mTaskHistory);
     }
 
-    void moveTask(int taskId, boolean toTop) {
-        final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
-        if (task == null) {
-            return;
-        }
-        task.stack.mTaskHistory.remove(task);
+    void addTask(final TaskRecord task, final boolean toTop) {
         task.stack = this;
         if (toTop) {
             mTaskHistory.add(task);
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index 136353b..8a7a2fa 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -314,7 +314,12 @@
     }
 
     void removeTask(TaskRecord task) {
+        mWindowManager.removeTask(task.taskId);
         final ActivityStack stack = task.stack;
+        final ActivityRecord r = stack.mResumedActivity;
+        if (r != null && r.task == task) {
+            stack.mResumedActivity = null;
+        }
         if (stack.removeTask(task) && !stack.isHomeStack()) {
             if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing stack " + stack);
             mStacks.remove(stack);
@@ -1893,12 +1898,22 @@
     }
 
     void moveTaskToStack(int taskId, int stackId, boolean toTop) {
+        final TaskRecord task = anyTaskForIdLocked(taskId);
+        if (task == null) {
+            return;
+        }
         final ActivityStack stack = getStack(stackId);
         if (stack == null) {
             Slog.w(TAG, "moveTaskToStack: no stack for id=" + stackId);
             return;
         }
-        stack.moveTask(taskId, toTop);
+        removeTask(task);
+        stack.addTask(task, toTop);
+        if (toTop) {
+            moveHomeStack(stack.isHomeStack());
+            setFocusedStack(task.getTopActivity());
+        }
+        mWindowManager.addTask(taskId, stackId, toTop);
         resumeTopActivitiesLocked();
     }
 
diff --git a/services/java/com/android/server/power/Notifier.java b/services/java/com/android/server/power/Notifier.java
index d99d523..e44cfe5 100644
--- a/services/java/com/android/server/power/Notifier.java
+++ b/services/java/com/android/server/power/Notifier.java
@@ -16,6 +16,8 @@
 
 package com.android.server.power;
 
+import android.app.AppOpsManager;
+import com.android.internal.app.IAppOpsService;
 import com.android.internal.app.IBatteryStats;
 import com.android.server.EventLogTags;
 
@@ -75,6 +77,7 @@
 
     private final Context mContext;
     private final IBatteryStats mBatteryStats;
+    private final IAppOpsService mAppOps;
     private final SuspendBlocker mSuspendBlocker;
     private final ScreenOnBlocker mScreenOnBlocker;
     private final WindowManagerPolicy mPolicy;
@@ -104,10 +107,11 @@
     private boolean mScreenOnBlockerAcquired;
 
     public Notifier(Looper looper, Context context, IBatteryStats batteryStats,
-            SuspendBlocker suspendBlocker, ScreenOnBlocker screenOnBlocker,
+            IAppOpsService appOps, SuspendBlocker suspendBlocker, ScreenOnBlocker screenOnBlocker,
             WindowManagerPolicy policy) {
         mContext = context;
         mBatteryStats = batteryStats;
+        mAppOps = appOps;
         mSuspendBlocker = suspendBlocker;
         mScreenOnBlocker = screenOnBlocker;
         mPolicy = policy;
@@ -124,11 +128,12 @@
     /**
      * Called when a wake lock is acquired.
      */
-    public void onWakeLockAcquired(int flags, String tag, int ownerUid, int ownerPid,
-            WorkSource workSource) {
+    public void onWakeLockAcquired(int flags, String tag, String packageName,
+            int ownerUid, int ownerPid, WorkSource workSource) {
         if (DEBUG) {
             Slog.d(TAG, "onWakeLockAcquired: flags=" + flags + ", tag=\"" + tag
-                    + "\", ownerUid=" + ownerUid + ", ownerPid=" + ownerPid
+                    + "\", packageName=" + packageName
+                    + ", ownerUid=" + ownerUid + ", ownerPid=" + ownerPid
                     + ", workSource=" + workSource);
         }
 
@@ -138,6 +143,8 @@
                 mBatteryStats.noteStartWakelockFromSource(workSource, ownerPid, tag, monitorType);
             } else {
                 mBatteryStats.noteStartWakelock(ownerUid, ownerPid, tag, monitorType);
+                // XXX need to deal with disabled operations.
+                mAppOps.startOperation(AppOpsManager.OP_WAKE_LOCK, ownerUid, packageName);
             }
         } catch (RemoteException ex) {
             // Ignore
@@ -147,11 +154,12 @@
     /**
      * Called when a wake lock is released.
      */
-    public void onWakeLockReleased(int flags, String tag, int ownerUid, int ownerPid,
-            WorkSource workSource) {
+    public void onWakeLockReleased(int flags, String tag, String packageName,
+            int ownerUid, int ownerPid, WorkSource workSource) {
         if (DEBUG) {
             Slog.d(TAG, "onWakeLockReleased: flags=" + flags + ", tag=\"" + tag
-                    + "\", ownerUid=" + ownerUid + ", ownerPid=" + ownerPid
+                    + "\", packageName=" + packageName
+                    + ", ownerUid=" + ownerUid + ", ownerPid=" + ownerPid
                     + ", workSource=" + workSource);
         }
 
@@ -161,6 +169,7 @@
                 mBatteryStats.noteStopWakelockFromSource(workSource, ownerPid, tag, monitorType);
             } else {
                 mBatteryStats.noteStopWakelock(ownerUid, ownerPid, tag, monitorType);
+                mAppOps.finishOperation(AppOpsManager.OP_WAKE_LOCK, ownerUid, packageName);
             }
         } catch (RemoteException ex) {
             // Ignore
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java
index 6c283fa..5c81cde 100644
--- a/services/java/com/android/server/power/PowerManagerService.java
+++ b/services/java/com/android/server/power/PowerManagerService.java
@@ -16,6 +16,7 @@
 
 package com.android.server.power;
 
+import com.android.internal.app.IAppOpsService;
 import com.android.internal.app.IBatteryStats;
 import com.android.server.BatteryService;
 import com.android.server.EventLogTags;
@@ -172,6 +173,7 @@
     private BatteryService mBatteryService;
     private DisplayManagerService mDisplayManagerService;
     private IBatteryStats mBatteryStats;
+    private IAppOpsService mAppOps;
     private HandlerThread mHandlerThread;
     private PowerManagerHandler mHandler;
     private WindowManagerPolicy mPolicy;
@@ -394,11 +396,12 @@
      */
     public void init(Context context, LightsService ls,
             ActivityManagerService am, BatteryService bs, IBatteryStats bss,
-            DisplayManagerService dm) {
+            IAppOpsService appOps, DisplayManagerService dm) {
         mContext = context;
         mLightsService = ls;
         mBatteryService = bs;
         mBatteryStats = bss;
+        mAppOps = appOps;
         mDisplayManagerService = dm;
         mHandlerThread = new HandlerThread(TAG);
         mHandlerThread.start();
@@ -437,7 +440,7 @@
             // The notifier runs on the system server's main looper so as not to interfere
             // with the animations and other critical functions of the power manager.
             mNotifier = new Notifier(Looper.getMainLooper(), mContext, mBatteryStats,
-                    createSuspendBlockerLocked("PowerManagerService.Broadcasts"),
+                    mAppOps, createSuspendBlockerLocked("PowerManagerService.Broadcasts"),
                     mScreenOnBlocker, mPolicy);
 
             // The display power controller runs on the power manager service's
@@ -572,10 +575,14 @@
     }
 
     @Override // Binder call
-    public void acquireWakeLock(IBinder lock, int flags, String tag, WorkSource ws) {
+    public void acquireWakeLock(IBinder lock, int flags, String tag, String packageName,
+            WorkSource ws) {
         if (lock == null) {
             throw new IllegalArgumentException("lock must not be null");
         }
+        if (packageName == null) {
+            throw new IllegalArgumentException("packageName must not be null");
+        }
         PowerManager.validateWakeLockParameters(flags, tag);
 
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
@@ -590,14 +597,14 @@
         final int pid = Binder.getCallingPid();
         final long ident = Binder.clearCallingIdentity();
         try {
-            acquireWakeLockInternal(lock, flags, tag, ws, uid, pid);
+            acquireWakeLockInternal(lock, flags, tag, packageName, ws, uid, pid);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
     }
 
-    private void acquireWakeLockInternal(IBinder lock, int flags, String tag, WorkSource ws,
-            int uid, int pid) {
+    private void acquireWakeLockInternal(IBinder lock, int flags, String tag, String packageName,
+            WorkSource ws, int uid, int pid) {
         synchronized (mLock) {
             if (DEBUG_SPEW) {
                 Slog.d(TAG, "acquireWakeLockInternal: lock=" + Objects.hashCode(lock)
@@ -612,11 +619,11 @@
                 if (!wakeLock.hasSameProperties(flags, tag, ws, uid, pid)) {
                     // Update existing wake lock.  This shouldn't happen but is harmless.
                     notifyWakeLockReleasedLocked(wakeLock);
-                    wakeLock.updateProperties(flags, tag, ws, uid, pid);
+                    wakeLock.updateProperties(flags, tag, packageName, ws, uid, pid);
                     notifyWakeLockAcquiredLocked(wakeLock);
                 }
             } else {
-                wakeLock = new WakeLock(lock, flags, tag, ws, uid, pid);
+                wakeLock = new WakeLock(lock, flags, tag, packageName, ws, uid, pid);
                 try {
                     lock.linkToDeath(wakeLock, 0);
                 } catch (RemoteException ex) {
@@ -785,14 +792,16 @@
 
     private void notifyWakeLockAcquiredLocked(WakeLock wakeLock) {
         if (mSystemReady) {
-            mNotifier.onWakeLockAcquired(wakeLock.mFlags, wakeLock.mTag,
+            wakeLock.mNotifiedAcquired = true;
+            mNotifier.onWakeLockAcquired(wakeLock.mFlags, wakeLock.mTag, wakeLock.mPackageName,
                     wakeLock.mOwnerUid, wakeLock.mOwnerPid, wakeLock.mWorkSource);
         }
     }
 
     private void notifyWakeLockReleasedLocked(WakeLock wakeLock) {
-        if (mSystemReady) {
-            mNotifier.onWakeLockReleased(wakeLock.mFlags, wakeLock.mTag,
+        if (mSystemReady && wakeLock.mNotifiedAcquired) {
+            wakeLock.mNotifiedAcquired = false;
+            mNotifier.onWakeLockReleased(wakeLock.mFlags, wakeLock.mTag, wakeLock.mPackageName,
                     wakeLock.mOwnerUid, wakeLock.mOwnerPid, wakeLock.mWorkSource);
         }
     }
@@ -2428,15 +2437,18 @@
         public final IBinder mLock;
         public int mFlags;
         public String mTag;
+        public final String mPackageName;
         public WorkSource mWorkSource;
-        public int mOwnerUid;
-        public int mOwnerPid;
+        public final int mOwnerUid;
+        public final int mOwnerPid;
+        public boolean mNotifiedAcquired;
 
-        public WakeLock(IBinder lock, int flags, String tag, WorkSource workSource,
-                int ownerUid, int ownerPid) {
+        public WakeLock(IBinder lock, int flags, String tag, String packageName,
+                WorkSource workSource, int ownerUid, int ownerPid) {
             mLock = lock;
             mFlags = flags;
             mTag = tag;
+            mPackageName = packageName;
             mWorkSource = copyWorkSource(workSource);
             mOwnerUid = ownerUid;
             mOwnerPid = ownerPid;
@@ -2456,13 +2468,23 @@
                     && mOwnerPid == ownerPid;
         }
 
-        public void updateProperties(int flags, String tag, WorkSource workSource,
-                int ownerUid, int ownerPid) {
+        public void updateProperties(int flags, String tag, String packageName,
+                WorkSource workSource, int ownerUid, int ownerPid) {
+            if (!mPackageName.equals(packageName)) {
+                throw new IllegalStateException("Existing wake lock package name changed: "
+                        + mPackageName + " to " + packageName);
+            }
+            if (mOwnerUid != ownerUid) {
+                throw new IllegalStateException("Existing wake lock uid changed: "
+                        + mOwnerUid + " to " + ownerUid);
+            }
+            if (mOwnerPid != ownerPid) {
+                throw new IllegalStateException("Existing wake lock pid changed: "
+                        + mOwnerPid + " to " + ownerPid);
+            }
             mFlags = flags;
             mTag = tag;
             updateWorkSource(workSource);
-            mOwnerUid = ownerUid;
-            mOwnerPid = ownerPid;
         }
 
         public boolean hasSameWorkSource(WorkSource workSource) {
diff --git a/services/java/com/android/server/wifi/WifiController.java b/services/java/com/android/server/wifi/WifiController.java
index 8e2bdaa..228fabf 100644
--- a/services/java/com/android/server/wifi/WifiController.java
+++ b/services/java/com/android/server/wifi/WifiController.java
@@ -78,6 +78,10 @@
      */
     private static final long DEFAULT_REENABLE_DELAY_MS = 500;
 
+    // finding that delayed messages can sometimes be delivered earlier than expected
+    // probably rounding errors..  add a margin to prevent problems
+    private static final long DEFER_MARGIN_MS = 5;
+
     NetworkInfo mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0, "WIFI", "");
 
     private static final String ACTION_DEVICE_IDLE =
@@ -437,7 +441,7 @@
             Message deferredMsg = obtainMessage(CMD_DEFERRED_TOGGLE);
             deferredMsg.obj = Message.obtain(msg);
             deferredMsg.arg1 = ++mDeferredEnableSerialNumber;
-            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar);
+            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar + DEFER_MARGIN_MS);
             return true;
         }
 
@@ -561,7 +565,7 @@
             Message deferredMsg = obtainMessage(CMD_DEFERRED_TOGGLE);
             deferredMsg.obj = Message.obtain(msg);
             deferredMsg.arg1 = ++mDeferredEnableSerialNumber;
-            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar);
+            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar + DEFER_MARGIN_MS);
             return true;
         }
 
diff --git a/services/java/com/android/server/wifi/WifiNotificationController.java b/services/java/com/android/server/wifi/WifiNotificationController.java
index 17ef7c8..a9206e0 100644
--- a/services/java/com/android/server/wifi/WifiNotificationController.java
+++ b/services/java/com/android/server/wifi/WifiNotificationController.java
@@ -91,10 +91,12 @@
     private final Context mContext;
     private final WifiStateMachine mWifiStateMachine;
     private NetworkInfo mNetworkInfo;
+    private volatile int mWifiState;
 
     WifiNotificationController(Context context, WifiStateMachine wsm) {
         mContext = context;
         mWifiStateMachine = wsm;
+        mWifiState = WifiManager.WIFI_STATE_UNKNOWN;
 
         IntentFilter filter = new IntentFilter();
         filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
@@ -106,6 +108,8 @@
                     @Override
                     public void onReceive(Context context, Intent intent) {
                         if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
+                            mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+                                    WifiManager.WIFI_STATE_UNKNOWN);
                             resetNotification();
                         } else if (intent.getAction().equals(
                                 WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
@@ -141,6 +145,7 @@
         // don't bother doing any of the following
         if (!mNotificationEnabled) return;
         if (networkInfo == null) return;
+        if (mWifiState != WifiManager.WIFI_STATE_ENABLED) return;
 
         NetworkInfo.State state = networkInfo.getState();
         if ((state == NetworkInfo.State.DISCONNECTED)
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java
index af7db96..0dbcfb8 100644
--- a/services/java/com/android/server/wm/DisplayContent.java
+++ b/services/java/com/android/server/wm/DisplayContent.java
@@ -309,10 +309,12 @@
      * Propagate the new bounds to all child stack boxes, applying weights as we move down.
      * @param contentRect The bounds to apply at the top level.
      */
-    void setStackBoxSize(Rect contentRect) {
+    boolean setStackBoxSize(Rect contentRect) {
+        boolean change = false;
         for (int stackBoxNdx = mStackBoxes.size() - 1; stackBoxNdx >= 0; --stackBoxNdx) {
-            mStackBoxes.get(stackBoxNdx).setStackBoxSizes(contentRect);
+            change |= mStackBoxes.get(stackBoxNdx).setStackBoxSizes(contentRect);
         }
+        return change;
     }
 
     Rect getStackBounds(int stackId) {
diff --git a/services/java/com/android/server/wm/StackBox.java b/services/java/com/android/server/wm/StackBox.java
index 2b43b40..3bd1d4c 100644
--- a/services/java/com/android/server/wm/StackBox.java
+++ b/services/java/com/android/server/wm/StackBox.java
@@ -274,8 +274,10 @@
         boolean change;
         if (mStack != null) {
             change = !mBounds.equals(bounds);
-            mBounds.set(bounds);
-            mStack.setBounds(bounds);
+            if (change) {
+                mBounds.set(bounds);
+                mStack.setBounds(bounds);
+            }
         } else {
             mTmpRect.set(bounds);
             if (mVertical) {
diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java
index 50d23a1..6fd8745 100644
--- a/services/java/com/android/server/wm/TaskStack.java
+++ b/services/java/com/android/server/wm/TaskStack.java
@@ -225,6 +225,20 @@
     void setBounds(Rect bounds) {
         mDimLayer.setBounds(bounds);
         mAnimationBackgroundSurface.setBounds(bounds);
+
+        final ArrayList<WindowState> resizingWindows = mService.mResizingWindows;
+        for (int taskNdx = mTasks.size() - 1; taskNdx >= 0; --taskNdx) {
+            final ArrayList<AppWindowToken> activities = mTasks.get(taskNdx).mAppTokens;
+            for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
+                final ArrayList<WindowState> windows = activities.get(activityNdx).allAppWindows;
+                for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) {
+                    final WindowState win = windows.get(winNdx);
+                    if (!resizingWindows.contains(win)) {
+                        resizingWindows.add(win);
+                    }
+                }
+            }
+        }
     }
 
     public void dump(String prefix, PrintWriter pw) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index a6713a2..3ebe083 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -579,22 +579,6 @@
     }
     final LayoutFields mInnerFields = new LayoutFields();
 
-    static class AppWindowAnimParams {
-        AppWindowAnimator mAppAnimator;
-        ArrayList<WindowStateAnimator> mWinAnimators;
-
-        public AppWindowAnimParams(final AppWindowAnimator appAnimator) {
-            mAppAnimator = appAnimator;
-
-            final AppWindowToken atoken = appAnimator.mAppToken;
-            mWinAnimators = new ArrayList<WindowStateAnimator>();
-            final int N = atoken.allAppWindows.size();
-            for (int i = 0; i < N; i++) {
-                mWinAnimators.add(atoken.allAppWindows.get(i).mWinAnimator);
-            }
-        }
-    }
-
     boolean mAnimationScheduled;
 
     /** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this
@@ -4831,6 +4815,7 @@
                     displayContent.createStack(this, stackId, relativeStackId, position, weight);
             mStackIdToStack.put(stackId, stack);
             displayContent.moveStack(stack, true);
+            performLayoutAndPlaceSurfacesLocked();
         }
     }
 
@@ -4841,7 +4826,7 @@
                 mStackIdToStack.delete(stackId);
                 int nextStackId = stack.remove();
                 stack.getDisplayContent().layoutNeeded = true;
-                performLayoutAndPlaceSurfacesLocked();
+                requestTraversalLocked();
                 return nextStackId;
             }
             if (DEBUG_STACK) Slog.i(TAG, "removeStack: could not find stackId=" + stackId);
@@ -4849,18 +4834,31 @@
         return HOME_STACK_ID;
     }
 
-    public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
+    public void removeTask(int taskId) {
         synchronized (mWindowMap) {
             Task task = mTaskIdToTask.get(taskId);
             if (task == null) {
                 return;
             }
-            task.mStack.removeTask(task);
+            final TaskStack stack = task.mStack;
+            stack.removeTask(task);
+            stack.getDisplayContent().layoutNeeded = true;
+        }
+    }
 
+    public void addTask(int taskId, int stackId, boolean toTop) {
+        synchronized (mWindowMap) {
+            Task task = mTaskIdToTask.get(taskId);
+            if (task == null) {
+                return;
+            }
             TaskStack stack = mStackIdToStack.get(stackId);
             stack.addTask(task, toTop);
-            stack.getDisplayContent().layoutNeeded = true;
-
+            final DisplayContent displayContent = stack.getDisplayContent();
+            if (toTop) {
+                displayContent.moveHomeStackBox(stack.isHomeStack());
+            }
+            displayContent.layoutNeeded = true;
             performLayoutAndPlaceSurfacesLocked();
         }
     }
@@ -4872,7 +4870,6 @@
                     STACK_WEIGHT_MAX + ", weight=" + weight);
         }
         synchronized (mWindowMap) {
-            Task task = null;
             DisplayContentsIterator iterator = new DisplayContentsIterator();
             while (iterator.hasNext()) {
                 if (iterator.next().resizeStack(stackId, weight)) {
@@ -5658,6 +5655,7 @@
         frame.scale(scale);
         Matrix matrix = new Matrix();
         ScreenRotationAnimation.createRotationMatrix(rot, dw, dh, matrix);
+        // TODO: Test for RTL vs. LTR and use frame.right-width instead of -frame.left
         matrix.postTranslate(-FloatMath.ceil(frame.left), -FloatMath.ceil(frame.top));
         Canvas canvas = new Canvas(bm);
         canvas.drawColor(0xFF000000);
@@ -9631,6 +9629,16 @@
             // change message pending.
             mH.removeMessages(H.REPORT_FOCUS_CHANGE);
             mH.sendEmptyMessage(H.REPORT_FOCUS_CHANGE);
+            // TODO(multidisplay): Focused windows on default display only.
+            final DisplayContent displayContent = getDefaultDisplayContentLocked();
+            final boolean imWindowChanged = moveInputMethodWindowsIfNeededLocked(
+                    mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS
+                            && mode != UPDATE_FOCUS_WILL_PLACE_SURFACES);
+            if (imWindowChanged) {
+                displayContent.layoutNeeded = true;
+                newFocus = computeFocusedWindowLocked();
+            }
+
             if (localLOGV) Slog.v(
                 TAG, "Changing focus from " + mCurrentFocus + " to " + newFocus);
             final WindowState oldFocus = mCurrentFocus;
@@ -9638,16 +9646,8 @@
             mLosingFocus.remove(newFocus);
             int focusChanged = mPolicy.focusChangedLw(oldFocus, newFocus);
 
-            // TODO(multidisplay): Focused windows on default display only.
-            final DisplayContent displayContent = getDefaultDisplayContentLocked();
-
-            final WindowState imWindow = mInputMethodWindow;
-            if (newFocus != imWindow && oldFocus != imWindow) {
-                if (moveInputMethodWindowsIfNeededLocked(
-                        mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS &&
-                        mode != UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
-                    displayContent.layoutNeeded = true;
-                }
+            if (imWindowChanged && oldFocus != mInputMethodWindow) {
+                // Focus of the input method window changed. Perform layout if needed.
                 if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
                     performLayoutLockedInner(displayContent, true /*initial*/, updateInputWindows);
                     focusChanged &= ~WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 116ed8c..377e8e8 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -16,6 +16,9 @@
 
 package com.android.server.wm;
 
+import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT;
+
 import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
@@ -57,12 +60,6 @@
 import java.util.ArrayList;
 
 class WindowList extends ArrayList<WindowState> {
-    WindowList() {
-        super();
-    }
-    WindowList(WindowList windows) {
-        super(windows);
-    }
 }
 
 /**
@@ -71,11 +68,6 @@
 final class WindowState implements WindowManagerPolicy.WindowState {
     static final String TAG = "WindowState";
 
-    static final boolean DEBUG_VISIBILITY = WindowManagerService.DEBUG_VISIBILITY;
-    static final boolean SHOW_TRANSACTIONS = WindowManagerService.SHOW_TRANSACTIONS;
-    static final boolean SHOW_LIGHT_TRANSACTIONS = WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
-    static final boolean SHOW_SURFACE_ALLOC = WindowManagerService.SHOW_SURFACE_ALLOC;
-
     final WindowManagerService mService;
     final WindowManagerPolicy mPolicy;
     final Context mContext;
@@ -440,7 +432,6 @@
     public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf) {
         mHaveFrame = true;
 
-        final int type = mAttrs.type;
         if (mAppToken != null) {
             mContainingFrame.set(getStackBounds());
         } else {
@@ -572,17 +563,13 @@
                     false);
         }
 
-        if (WindowManagerService.localLOGV) {
-            //if ("com.google.android.youtube".equals(mAttrs.packageName)
-            //        && mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) {
-                Slog.v(TAG, "Resolving (mRequestedWidth="
-                        + mRequestedWidth + ", mRequestedheight="
-                        + mRequestedHeight + ") to" + " (pw=" + pw + ", ph=" + ph
-                        + "): frame=" + mFrame.toShortString()
-                        + " ci=" + mContentInsets.toShortString()
-                        + " vi=" + mVisibleInsets.toShortString());
-            //}
-        }
+        if (DEBUG_LAYOUT || WindowManagerService.localLOGV) Slog.v(TAG,
+                "Resolving (mRequestedWidth="
+                + mRequestedWidth + ", mRequestedheight="
+                + mRequestedHeight + ") to" + " (pw=" + pw + ", ph=" + ph
+                + "): frame=" + mFrame.toShortString()
+                + " ci=" + mContentInsets.toShortString()
+                + " vi=" + mVisibleInsets.toShortString());
     }
 
     @Override
@@ -964,12 +951,6 @@
         return configChanged;
     }
 
-    boolean isConfigDiff(int mask) {
-        return mConfiguration != mService.mCurConfiguration
-                && mConfiguration != null
-                && (mConfiguration.diff(mService.mCurConfiguration) & mask) != 0;
-    }
-
     void removeLocked() {
         disposeInputChannel();
 
@@ -1022,7 +1003,7 @@
                     Slog.i(TAG, "WIN DEATH: " + win);
                     if (win != null) {
                         mService.removeWindowLocked(mSession, win);
-                    } else if (WindowState.this.mHasSurface) {
+                    } else if (mHasSurface) {
                         Slog.e(TAG, "!!! LEAK !!! Window removed but surface still valid.");
                         mService.removeWindowLocked(mSession, WindowState.this);
                     }
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 8bf7788..a52d85c 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -3,6 +3,16 @@
 package com.android.server.wm;
 
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerService.DEBUG_LAYERS;
+import static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerService.DEBUG_STARTING_WINDOW;
+import static com.android.server.wm.WindowManagerService.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerService.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerService.localLOGV;
 import static com.android.server.wm.WindowManagerService.LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE;
 import static com.android.server.wm.WindowManagerService.LayoutFields.SET_TURN_ON_SCREEN;
 
@@ -34,30 +44,12 @@
 import java.util.ArrayList;
 
 class WinAnimatorList extends ArrayList<WindowStateAnimator> {
-    public WinAnimatorList() {
-        super();
-    }
-
-    public WinAnimatorList(WinAnimatorList other) {
-        super(other);
-    }
 }
 
 /**
  * Keep track of animations and surface operations for a single WindowState.
  **/
 class WindowStateAnimator {
-    static final boolean DEBUG_VISIBILITY = WindowManagerService.DEBUG_VISIBILITY;
-    static final boolean DEBUG_ANIM = WindowManagerService.DEBUG_ANIM;
-    static final boolean DEBUG_LAYERS = WindowManagerService.DEBUG_LAYERS;
-    static final boolean DEBUG_STARTING_WINDOW = WindowManagerService.DEBUG_STARTING_WINDOW;
-    static final boolean SHOW_TRANSACTIONS = WindowManagerService.SHOW_TRANSACTIONS;
-    static final boolean SHOW_LIGHT_TRANSACTIONS = WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
-    static final boolean SHOW_SURFACE_ALLOC = WindowManagerService.SHOW_SURFACE_ALLOC;
-    static final boolean localLOGV = WindowManagerService.localLOGV;
-    static final boolean DEBUG_ORIENTATION = WindowManagerService.DEBUG_ORIENTATION;
-    static final boolean DEBUG_SURFACE_TRACE = WindowManagerService.DEBUG_SURFACE_TRACE;
-
     static final String TAG = "WindowStateAnimator";
 
     // Unchanging local convenience fields.
@@ -339,7 +331,7 @@
         mHasTransformation = false;
         mHasLocalTransformation = false;
         if (mWin.mPolicyVisibility != mWin.mPolicyVisibilityAfterAnim) {
-            if (WindowState.DEBUG_VISIBILITY) {
+            if (DEBUG_VISIBILITY) {
                 Slog.v(TAG, "Policy visibility changing after anim in " + this + ": "
                         + mWin.mPolicyVisibilityAfterAnim);
             }
@@ -406,7 +398,7 @@
         if (mSurfaceControl != null) {
             mService.mDestroySurface.add(mWin);
             mWin.mDestroying = true;
-            if (WindowState.SHOW_TRANSACTIONS) WindowManagerService.logSurface(
+            if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(
                 mWin, "HIDE (finishExit)", null);
             hide();
         }
@@ -647,7 +639,7 @@
             if ((attrs.flags&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
                 flags |= SurfaceControl.SECURE;
             }
-            if (WindowState.DEBUG_VISIBILITY) Slog.v(
+            if (DEBUG_VISIBILITY) Slog.v(
                 TAG, "Creating surface in session "
                 + mSession.mSurfaceSession + " window " + this
                 + " w=" + mWin.mCompatFrame.width()
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 1ccbc40..6fd5acc 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -39,7 +39,7 @@
     }
 
     @Override
-    public void acquireWakeLock(IBinder arg0, int arg1, String arg2, WorkSource arg3)
+    public void acquireWakeLock(IBinder arg0, int arg1, String arg2, String arg2_5, WorkSource arg3)
             throws RemoteException {
         // pass for now.
     }