diff --git a/api/current.txt b/api/current.txt
index f59928d..de3d2e1 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -12255,7 +12255,6 @@
     method public android.graphics.drawable.Drawable getCurrent();
     method public android.graphics.Rect getDirtyBounds();
     method public boolean getDither();
-    method public boolean getFilterBitmap();
     method public void getHotspotBounds(android.graphics.Rect);
     method public int getIntrinsicHeight();
     method public int getIntrinsicWidth();
@@ -12272,12 +12271,13 @@
     method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public void invalidateSelf();
     method public boolean isAutoMirrored();
+    method public boolean isFilterBitmap();
     method public boolean isStateful();
     method public final boolean isVisible();
     method public void jumpToCurrentState();
     method public android.graphics.drawable.Drawable mutate();
     method protected void onBoundsChange(android.graphics.Rect);
-    method public boolean onLayoutDirectionChange(int);
+    method public boolean onLayoutDirectionChanged(int);
     method protected boolean onLevelChange(int);
     method protected boolean onStateChange(int[]);
     method public static int resolveOpacity(int, int);
@@ -15910,6 +15910,7 @@
     field public static final java.lang.String MIMETYPE_AUDIO_AC3 = "audio/ac3";
     field public static final java.lang.String MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
     field public static final java.lang.String MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb";
+    field public static final java.lang.String MIMETYPE_AUDIO_EAC3 = "audio/eac3";
     field public static final java.lang.String MIMETYPE_AUDIO_FLAC = "audio/flac";
     field public static final java.lang.String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw";
     field public static final java.lang.String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw";
@@ -29028,6 +29029,7 @@
     method public void bufferReceived(byte[]) throws android.os.RemoteException;
     method public void endOfSpeech() throws android.os.RemoteException;
     method public void error(int) throws android.os.RemoteException;
+    method public int getCallingUid();
     method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
     method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
     method public void results(android.os.Bundle) throws android.os.RemoteException;
diff --git a/api/system-current.txt b/api/system-current.txt
index 3e6a6c1..e5f8396 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -12562,7 +12562,6 @@
     method public android.graphics.drawable.Drawable getCurrent();
     method public android.graphics.Rect getDirtyBounds();
     method public boolean getDither();
-    method public boolean getFilterBitmap();
     method public void getHotspotBounds(android.graphics.Rect);
     method public int getIntrinsicHeight();
     method public int getIntrinsicWidth();
@@ -12579,12 +12578,13 @@
     method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public void invalidateSelf();
     method public boolean isAutoMirrored();
+    method public boolean isFilterBitmap();
     method public boolean isStateful();
     method public final boolean isVisible();
     method public void jumpToCurrentState();
     method public android.graphics.drawable.Drawable mutate();
     method protected void onBoundsChange(android.graphics.Rect);
-    method public boolean onLayoutDirectionChange(int);
+    method public boolean onLayoutDirectionChanged(int);
     method protected boolean onLevelChange(int);
     method protected boolean onStateChange(int[]);
     method public static int resolveOpacity(int, int);
@@ -17146,6 +17146,7 @@
     field public static final java.lang.String MIMETYPE_AUDIO_AC3 = "audio/ac3";
     field public static final java.lang.String MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
     field public static final java.lang.String MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb";
+    field public static final java.lang.String MIMETYPE_AUDIO_EAC3 = "audio/eac3";
     field public static final java.lang.String MIMETYPE_AUDIO_FLAC = "audio/flac";
     field public static final java.lang.String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw";
     field public static final java.lang.String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw";
@@ -31154,6 +31155,7 @@
     method public void bufferReceived(byte[]) throws android.os.RemoteException;
     method public void endOfSpeech() throws android.os.RemoteException;
     method public void error(int) throws android.os.RemoteException;
+    method public int getCallingUid();
     method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
     method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
     method public void results(android.os.Bundle) throws android.os.RemoteException;
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 1fca920..f0c3f2d 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -181,7 +181,26 @@
      *         not be coerced to a string.
      * @throws RuntimeException if the TypedArray has already been recycled.
      */
+    @Nullable
     public String getString(int index) {
+        return getString(index, true);
+    }
+
+    /**
+     * Returns a string representation of the value at the given index,
+     * optionally throwing a resource mismatch strict mode violation if the
+     * value must be coerced to a string.
+     *
+     * @param index the index of the attribute to retrieve
+     * @param strict {@code true} to throw a strict mode violation for string
+     *               coercion, {@code false} otherwise
+     * @return a string representation of the value at the given index, or
+     *         {@code null} if the resource could not be coerced to a string
+     * @see StrictMode#noteResourceMismatch(Object)
+     * @hide Used internally for view attribute inspection.
+     */
+    @Nullable
+    public String getString(int index, boolean strict) {
         if (mRecycled) {
             throw new RuntimeException("Cannot make calls to a recycled instance!");
         }
@@ -197,7 +216,9 @@
 
         final TypedValue v = mValue;
         if (getValueAt(index, v)) {
-            StrictMode.noteResourceMismatch(v);
+            if (strict) {
+                StrictMode.noteResourceMismatch(v);
+            }
             final CharSequence cs = v.coerceToString();
             return cs != null ? cs.toString() : null;
         }
diff --git a/core/java/android/service/gatekeeper/GateKeeperResponse.aidl b/core/java/android/service/gatekeeper/GateKeeperResponse.aidl
new file mode 100644
index 0000000..966606e
--- /dev/null
+++ b/core/java/android/service/gatekeeper/GateKeeperResponse.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.service.gatekeeper;
+
+/**
+ * Response object for a GateKeeper verification request.
+ * @hide
+ */
+parcelable GateKeeperResponse;
+
diff --git a/core/java/android/service/gatekeeper/GateKeeperResponse.java b/core/java/android/service/gatekeeper/GateKeeperResponse.java
new file mode 100644
index 0000000..a512957
--- /dev/null
+++ b/core/java/android/service/gatekeeper/GateKeeperResponse.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.service.gatekeeper;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Response object for a GateKeeper verification request.
+ * @hide
+ */
+public final class GateKeeperResponse implements Parcelable {
+
+    public static final int RESPONSE_ERROR = -1;
+    public static final int RESPONSE_OK = 0;
+    public static final int RESPONSE_RETRY = 1;
+
+    private final int mResponseCode;
+
+    private int mTimeout;
+    private byte[] mPayload;
+    private boolean mShouldReEnroll;
+
+    private GateKeeperResponse(int responseCode) {
+        mResponseCode = responseCode;
+    }
+
+    private GateKeeperResponse(int responseCode, int timeout) {
+        mResponseCode = responseCode;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Parcelable.Creator<GateKeeperResponse> CREATOR
+            = new Parcelable.Creator<GateKeeperResponse>() {
+        @Override
+        public GateKeeperResponse createFromParcel(Parcel source) {
+            int responseCode = source.readInt();
+            GateKeeperResponse response = new GateKeeperResponse(responseCode);
+            if (responseCode == RESPONSE_RETRY) {
+                response.setTimeout(source.readInt());
+            } else if (responseCode == RESPONSE_OK) {
+                response.setShouldReEnroll(source.readInt() == 1);
+                int size = source.readInt();
+                if (size > 0) {
+                    byte[] payload = new byte[size];
+                    source.readByteArray(payload);
+                    response.setPayload(payload);
+                }
+            }
+            return response;
+        }
+
+        @Override
+        public GateKeeperResponse[] newArray(int size) {
+            return new GateKeeperResponse[size];
+        }
+
+    };
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mResponseCode);
+        if (mResponseCode == RESPONSE_RETRY) {
+            dest.writeInt(mTimeout);
+        } else if (mResponseCode == RESPONSE_OK) {
+            dest.writeInt(mShouldReEnroll ? 1 : 0);
+            if (mPayload != null) {
+                dest.writeInt(mPayload.length);
+                dest.writeByteArray(mPayload);
+            }
+        }
+    }
+
+    public byte[] getPayload() {
+        return mPayload;
+    }
+
+    public int getTimeout() {
+        return mTimeout;
+    }
+
+    public boolean getShouldReEnroll() {
+        return mShouldReEnroll;
+    }
+
+    public int getResponseCode() {
+        return mResponseCode;
+    }
+
+    private void setTimeout(int timeout) {
+        mTimeout = timeout;
+    }
+
+    private void setShouldReEnroll(boolean shouldReEnroll) {
+        mShouldReEnroll = shouldReEnroll;
+    }
+
+    private void setPayload(byte[] payload) {
+        mPayload = payload;
+    }
+
+}
diff --git a/core/java/android/service/gatekeeper/IGateKeeperService.aidl b/core/java/android/service/gatekeeper/IGateKeeperService.aidl
index 4f46701..6db2110 100644
--- a/core/java/android/service/gatekeeper/IGateKeeperService.aidl
+++ b/core/java/android/service/gatekeeper/IGateKeeperService.aidl
@@ -16,6 +16,8 @@
 
 package android.service.gatekeeper;
 
+import android.service.gatekeeper.GateKeeperResponse;
+
 /**
  * Interface for communication with GateKeeper, the
  * secure password storage daemon.
@@ -34,9 +36,9 @@
      *                        If provided, must verify against the currentPasswordHandle.
      * @param desiredPassword The new desired password, for which a handle will be returned
      *                        upon success.
-     * @return the handle corresponding to desiredPassword, or null
+     * @return an EnrollResponse or null on failure
      */
-    byte[] enroll(int uid, in byte[] currentPasswordHandle, in byte[] currentPassword,
+    GateKeeperResponse enroll(int uid, in byte[] currentPasswordHandle, in byte[] currentPassword,
             in byte[] desiredPassword);
 
     /**
@@ -45,10 +47,10 @@
      * @param enrolledPasswordHandle The handle against which the provided password will be
      *                               verified.
      * @param The plaintext blob to verify against enrolledPassword.
-     * @return True if the authentication was successful
+     * @return a VerifyResponse, or null on failure.
      */
-    boolean verify(int uid, in byte[] enrolledPasswordHandle,
-            in byte[] providedPassword);
+    GateKeeperResponse verify(int uid, in byte[] enrolledPasswordHandle, in byte[] providedPassword);
+
     /**
      * Verifies an enrolled handle against a provided, plaintext blob.
      * @param uid The Android user ID associated to this enrollment
@@ -58,9 +60,9 @@
      * @param enrolledPasswordHandle The handle against which the provided password will be
      *                               verified.
      * @param The plaintext blob to verify against enrolledPassword.
-     * @return an opaque attestation of authentication on success, or null.
+     * @return a VerifyResponse with an attestation, or null on failure.
      */
-    byte[] verifyChallenge(int uid, long challenge, in byte[] enrolledPasswordHandle,
+    GateKeeperResponse verifyChallenge(int uid, long challenge, in byte[] enrolledPasswordHandle,
             in byte[] providedPassword);
 
     /**
diff --git a/core/java/android/speech/RecognitionService.java b/core/java/android/speech/RecognitionService.java
index dcdbba78..3e74d22 100644
--- a/core/java/android/speech/RecognitionService.java
+++ b/core/java/android/speech/RecognitionService.java
@@ -21,6 +21,7 @@
 import android.app.Service;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -78,7 +79,7 @@
             switch (msg.what) {
                 case MSG_START_LISTENING:
                     StartListeningArgs args = (StartListeningArgs) msg.obj;
-                    dispatchStartListening(args.mIntent, args.mListener);
+                    dispatchStartListening(args.mIntent, args.mListener, args.mCallingUid);
                     break;
                 case MSG_STOP_LISTENING:
                     dispatchStopListening((IRecognitionListener) msg.obj);
@@ -93,7 +94,8 @@
         }
     };
 
-    private void dispatchStartListening(Intent intent, final IRecognitionListener listener) {
+    private void dispatchStartListening(Intent intent, final IRecognitionListener listener,
+            int callingUid) {
         if (mCurrentCallback == null) {
             if (DBG) Log.d(TAG, "created new mCurrentCallback, listener = " + listener.asBinder());
             try {
@@ -107,7 +109,7 @@
                 Log.e(TAG, "dead listener on startListening");
                 return;
             }
-            mCurrentCallback = new Callback(listener);
+            mCurrentCallback = new Callback(listener, callingUid);
             RecognitionService.this.onStartListening(intent, mCurrentCallback);
         } else {
             try {
@@ -155,10 +157,12 @@
         public final Intent mIntent;
 
         public final IRecognitionListener mListener;
+        public final int mCallingUid;
 
-        public StartListeningArgs(Intent intent, IRecognitionListener listener) {
+        public StartListeningArgs(Intent intent, IRecognitionListener listener, int callingUid) {
             this.mIntent = intent;
             this.mListener = listener;
+            this.mCallingUid = callingUid;
         }
     }
 
@@ -227,9 +231,11 @@
      */
     public class Callback {
         private final IRecognitionListener mListener;
+        private final int mCallingUid;
 
-        private Callback(IRecognitionListener listener) {
+        private Callback(IRecognitionListener listener, int callingUid) {
             mListener = listener;
+            mCallingUid = callingUid;
         }
 
         /**
@@ -314,6 +320,14 @@
         public void rmsChanged(float rmsdB) throws RemoteException {
             mListener.onRmsChanged(rmsdB);
         }
+
+        /**
+         * Return the Linux uid assigned to the process that sent you the current transaction that
+         * is being processed. This is obtained from {@link Binder#getCallingUid()}.
+         */
+        public int getCallingUid() {
+            return mCallingUid;
+        }
     }
 
     /** Binder of the recognition service */
@@ -331,7 +345,7 @@
             if (service != null && service.checkPermissions(listener)) {
                 service.mHandler.sendMessage(Message.obtain(service.mHandler,
                         MSG_START_LISTENING, service.new StartListeningArgs(
-                                recognizerIntent, listener)));
+                                recognizerIntent, listener, Binder.getCallingUid())));
             }
         }
 
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 3962b70..81f9f99 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4457,47 +4457,60 @@
 
     private static SparseArray<String> getAttributeMap() {
         if (mAttributeMap == null) {
-            mAttributeMap = new SparseArray<String>();
+            mAttributeMap = new SparseArray<>();
         }
         return mAttributeMap;
     }
 
-    private void saveAttributeData(AttributeSet attrs, TypedArray a) {
-        int length = ((attrs == null ? 0 : attrs.getAttributeCount()) + a.getIndexCount()) * 2;
-        mAttributes = new String[length];
+    private void saveAttributeData(@Nullable AttributeSet attrs, @NonNull TypedArray t) {
+        final int attrsCount = attrs == null ? 0 : attrs.getAttributeCount();
+        final int indexCount = t.getIndexCount();
+        final String[] attributes = new String[(attrsCount + indexCount) * 2];
 
         int i = 0;
-        if (attrs != null) {
-            for (i = 0; i < attrs.getAttributeCount(); i += 2) {
-                mAttributes[i] = attrs.getAttributeName(i);
-                mAttributes[i + 1] = attrs.getAttributeValue(i);
-            }
 
+        // Store raw XML attributes.
+        for (int j = 0; j < attrsCount; ++j) {
+            attributes[i] = attrs.getAttributeName(j);
+            attributes[i + 1] = attrs.getAttributeValue(j);
+            i += 2;
         }
 
-        SparseArray<String> attributeMap = getAttributeMap();
-        for (int j = 0; j < a.length(); ++j) {
-            if (a.hasValue(j)) {
+        // Store resolved styleable attributes.
+        final Resources res = t.getResources();
+        final SparseArray<String> attributeMap = getAttributeMap();
+        for (int j = 0; j < indexCount; ++j) {
+            final int index = t.getIndex(j);
+            if (!t.hasValueOrEmpty(index)) {
+                // Value is undefined. Skip it.
+                continue;
+            }
+
+            final int resourceId = t.getResourceId(index, 0);
+            if (resourceId == 0) {
+                // Value is not a reference. Skip it.
+                continue;
+            }
+
+            String resourceName = attributeMap.get(resourceId);
+            if (resourceName == null) {
                 try {
-                    int resourceId = a.getResourceId(j, 0);
-                    if (resourceId == 0) {
-                        continue;
-                    }
-
-                    String resourceName = attributeMap.get(resourceId);
-                    if (resourceName == null) {
-                        resourceName = a.getResources().getResourceName(resourceId);
-                        attributeMap.put(resourceId, resourceName);
-                    }
-
-                    mAttributes[i] = resourceName;
-                    mAttributes[i + 1] = a.getText(j).toString();
-                    i += 2;
+                    resourceName = res.getResourceName(resourceId);
                 } catch (Resources.NotFoundException e) {
-                    // if we can't get the resource name, we just ignore it
+                    resourceName = "0x" + Integer.toHexString(resourceId);
                 }
+                attributeMap.put(resourceId, resourceName);
             }
+
+            attributes[i] = resourceName;
+            attributes[i + 1] = t.getString(index, false);
+            i += 2;
         }
+
+        // Trim to fit contents.
+        final String[] trimmed = new String[i];
+        System.arraycopy(attributes, 0, trimmed, 0, i);
+        mAttributes = trimmed;
     }
 
     public String toString() {
diff --git a/core/java/com/android/internal/widget/ButtonBarLayout.java b/core/java/com/android/internal/widget/ButtonBarLayout.java
index f58ab03..39613e8 100644
--- a/core/java/com/android/internal/widget/ButtonBarLayout.java
+++ b/core/java/com/android/internal/widget/ButtonBarLayout.java
@@ -33,9 +33,6 @@
     /** Whether the current configuration allows stacking. */
     private final boolean mAllowStacking;
 
-    /** Whether the layout is currently stacked. */
-    private boolean mStacked;
-
     private int mLastWidthSize = -1;
 
     public ButtonBarLayout(Context context, AttributeSet attrs) {
@@ -44,15 +41,14 @@
         final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ButtonBarLayout);
         mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking, false);
         ta.recycle();
-
-        mStacked = getOrientation() == VERTICAL;
     }
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+
         if (mAllowStacking) {
-            final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
-            if (widthSize > mLastWidthSize && mStacked) {
+            if (widthSize > mLastWidthSize && isStacked()) {
                 // We're being measured wider this time, try un-stacking.
                 setStacked(false);
             }
@@ -60,18 +56,37 @@
             mLastWidthSize = widthSize;
         }
 
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        boolean needsRemeasure = false;
 
-        if (mAllowStacking && !mStacked) {
+        // If we're not stacked, make sure the measure spec is AT_MOST rather
+        // than EXACTLY. This ensures that we'll still get TOO_SMALL so that we
+        // know to stack the buttons.
+        final int initialWidthMeasureSpec;
+        if (!isStacked() && MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY) {
+            initialWidthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.AT_MOST);
+
+            // We'll need to remeasure again to fill excess space.
+            needsRemeasure = true;
+        } else {
+            initialWidthMeasureSpec = widthMeasureSpec;
+        }
+
+        super.onMeasure(initialWidthMeasureSpec, heightMeasureSpec);
+
+        if (mAllowStacking && !isStacked()) {
             final int measuredWidth = getMeasuredWidthAndState();
             final int measuredWidthState = measuredWidth & MEASURED_STATE_MASK;
             if (measuredWidthState == MEASURED_STATE_TOO_SMALL) {
                 setStacked(true);
 
                 // Measure again in the new orientation.
-                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+                needsRemeasure = true;
             }
         }
+
+        if (needsRemeasure) {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        }
     }
 
     private void setStacked(boolean stacked) {
@@ -89,7 +104,9 @@
         for (int i = childCount - 2; i >= 0; i--) {
             bringChildToFront(getChildAt(i));
         }
+    }
 
-        mStacked = stacked;
+    private boolean isStacked() {
+        return getOrientation() == LinearLayout.VERTICAL;
     }
 }
diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl
index bfafff6..dfb7c50 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -16,6 +16,8 @@
 
 package com.android.internal.widget;
 
+import com.android.internal.widget.VerifyCredentialResponse;
+
 /** {@hide} */
 interface ILockSettings {
     void setBoolean(in String key, in boolean value, in int userId);
@@ -25,11 +27,11 @@
     long getLong(in String key, in long defaultValue, in int userId);
     String getString(in String key, in String defaultValue, in int userId);
     void setLockPattern(in String pattern, in String savedPattern, int userId);
-    boolean checkPattern(in String pattern, int userId);
-    byte[] verifyPattern(in String pattern, long challenge, int userId);
+    VerifyCredentialResponse checkPattern(in String pattern, int userId);
+    VerifyCredentialResponse verifyPattern(in String pattern, long challenge, int userId);
     void setLockPassword(in String password, in String savedPassword, int userId);
-    boolean checkPassword(in String password, int userId);
-    byte[] verifyPassword(in String password, long challenge, int userId);
+    VerifyCredentialResponse checkPassword(in String password, int userId);
+    VerifyCredentialResponse verifyPassword(in String password, long challenge, int userId);
     boolean checkVoldPassword(int userId);
     boolean havePattern(int userId);
     boolean havePassword(int userId);
diff --git a/core/java/com/android/internal/widget/LockPatternChecker.java b/core/java/com/android/internal/widget/LockPatternChecker.java
index ac0f5fe..4880664 100644
--- a/core/java/com/android/internal/widget/LockPatternChecker.java
+++ b/core/java/com/android/internal/widget/LockPatternChecker.java
@@ -2,6 +2,8 @@
 
 import android.os.AsyncTask;
 
+import com.android.internal.widget.LockPatternUtils.RequestThrottledException;
+
 import java.util.List;
 
 /**
@@ -16,8 +18,10 @@
          * Invoked when a security check is finished.
          *
          * @param matched Whether the PIN/Password/Pattern matches the stored one.
+         * @param throttleTimeoutMs The amount of time in ms to wait before reattempting
+         * the call. Only non-0 if matched is false.
          */
-        void onChecked(boolean matched);
+        void onChecked(boolean matched, int throttleTimeoutMs);
     }
 
     /**
@@ -28,8 +32,10 @@
          * Invoked when a security verification is finished.
          *
          * @param attestation The attestation that the challenge was verified, or null.
+         * @param throttleTimeoutMs The amount of time in ms to wait before reattempting
+         * the call. Only non-0 if attestation is null.
          */
-        void onVerified(byte[] attestation);
+        void onVerified(byte[] attestation, int throttleTimeoutMs);
     }
 
     /**
@@ -47,14 +53,21 @@
             final int userId,
             final OnVerifyCallback callback) {
         AsyncTask<Void, Void, byte[]> task = new AsyncTask<Void, Void, byte[]>() {
+            private int mThrottleTimeout;
+
             @Override
             protected byte[] doInBackground(Void... args) {
-                return utils.verifyPattern(pattern, challenge, userId);
+                try {
+                    return utils.verifyPattern(pattern, challenge, userId);
+                } catch (RequestThrottledException ex) {
+                    mThrottleTimeout = ex.getTimeoutMs();
+                    return null;
+                }
             }
 
             @Override
             protected void onPostExecute(byte[] result) {
-                callback.onVerified(result);
+                callback.onVerified(result, mThrottleTimeout);
             }
         };
         task.execute();
@@ -74,14 +87,21 @@
             final int userId,
             final OnCheckCallback callback) {
         AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
+            private int mThrottleTimeout;
+
             @Override
             protected Boolean doInBackground(Void... args) {
-                return utils.checkPattern(pattern, userId);
+                try {
+                    return utils.checkPattern(pattern, userId);
+                } catch (RequestThrottledException ex) {
+                    mThrottleTimeout = ex.getTimeoutMs();
+                    return false;
+                }
             }
 
             @Override
             protected void onPostExecute(Boolean result) {
-                callback.onChecked(result);
+                callback.onChecked(result, mThrottleTimeout);
             }
         };
         task.execute();
@@ -103,14 +123,21 @@
             final int userId,
             final OnVerifyCallback callback) {
         AsyncTask<Void, Void, byte[]> task = new AsyncTask<Void, Void, byte[]>() {
+            private int mThrottleTimeout;
+
             @Override
             protected byte[] doInBackground(Void... args) {
-                return utils.verifyPassword(password, challenge, userId);
+                try {
+                    return utils.verifyPassword(password, challenge, userId);
+                } catch (RequestThrottledException ex) {
+                    mThrottleTimeout = ex.getTimeoutMs();
+                    return null;
+                }
             }
 
             @Override
             protected void onPostExecute(byte[] result) {
-                callback.onVerified(result);
+                callback.onVerified(result, mThrottleTimeout);
             }
         };
         task.execute();
@@ -130,14 +157,21 @@
             final int userId,
             final OnCheckCallback callback) {
         AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
+            private int mThrottleTimeout;
+
             @Override
             protected Boolean doInBackground(Void... args) {
-                return utils.checkPassword(password, userId);
+                try {
+                    return utils.checkPassword(password, userId);
+                } catch (RequestThrottledException ex) {
+                    mThrottleTimeout = ex.getTimeoutMs();
+                    return false;
+                }
             }
 
             @Override
             protected void onPostExecute(Boolean result) {
-                callback.onChecked(result);
+                callback.onChecked(result, mThrottleTimeout);
             }
         };
         task.execute();
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 55b058c..aee0ff6 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -60,24 +60,12 @@
     private static final boolean DEBUG = false;
 
     /**
-     * The maximum number of incorrect attempts before the user is prevented
-     * from trying again for {@link #FAILED_ATTEMPT_TIMEOUT_MS}.
-     */
-    public static final int FAILED_ATTEMPTS_BEFORE_TIMEOUT = 5;
-
-    /**
      * The number of incorrect attempts before which we fall back on an alternative
      * method of verifying the user, and resetting their lock pattern.
      */
     public static final int FAILED_ATTEMPTS_BEFORE_RESET = 20;
 
     /**
-     * How long the user is prevented from trying again after entering the
-     * wrong pattern too many times.
-     */
-    public static final long FAILED_ATTEMPT_TIMEOUT_MS = 30000L;
-
-    /**
      * The interval of the countdown for showing progress of the lockout.
      */
     public static final long FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS = 1000L;
@@ -109,6 +97,7 @@
     @Deprecated
     public final static String LOCKOUT_PERMANENT_KEY = "lockscreen.lockedoutpermanently";
     public final static String LOCKOUT_ATTEMPT_DEADLINE = "lockscreen.lockoutattemptdeadline";
+    public final static String LOCKOUT_ATTEMPT_TIMEOUT_MS = "lockscreen.lockoutattempttimeoutmss";
     public final static String PATTERN_EVER_CHOSEN_KEY = "lockscreen.patterneverchosen";
     public final static String PASSWORD_TYPE_KEY = "lockscreen.password_type";
     @Deprecated
@@ -144,6 +133,23 @@
     private DevicePolicyManager mDevicePolicyManager;
     private ILockSettings mLockSettingsService;
 
+
+    public static final class RequestThrottledException extends Exception {
+        private int mTimeoutMs;
+        public RequestThrottledException(int timeoutMs) {
+            mTimeoutMs = timeoutMs;
+        }
+
+        /**
+         * @return The amount of time in ms before another request may
+         * be executed
+         */
+        public int getTimeoutMs() {
+            return mTimeoutMs;
+        }
+
+    }
+
     public DevicePolicyManager getDevicePolicyManager() {
         if (mDevicePolicyManager == null) {
             mDevicePolicyManager =
@@ -239,9 +245,23 @@
      * @param challenge The challenge to verify against the pattern
      * @return the attestation that the challenge was verified, or null.
      */
-    public byte[] verifyPattern(List<LockPatternView.Cell> pattern, long challenge, int userId) {
+    public byte[] verifyPattern(List<LockPatternView.Cell> pattern, long challenge, int userId)
+            throws RequestThrottledException {
         try {
-            return getLockSettings().verifyPattern(patternToString(pattern), challenge, userId);
+            VerifyCredentialResponse response =
+                getLockSettings().verifyPattern(patternToString(pattern), challenge, userId);
+            if (response == null) {
+                // Shouldn't happen
+                return null;
+            }
+
+            if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
+                return response.getPayload();
+            } else if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_RETRY) {
+                throw new RequestThrottledException(response.getTimeout());
+            } else {
+                return null;
+            }
         } catch (RemoteException re) {
             return null;
         }
@@ -253,9 +273,19 @@
      * @param pattern The pattern to check.
      * @return Whether the pattern matches the stored one.
      */
-    public boolean checkPattern(List<LockPatternView.Cell> pattern, int userId) {
+    public boolean checkPattern(List<LockPatternView.Cell> pattern, int userId)
+            throws RequestThrottledException {
         try {
-            return getLockSettings().checkPattern(patternToString(pattern), userId);
+            VerifyCredentialResponse response =
+                    getLockSettings().checkPattern(patternToString(pattern), userId);
+
+            if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
+                return true;
+            } else if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_RETRY) {
+                throw new RequestThrottledException(response.getTimeout());
+            } else {
+                return false;
+            }
         } catch (RemoteException re) {
             return true;
         }
@@ -270,9 +300,19 @@
      * @param challenge The challenge to verify against the password
      * @return the attestation that the challenge was verified, or null.
      */
-    public byte[] verifyPassword(String password, long challenge, int userId) {
+    public byte[] verifyPassword(String password, long challenge, int userId)
+            throws RequestThrottledException {
         try {
-            return getLockSettings().verifyPassword(password, challenge, userId);
+            VerifyCredentialResponse response =
+                    getLockSettings().verifyPassword(password, challenge, userId);
+
+            if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
+                return response.getPayload();
+            } else if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_RETRY) {
+                throw new RequestThrottledException(response.getTimeout());
+            } else {
+                return null;
+            }
         } catch (RemoteException re) {
             return null;
         }
@@ -284,9 +324,17 @@
      * @param password The password to check.
      * @return Whether the password matches the stored one.
      */
-    public boolean checkPassword(String password, int userId) {
+    public boolean checkPassword(String password, int userId) throws RequestThrottledException {
         try {
-            return getLockSettings().checkPassword(password, userId);
+            VerifyCredentialResponse response =
+                    getLockSettings().checkPassword(password, userId);
+            if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
+                return true;
+            } else if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_RETRY) {
+                throw new RequestThrottledException(response.getTimeout());
+            } else {
+                return false;
+            }
         } catch (RemoteException re) {
             return true;
         }
@@ -992,9 +1040,10 @@
      * pattern until the deadline has passed.
      * @return the chosen deadline.
      */
-    public long setLockoutAttemptDeadline(int userId) {
-        final long deadline = SystemClock.elapsedRealtime() + FAILED_ATTEMPT_TIMEOUT_MS;
+    public long setLockoutAttemptDeadline(int userId, int timeoutMs) {
+        final long deadline = SystemClock.elapsedRealtime() + timeoutMs;
         setLong(LOCKOUT_ATTEMPT_DEADLINE, deadline, userId);
+        setLong(LOCKOUT_ATTEMPT_TIMEOUT_MS, timeoutMs, userId);
         return deadline;
     }
 
@@ -1005,8 +1054,9 @@
      */
     public long getLockoutAttemptDeadline(int userId) {
         final long deadline = getLong(LOCKOUT_ATTEMPT_DEADLINE, 0L, userId);
+        final long timeoutMs = getLong(LOCKOUT_ATTEMPT_TIMEOUT_MS, 0L, userId);
         final long now = SystemClock.elapsedRealtime();
-        if (deadline < now || deadline > (now + FAILED_ATTEMPT_TIMEOUT_MS)) {
+        if (deadline < now || deadline > (now + timeoutMs)) {
             return 0L;
         }
         return deadline;
diff --git a/core/java/com/android/internal/widget/VerifyCredentialResponse.aidl b/core/java/com/android/internal/widget/VerifyCredentialResponse.aidl
new file mode 100644
index 0000000..59a4bba
--- /dev/null
+++ b/core/java/com/android/internal/widget/VerifyCredentialResponse.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.widget;
+
+/**
+ * Response object for an ILockSettings verification request.
+ * @hide
+ */
+parcelable VerifyCredentialResponse;
+
diff --git a/core/java/com/android/internal/widget/VerifyCredentialResponse.java b/core/java/com/android/internal/widget/VerifyCredentialResponse.java
new file mode 100644
index 0000000..48109ca
--- /dev/null
+++ b/core/java/com/android/internal/widget/VerifyCredentialResponse.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.widget;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Response object for a ILockSettings credential verification request.
+ * @hide
+ */
+public final class VerifyCredentialResponse implements Parcelable {
+
+    public static final int RESPONSE_ERROR = -1;
+    public static final int RESPONSE_OK = 0;
+    public static final int RESPONSE_RETRY = 1;
+
+    public static final VerifyCredentialResponse OK = new VerifyCredentialResponse();
+    public static final VerifyCredentialResponse ERROR
+            = new VerifyCredentialResponse(RESPONSE_ERROR, 0, null);
+
+    private int mResponseCode;
+    private byte[] mPayload;
+    private int mTimeout;
+
+    public static final Parcelable.Creator<VerifyCredentialResponse> CREATOR
+            = new Parcelable.Creator<VerifyCredentialResponse>() {
+        @Override
+        public VerifyCredentialResponse createFromParcel(Parcel source) {
+            int responseCode = source.readInt();
+            VerifyCredentialResponse response = new VerifyCredentialResponse(responseCode, 0, null);
+            if (responseCode == RESPONSE_RETRY) {
+                response.setTimeout(source.readInt());
+            } else if (responseCode == RESPONSE_OK) {
+                int size = source.readInt();
+                if (size > 0) {
+                    byte[] payload = new byte[size];
+                    source.readByteArray(payload);
+                    response.setPayload(payload);
+                }
+            }
+            return response;
+        }
+
+        @Override
+        public VerifyCredentialResponse[] newArray(int size) {
+            return new VerifyCredentialResponse[size];
+        }
+
+    };
+
+    public VerifyCredentialResponse() {
+        mResponseCode = RESPONSE_OK;
+        mPayload = null;
+    }
+
+
+    public VerifyCredentialResponse(byte[] payload) {
+        mPayload = payload;
+        mResponseCode = RESPONSE_OK;
+    }
+
+    public VerifyCredentialResponse(int timeout) {
+        mTimeout = timeout;
+        mResponseCode = RESPONSE_RETRY;
+        mPayload = null;
+    }
+
+    private VerifyCredentialResponse(int responseCode, int timeout, byte[] payload) {
+        mResponseCode = responseCode;
+        mTimeout = timeout;
+        mPayload = payload;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mResponseCode);
+        if (mResponseCode == RESPONSE_RETRY) {
+            dest.writeInt(mTimeout);
+        } else if (mResponseCode == RESPONSE_OK) {
+            if (mPayload != null) {
+                dest.writeInt(mPayload.length);
+                dest.writeByteArray(mPayload);
+            }
+        }
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public byte[] getPayload() {
+        return mPayload;
+    }
+
+    public int getTimeout() {
+        return mTimeout;
+    }
+
+    public int getResponseCode() {
+        return mResponseCode;
+    }
+
+    private void setTimeout(int timeout) {
+        mTimeout = timeout;
+    }
+
+    private void setPayload(byte[] payload) {
+        mPayload = payload;
+    }
+}
diff --git a/core/res/res/drawable-hdpi/dialog_background_mtrl_mult.9.png b/core/res/res/drawable-hdpi/dialog_background_mtrl_mult.9.png
deleted file mode 100644
index 0c3c3b4..0000000
--- a/core/res/res/drawable-hdpi/dialog_background_mtrl_mult.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_background_mtrl_mult.9.png b/core/res/res/drawable-mdpi/dialog_background_mtrl_mult.9.png
deleted file mode 100644
index 8322ae3..0000000
--- a/core/res/res/drawable-mdpi/dialog_background_mtrl_mult.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_background_mtrl_mult.9.png b/core/res/res/drawable-xhdpi/dialog_background_mtrl_mult.9.png
deleted file mode 100644
index e6c0047..0000000
--- a/core/res/res/drawable-xhdpi/dialog_background_mtrl_mult.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/dialog_background_mtrl_mult.9.png b/core/res/res/drawable-xxhdpi/dialog_background_mtrl_mult.9.png
deleted file mode 100644
index bb9debb..0000000
--- a/core/res/res/drawable-xxhdpi/dialog_background_mtrl_mult.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index c2411ab..78c67bd 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor d\'empremtes digitals està brut. Neteja\'l i torna-ho a provar."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"El dit s\'ha mogut massa ràpid. Torna-ho a provar."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"El dit s\'ha mogut massa lentament. Torna-ho a provar."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El maquinari per a empremtes digitals no està disponible."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index cf57ec2..54072ed 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -429,8 +429,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otisků prstů je znečištěn. Vyčistěte jej a zkuste to znovu."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Pohyb prstem byl příliš rychlý. Zkuste to znovu."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Není k dispozici hardware ke snímání otisků prstů."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d45777d..d685561 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Fingerabdruck konnte nicht verarbeitet werden. Versuchen Sie es erneut."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerabdrucksensor ist verschmutzt. Reinigen Sie ihn und versuchen Sie es erneut."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Finger zu schnell bewegt. Versuchen Sie es erneut."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Finger zu langsam bewegt. Versuchen Sie es erneut."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Fingerabdruckhardware nicht verfügbar"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index e6d037d..c129eb8 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se pudo procesar la huella digital. Vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Limpia el sensor y vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Moviste el dedo muy rápido. Vuelve a intentarlo."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Moviste el dedo muy lento. Vuelve a intentarlo."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El hardware para detectar huellas digitales no está disponible."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 2632cf6..d5e14ed 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Límpialo y vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Has quitado el dedo demasiado rápido. Vuelve a intentarlo."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Has movido el dedo demasiado despacio. Vuelve a intentarlo."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El hardware de huella digital no está disponible."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 3bf6752..eea68df 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"حسگر اثر انگشت کثیف است. لطفاً آن را تمیز کنید و دوباره امتحان نمایید."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"حرکت انگشت خیلی سریع بود. لطفاً دوباره امتحان کنید."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"حرکت انگشت خیلی آهسته بود. لطفاً دوباره امتحان کنید."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"سخت‌افزار اثرانگشت در دسترس نیست."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 9d9563f..5b9170c 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Sormenjäljen käsittely epäonnistui. Yritä uudelleen."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sormenjälkitunnistin on likainen. Puhdista tunnistin ja yritä uudelleen."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Liikutit sormea liian nopeasti. Yritä uudelleen."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Sormenjälkilaitteisto ei ole käytettävissä."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 03c3d83..04d916e 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Impossible de traiter les empreintes digitales. Veuillez essayer de nouveau."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Le capteur d\'empreintes digitales est sale. Veuillez le nettoyer et essayer de nouveau."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Vous avez déplacé votre doigt trop rapidement. Veuillez réessayer."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Matériel d\'empreinte numérique indisponible."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index d93ded6..0a57621 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -428,8 +428,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otiska prsta nije čist. Očistite ga i pokušajte ponovo."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Prebrzo pomicanje prsta. Pokušajte ponovo."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Presporo pomicanje prsta. Pokušajte ponovo."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardver za otisak prsta nije dostupan."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index e44bc44..b7447cd 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"指紋を処理できませんでした。もう一度お試しください。"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋センサーに汚れがあります。汚れを落としてもう一度お試しください。"</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"指の動きが速すぎました。もう一度お試しください。"</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"指の動きが遅すぎました。もう一度お試しください。"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指紋ハードウェアは使用できません。"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 0b2e413..b1033a7 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"თითის ანაბეჭდი ვერ მუშავდება. გთხოვთ, სცადოთ ხელახლა."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"თითის ანაბეჭდის სენსორი დაბინძურებულია. გთხოვთ, გაასუფთაოთ და სცადოთ ხელახლა."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"თითის აღება მეტისმეტად სწრაფად მოხდა. გთხოვთ, სცადოთ ხელახლა."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"თითის აღება მეტისმეტად ნელა მოხდა. გთხოვთ, სცადოთ ხელახლა."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"თითის ანაბეჭდის აპარატურა არ არის ხელმისაწვდომი."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f679436..855e08d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"지문 센서를 깨끗이 닦고 다시 시도하세요."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"손가락을 너무 빨리 움직였습니다. 다시 시도해 주세요."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"지문 인식 하드웨어를 사용할 수 없습니다."</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 27fb058..35df085 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -554,8 +554,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Манжа изи иштелбей койду. Кайра аракет кылыңыз."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Манжа изинин сенсору кирдеп калган. Тазалап, кайра аракет кылыңыз."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Манжа өтө тез жылдырылды. Кайра аракет кылыңыз."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">".Манжа өтө акырын жылдырылды. Кайра аракет кылыңыз."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Манжа изинин аппараттык камсыздоосу жеткиликтүү эмес."</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 4e870f7..c8ea6ae 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Tidak dapat memproses cap jari. Sila cuba lagi."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Penderia cap jari kotor. Sila bersihkan dan cuba lagi."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Jari digerakkan terlalu cepat. Sila cuba lagi."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Jari digerakkan terlalu perlahan. Sila cuba lagi."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Perkakasan cap jari tidak tersedia."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index c7b47e1..db7febf 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Não foi possível processar a impressão digital. Tente novamente."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impressão digital está sujo. Limpe-o e tente novamente."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"O dedo foi retirado rápido demais. Tente novamente."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"O movimento do dedo está muito lento. Tente novamente."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardware de impressão digital não disponível."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 15ac3c7..304118f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -428,8 +428,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Amprenta nu a putut fi procesată. Încercați din nou."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzorul pentru amprente este murdar. Curățați-l și încercați din nou."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Ați mișcat degetul prea repede. Încercați din nou."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Ați mișcat degetul prea lent. Încercați din nou."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardware-ul pentru amprentă nu este disponibil."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index d4ce526..29e05f8 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -429,8 +429,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не удалось распознать отпечаток. Повторите попытку."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Очистите сканер и повторите попытку."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Вы слишком быстро убрали палец. Повторите попытку."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Вы перемещали палец слишком медленно. Повторите попытку."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Сканер недоступен"</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 003747b..46c0761 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ඇඟිලි සලකුණු සංවේදකය අපිරිසිදුයි. කරුණාකර පිරිසිදු කර නැවත උත්සාහ කරන්න."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"ඇඟිල්ල ඉතා වේගයෙන් ගෙන යන ලදී. කරුණාකර නැවත උත්සාහ කරන්න."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"ඇඟිල්ල වඩා සෙමෙන් ගෙන යන ලදි. කරුණාකර නැවත උත්සාහ කරන්න."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"ඇඟිලි සලකුණු දෘඪාංගය ලද නොහැකිය."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 6178dd5..973e90c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -428,8 +428,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Није успела обрада отиска прста. Покушајте поново."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензор за отиске прстију је прљав. Очистите га и покушајте поново."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Пребрзо сте померили прст. Покушајте поново."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Превише споро сте померили прст. Покушајте поново."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Хардвер за отиске прстију није доступан."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index f48e418..5cc6d0b 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Parmak izi sensörü kirli. Lütfen temizleyin ve tekrar deneyin."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Parmak hareketi çok hızlıydı. Lütfen tekrar deneyin."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Parmak hareketi çok yavaştı. Lütfen tekrar deneyin."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Parmak izi donanımı kullanılamıyor."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 318ca95..a27afc0 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -429,8 +429,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не вдалось обробити відбиток. Повторіть спробу."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Датчик відбитків забруднився. Очистьте його та повторіть спробу."</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Ви забрали палець надто швидко. Повторіть спробу."</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Ви провели пальцем надто повільно. Повторіть спробу."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Апаратне забезпечення для сканування відбитка недоступне."</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index 146f00c..33639bf 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"فنگر پرنٹ پر کارروائی نہیں کی جا سکی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"فنگر پرنٹ سینسر گندا ہے۔ براہ کرم صاف کریں اور دوبارہ کوشش کریں۔"</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"انگلی کو کافی تیزی سے ہٹا لیا گیا۔ براہ کرم دوبارہ کوشش کریں۔"</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"انگلی کو بہت آہستہ ہٹایا گیا۔ براہ کرم دوبارہ کوشش کریں۔"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"فنگر پرنٹ ہارڈ ویئر دستیاب نہیں ہے۔"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index cdb2b7e2..58053aa8 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"无法处理指纹，请重试。"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指纹传感器有脏污。请擦拭干净，然后重试。"</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"手指移动太快，请重试。"</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"手指移动太慢，请重试。"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指纹硬件无法使用。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index dc700ff..f980c2a 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -427,8 +427,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"無法處理指紋，請再試一次。"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋感應器有髒汙。請清潔感應器，然後再試一次。"</string>
     <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"手指移動速度過快，請再試一次。"</string>
-    <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
-    <skip />
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"手指移動速度過慢，請再試一次。"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指紋硬體無法使用。"</string>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 5bc0e03..d5c2d19 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -231,8 +231,6 @@
        <item>@drawable/ic_voice_search_api_holo_light</item>
        <item>@drawable/dialog_bottom_holo_dark</item>
        <item>@drawable/dialog_bottom_holo_light</item>
-       <item>@drawable/dialog_full_holo_dark</item>
-       <item>@drawable/dialog_full_holo_light</item>
        <item>@drawable/dialog_middle_holo_dark</item>
        <item>@drawable/dialog_middle_holo_light</item>
        <item>@drawable/dialog_top_holo_dark</item>
@@ -263,13 +261,9 @@
        <item>@drawable/fastscroll_track_holo_dark</item>
        <item>@drawable/fastscroll_track_pressed_holo_dark</item>
        <item>@drawable/fastscroll_track_default_holo_dark</item>
-       <item>@drawable/fastscroll_label_left_holo_dark</item>
-       <item>@drawable/fastscroll_label_right_holo_dark</item>
        <item>@drawable/fastscroll_track_holo_light</item>
        <item>@drawable/fastscroll_track_pressed_holo_light</item>
        <item>@drawable/fastscroll_track_default_holo_light</item>
-       <item>@drawable/fastscroll_label_left_holo_light</item>
-       <item>@drawable/fastscroll_label_right_holo_light</item>
        <item>@drawable/editbox_dropdown_background_dark</item>
        <item>@drawable/textfield_searchview_holo_dark</item>
        <item>@drawable/textfield_searchview_right_holo_dark</item>
@@ -310,7 +304,6 @@
        <item>@drawable/cab_background_bottom_material</item>
        <item>@drawable/cab_background_top_material</item>
        <item>@drawable/dialog_background_material</item>
-       <item>@drawable/dialog_background_shadow_material</item>
        <item>@drawable/edit_text_material</item>
        <item>@drawable/expander_group_material</item>
        <item>@drawable/fastscroll_label_left_material</item>
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 165d1f8..56eafe1 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -489,8 +489,6 @@
     <!-- Alert dialog button bar button -->
     <style name="Widget.Material.Button.ButtonBar.AlertDialog" parent="Widget.Material.Button.Borderless.Colored">
         <item name="minWidth">64dp</item>
-        <item name="singleLine">true</item>
-        <item name="ellipsize">none</item>
         <item name="minHeight">@dimen/alert_dialog_button_bar_height</item>
     </style>
 
diff --git a/docs/html-ndk/ndk/downloads/downloads_toc.cs b/docs/html-ndk/ndk/downloads/downloads_toc.cs
index fca91bc..dbe8aec 100644
--- a/docs/html-ndk/ndk/downloads/downloads_toc.cs
+++ b/docs/html-ndk/ndk/downloads/downloads_toc.cs
@@ -6,12 +6,16 @@
        localized titles are added in the language order specified below.
 ?>
 
-
 <ul id="nav">
-  <li class="nav-section">
-    <div class="nav-section-header empty"><a href="/ndk/downloads/index.html"><span class="en">
-      NDK Download</span></a>
-  </li>
+   <li class="nav-section">
+      <div class="nav-section-header empty"><a href="/ndk/downloads/index.html"><span class="en">
+      Downloads</span></a></div>
+   </li>
+
+   <li class="nav-section">
+      <div class="nav-section-header empty"><a href="/ndk/downloads/revision_history.html">
+      <span class="en">Revision History</span></a></div>
+   </li>
 </ul>
 
 
diff --git a/docs/html-ndk/ndk/downloads/index.jd b/docs/html-ndk/ndk/downloads/index.jd
index fdbc083..94e9ae9 100644
--- a/docs/html-ndk/ndk/downloads/index.jd
+++ b/docs/html-ndk/ndk/downloads/index.jd
@@ -323,26 +323,59 @@
 </div>
 
  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
 
-      <ol>
-        <li><a href="#Downloads">Downloads</a></li>
-        <li><a href="#rel">Release Notes</a></li>
-      </ol>
-    </div>
   </div>
 
-  <p>Select, from the table below, the NDK package suitable for your development platform.</p>
+  <p>Select, from the table below, the NDK package for your development platform. For information
+  about the changes in the newest version of the NDK, see <a href="#rel">Release Notes</a>. For
+  information about earlier revisions, see <a href="{@docRoot}ndk/downloads/revision_history.html">
+  NDK Revision History.</a></p>
 
 
-<h2 id="Downloads">Downloads</h2>
+<h2 id="Downloads">Downloading</h2>
 
 
 <script>
 $('#Downloads').after($('#download-table'));
 </script>
 
+  <h2 id="extract">Extraction</h2>
+  <p>The NDK package is a self-extracting binary. To unpack it, follow the procedure for your
+  development platform:</p>
+       <ul>
+       <li>On Linux and Mac OS X (Darwin):
+          <ul>
+          <ol>
+          <li>Download the appropriate package from this page.</li>
+          <li>Open a terminal window.</li>
+          <li>Go to the directory to which you downloaded the package.</li>
+          <li>Run <code>chmod a+x</code> on the downloaded package.</li>
+          <li>Execute the package. For example:
+          <pre class="no-pretty-print">
+ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
+ndk$ ./android-ndk-r10c-darwin-x86_64.bin
+          </pre></li>
+          <p>The folder containing the NDK extracts itself.</p>
+          <p>You can also use a program like 7z to extract the package.</p>
+          </ol>
+          </ul>
+       </li>
+    <li>On Windows:</li>
+       <ul>
+       <ol>
+       <li>Download the appropriate package from this page.</li>
+       <li>Navigate to the folder to which you downloaded the package.</li>
+       <li>Double-click the downloaded file. The folder containing the NDK extracts itself.</li>
+       </ol>
+       </ul>
+     </ul>When uncompressed, the NDK files are contained in a directory called
+    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
+    can move it to any location on your computer. This documentation refers to the NDK directory as
+    <code>&lt;ndk&gt;</code>.
+
+
+  <p>You are now ready to start working with the NDK.</p>
+
 <h2 id="rel">Release Notes</h2>
 
  <p>Android NDK, Revision 10e</a> <em>(May 2015)</em></p>
diff --git a/docs/html-ndk/ndk/downloads/revision_history.jd b/docs/html-ndk/ndk/downloads/revision_history.jd
new file mode 100644
index 0000000..a32b814
--- /dev/null
+++ b/docs/html-ndk/ndk/downloads/revision_history.jd
@@ -0,0 +1,3237 @@
+page.title=NDK Revision History
+@jd:body
+
+<p>This page provides information on previous releases of the NDK, enumerating the changes that
+took place in each new version.</p>
+
+<div class="toggle-content closed">
+<a name="10d"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 10d</a> <em>(December 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+      <ul>
+        <li>Made GCC 4.8 the default for all 32-bit ABIs.  Deprecated GCC 4.6, and
+            will remove it next release. To restore previous behavior, either add
+            <code>NDK_TOOLCHAIN_VERSION=4.6</code> to ndk-build, or
+            add <code>--toolchain=arm-linux-androideabi-4.6</code> when executing
+            <code>make-standalone-toolchain.sh</code> on the command line. GCC 4.9 remains the
+            default for 64-bit ABIs.</li>
+
+         <li>Stopped all x86[_64] toolchains from adding <code>-mstackrealign</code> by default. The
+             NDK toolchain assumes a 16-byte stack alignment. The tools and options used by default
+             enforce this rule. A user writing assembly code must make sure to preserve stack
+             alignment, and ensure that other compilers also comply with this rule.
+             (GCC bug <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496">38496</a>)</li>
+
+         <li>Added Address Sanitizer functionality to Clang 3.5 support to the ARM and x86 ABIs.
+             For more information on this change, see the
+             <a href="https://code.google.com/p/address-sanitizer/wiki/Android">Address
+             Sanitizer</a> project.</li>
+
+         <li>Introduced the requirement, starting from API level 21, to use <code>-fPIE -pie
+             </code> when building. In API levels 16 and higher, ndk-build uses <code>PIE</code>
+             when building. This change has a number of implications, which are discussed in
+             <a href="https://code.google.com/p/android-developer-preview/issues/detail?id=888">
+             Developer Preview Issue 888</a>.
+             These implications do not apply to shared libraries.</li>
+      </ul>
+      </dd>
+   <dl>
+
+
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+        <li>Made more fixes related to
+            <a href="https://gcc.gnu.org/ml/gcc-patches/2014-10/msg00906.html">
+            A53 Errata #835769</a> in the aarch64-linux-android-4.9 linker. As part of this, GCC
+            passes a new option, <code>--fix-cortex-a53-835769</code>, when
+            <code>-mfix-cortex-a53-835769</code> (enabled by default) is specified.
+            For more information, see this
+            <a href="https://sourceware.org/ml/binutils/2014-10/msg00198.html">binutils message</a>
+            and this
+            <a href="https://sourceware.org/ml/binutils/2014-11/msg00287.html">binutils message</a>.
+            </li>
+
+        <li>Documented a fix to a libc++ <code>sscanf/vsscanf</code> hang that occurred in API level
+            21. The fix itself had been implemented in r10c.
+            (Issue <a href="http://b.android.com/77988">77988</a>)</li>
+
+        <li>Fixed an AutoFDO (<code>-fauto-profile</code>) crash that occurred with GCC 4.9 when
+            <code>-Os</code> was specified. (Issue <a href="http://b.android.com/77571">77571</a>)</li>
+     </ul>
+     </dd>
+
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+        <li>Made the following header and library fixes:</li>
+           <ul>
+        <li>Added <code>posix_memalign</code> to API level 16. Also, added a prototype in
+            <code>stdlib.h</code> to API levels 16 to 19.
+            (Issue <a href="http://b.android.com/77861">77861</a>)</li>
+        <li>Fixed <code>stdatomic.h</code> so that it includes <code>&lt;atomic&gt;</code> only for
+            C++11.</li>
+        <li>Modified the following headers for standalone use: <code>sys/user.h</code>, and
+            <code>gl2ext.h</code>, <code>dlext.h</code>, <code>fts.h</code>, <code>sgidefs.h</code>
+            for API level 21.</li>
+        <li>Modified <code>sys/user.h</code> to rename <code>mxcsr_mask</code> as <code>mxcr_mask</code>,
+            and to change the data type for <code>u_ar0</code></li> from <code>unsigned long</code>
+            to </code>struct user_regs_struct*</code>.
+        <li>Changed <code>sysconf()</code> return value type from <code>int</code> to
+            <code>long</code>.</li>
+           </ul>
+
+        <li>Fixed ndk-build's handling of <code>thumb</code> for <code>LOCAL_ARM_MODE</code>: In
+            r10d, ndk-build adds <code>LOCAL_LDFLAGS+=-mthumb</code> by default, unless one of the
+            following conditions applies:</li>
+          <ul>
+            <li>You have set <code>LOCAL_ARM_MODE</code> equal to <code>arm</code>.</li>
+            <li>You are doing a debug build (with settings such as <code>APP_OPTIM=debug</code> and
+            <code>AndroidManifest.xml</code> containing <code>android:debuggable="true"</code>),
+            where ARM mode is the default in order to retain compatibility with earlier toolchains.
+            (Issue <a href="http://b.android.com/74040">74040</a>)</li>
+          </ul>
+
+        <li>Fixed <code>LOCAL_SRC_FILES</code> in ndk-build to use Windows absolute paths.
+            (Issue <a href="http://b.android.com/74333">74333</a>)</li>
+
+        <li>Removed bash-specific code from ndk-gdb. (Issue <a href="http://b.android.com/73338">73338</a>)</li>
+
+        <li>Removed bash-specific code from <code>make-standalone-toolchain.sh</code>.
+            (Issue <a href="http://b.android.com/74145">74145)</a></li>
+
+        <li>Revised documentation concerning a fix for <code>System.loadLibrary()</code> transitive
+            dependencies. (Issue <a href="http://b.android.com/41790">41790</a>)</li>
+
+        <li>Fixed a problem that was preventing 64-bit packages from extracting on Ubuntu 14.04 and
+            OS X 10.10 (Yosemite). (Issue <a href="http://b.android.com/78148">78148</a>)</li>
+
+        <li>Fixed an issue with <code>LOCAL_PCH</code> to improve Clang support. (Issue
+            <a href="http://b.android.com/77575">77575</a>)</li>
+
+        <li>Clarified "requires executable stack" warning from ld.gold. (Issue
+            <a href="http://b.android.com/79115">79115</a>)</li>
+     </ul>
+     </dd>
+
+   </dl>
+ </div>
+</div>
+
+
+
+
+
+
+
+<div class="toggle-content closed">
+<a name="10c"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 10c</a> <em>(October 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+      <ul>
+ <li>Made the following changes to download structure:</li>
+       <ul>
+       <li>Each package now contains both the 32- and the 64-bit headers, libraries, and tools for
+       its respective platform.</li>
+       <li>STL libraries with debugging info no longer need be downloaded separately.</li>
+       </ul>
+  <li>Changed everything previously called <code>Android-L</code> to the official release
+  designation: <code>android-21</code>.</li>
+  <li>Updated GCC 4.9 by rebasing to the <code>google</code> branch
+  of the GCC repository. Major differences from the upstream version of GCC 4.9 include:</li>
+
+  <ul>
+  <li>The <code>-O2</code> option now turns on vectorization, without loop peeling but with more
+  aggressive unrolling.</li>
+  <li>Enhancements to FDO and <a href="https://gcc.gnu.org/wiki/LightweightIpo#LIPO_-_Profile_Feedback_Based_Lightweight_IPO">
+  LIPO</a></li>
+  <p>For more detailed information, see <em>Important bug fixes</em> below.</p>
+  </ul>
+
+  <li>Added Clang 3.5 support to all hosts: <code>NDK_TOOLCHAIN_VERSION=clang</code>
+  now picks Clang 3.5. Note that:</li>
+  <ul>
+
+  <li>ARM and x86 default to using the integrated assembler. If this causes issues, use
+  <code>-fno-integrated-as</code> as a workaround.</code>
+  <li>Clang 3.5 issues more warnings for unused flags, such as the <code>-finline-functions</code>
+  option that GCC supports.</li>
+  <p>When migrating from projects using GCC, you can use
+  <code>-Wno-invalid-command-line-argument</code> and <code>-Wno-unused-command-line-argument</code>
+  to ignore the unused flags until you're able decide on what to do with them longer-term.</p>
+
+     </ul>
+  <li>Made it possible to enter ART debugging mode, when debugging on an Android 5.0 device using
+  ART as its virtual machine, by specifying the <code>art-on</code> option. For more information,
+  see <code>prebuilt/common/gdb/common.setup</code> in the directory containing the NDK.</li>
+  <li>Removed support for Clang 3.3.</li>
+  <li>Deprecated GCC 4.6, and may remove it from future releases.</li>
+  <li>Updated mclinker to 2.8 with Identical Code Folding ("ICF") support. Specify ICF using the
+  <code>--icf</code> option.</li>
+  <li>Broadened <code>arm_neon.h</code> support in x86 and x86_64, attaining coverage of ~93% of
+  NEON intrinsics. For more information about NEON support:
+     <ul>
+     <li>Navigate to the NDK Programmer's Guide (<code>docs/Programmers_Guide/html/</code>), and see
+     Architectures and CPUs > Neon.</li>
+     <li>Examine the updated <code>hello-neon</code> sample in <code>samples/</code>.
+     <li>See Intel's guide to <a href="https://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-automatic-porting-solution-tips-and-tricks"> porting from ARM NEON to Intel SSE.</a></li>
+     </ul>
+  <li>Documented support for <code>_FORTIFY_SOURCE</code> in <code>headers/libs/android-21</code>,
+  which appeared in r10 (when <code>android-21</code> was still called <code>Android-L</code>),
+  but had no documentation.</li>
+      </ul>
+      </dd>
+   <dl>
+
+
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Fixed an internal compiler error with GCC4.9/aarch64 that was causing the following
+       error message (Issue <a href="http://b.android.com/77564">77564</a>):</li>
+<pre>
+internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
+</pre>
+       <li>Fixed incorrect code generation from GCC4.9/arm. (Issue
+       <a href="http://b.android.com/77567">77567<a>)</li>
+       <li>Fixed an internal compiler error with GCC4.9/mips involving inline-assembly. (Issue
+       <a href="http://b.android.com/77568">77568</a>)</li>
+       <li>Fixed incorrect code that GCC4.9/arm was generating for <code>x = (cond) ? y : x</code>.
+       (Issue <a href="http://b.android.com/77569">77569</a>)</li>
+       <li>Fixed GCC4.9/aarch64 and Clang3.5/aarch64 to work around the
+       <a href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141006/116322.html">
+       Cortex-A53 erratum (835769)</a>  by default.  Disable the workaround by specifying
+       <code>-mno-fix-cortex-a53-835769</code>.</li>
+     </ul>
+     </dd>
+
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+     <li>Made the following header and library fixes to <code>android-21</code>:
+        <ul>
+
+        <li>Added more TV keycodes: <code>android/keycodes.h</code></li>
+        <li>Added more constants and six new sensor functions to <code>android/sensor.h</code>:
+        <code>ASensorManager_getDefaultSensorEx</code>, <code>ASensor_getFifoMaxEventCount</code>,
+        <code>ASensor_getFifoReservedEventCount</code>, <code>ASensor_getStringType</code>,
+        <code>ASensor_getReportingMode</code>, and <code>ASensor_isWakeUpSensor</code>.</li>
+        <li>Fixed <code>stdatomic.h</code> to improve compatibility with GCC 4.6, and provide support
+        for the <code>&lt;atomic&gt;</code> header.</li>
+        <li>Added <code>sys/ucontext.h</code> and <code>sys/user.h</code> to all API levels. The
+        <code>signal.h</code> header now includes <code>&lt;sys/ucontext.h&gt;</code>.  You may
+        remove any existing definition of <code>struct ucontext</code>.</li>
+        <li>Added <code>posix_memalign</code> to API levels 17, 18, and 19.</li>
+        <li>Added the following functions to all architectures:
+        <code>android_set_abort_message</code>, <code>posix_fadvise</code>,
+        <code>posix_fadvise64</code>, <code>pthread_gettid_np</code>.</li>
+        <li>Added the required permissions to the <code>native-media/AndroidManifest.xml</code>
+        sample.
+        (Issue <a href="https://android-review.googlesource.com/#/c/106640/">106640</a>)</li>
+        <li>Added <code>clock_nanosleep</code> and <code>clock_settime</code> to API level 21. (Issue
+        <a href="http://b.android.com/77372">77372</a>)
+        <li>Removed the following symbols from all architectures:
+        <code>get_malloc_leak_info</code>, <code>free_malloc_leak_info</code>,
+        <code>__srget</code>, <code>__swbuf</code>, <code>__srefill</code>, <code>__swsetup</code>,
+        <code>__sdidinit</code>, <code>__sflags</code>, <code>__sfp</code>,
+        <code>__sinit</code>, <code>__smakebuf</code>, <code>__sflush</code>, <code>__sread</code>,
+        <code>__swrite</code>, <code>__sseek</code>, <code>__sclose</code>,
+        <code>_fwalk</code>, <code>__sglue</code>, <code>__get_thread</code>, <code>__wait4</code>,
+        <code>__futex_wake</code>, <code>__open</code>, <code>__get_tls</code>,
+        <code>__getdents64</code>, and <code>dlmalloc</code>.</li>
+        <li>Removed the following functions from the 64-bit architectures: <code>basename_r</code>,
+        <code>dirname_r</code>, <code>__isthreaded</code>, <code>_flush_cache</code> (mips64).</li>
+        <li>Removed the following function from the 32-bit architectures:
+        <code>__signalfd4</code>.</li>
+        <li>Changed the type of the third argument from <code>size_t</code> to <code>int</code> in
+        the following functions: <code>strtoll_l</code>, <code>strtoull_l</code>,
+        <code>wcstoll_l</code>, and <code>wcstoull_l</code>.</li>
+        <li>Restored the following functions to the 64-bit architecture: <code>arc4random</code>,
+        <code>arc4random_buf</code>, and <code>arc4random_uniform</code>.</li>
+        <li>Moved <code>cxa_*</code> and the <code>new</code> and <code>delete</code> operators back
+        to <code>libstdc++.so</code>. This change restores r9d behavior; previous versions of r10
+        contained dummy files.</li>
+
+        </ul>
+     <li>Restored MXU support in GCC 4.8 and 4.9 for mips. This support had been absent from
+     r10 and r10b because those versions of GCC had been compiled with binutils-2.24, which did
+     not support MXU. It now does.</li>
+     <li>Fixed <code>--toolchain=</code> in <code>make-standalone-toolchain.sh</code> so that it
+     now properly supports use of a suffix specifying a version of Clang.</li>
+     <li>Fixed the libc++/armeabi <code>strtod()</code> functions.</li>
+     <li>Made fixes to NDK documentation in <code>docs/</code>.</li>
+     </ul>
+     </dd>
+
+     <dt>Other changes:</dt>
+     <dd>
+       <ul>
+       <li>Enhanced <code>cpu-features</code> to detect ARMv8 support for the following
+       instruction sets: AES, CRC32, SHA2, SHA1, and 64-bit PMULL/PMULL2. (Issue
+       <a href="https://android-review.googlesource.com/#/c/106360/">106360</a>)</li>
+
+       <li>Modified ndk-build to use <code>*-gcc-ar</code>, which is available in GCC 4.8, GCC 4.9, and
+       Clang. Clang specifies it, instead of <code>*-ar</code>. This setting brings improved LTO
+       support.</li>
+
+       <li>Removed the <code>include-fixed/linux/a.out.h</code> and
+       <code>include-fixed/linux/compiler.h</code> headers from the GCC compiler.
+       (Issue <a href ="http://b.android.com/73728">73728</a>)</li>
+
+       <li>Fixed an issue related to <code>-flto</code> with GCC 4.8 on Mac OS X. The error message
+       read:</li>
+
+       <pre>
+.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
+Symbol not found: _environ
+</pre>
+
+       <li>Fixed a typo in <code>build-binary.mk.</code> (Issue
+       <a href="http://b.android.com/76992">76992</a>)</li>
+     </ul>
+     </dd>
+
+   <dt>Important known issues:</dt>
+     <dd>
+     <ul>
+     <li>Specifying -Os (<code>-fauto-profile</code>) in GCC4.9 may cause crashing.
+     (Issue <a href="http://b.android.com/77571">77571</a>)</li>
+     </ul>
+     </dd>
+
+   </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+<a name="10b"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 10b</a> <em>(September 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+   <dl>
+
+        <dt>Important notes:</dt>
+     <dd>
+     <ul>
+      <li>Because of the 512MB size restriction on downloadable packages, the following 32-bit items are not in the 32-bit NDK download packages. Instead, they reside in the 64-bit ones:</li>
+      <ul>
+      <li>Android-L headers</li>
+      <li>GCC 4.9</li>
+      </ul>
+     <li>Currently, the only Renderscript support provided by the NDK is for 32-bit Renderscript with Android 4.4 (API level 19). You cannot build HelloComputeNDK (the only Renderscript sample) with any other combination of Renderscript (32- or 64-bit) and Android version.</li>
+     <li>To compile native-codec, you must use a 64-bit NDK package, which is where all the Android-L headers are located. </li>
+     </ul>
+     </dd>
+
+
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+     <li>Fixed gdb 7.6 in GCC 4.8/4.9. (Issues <a href="http://b.android.com/74112">74112</a> and <a href="http://b.android.com/74371">74371</a>.)</li>
+     <li>Fixed GCC 4.8/4.9 for x86, so that they no longer enable <code>-msse4.2</code> and <code>-mpopcnt</code> by default. (Issue <a href="http://b.android.com/73843">73843</a>.)</li>
+     </ul>
+     </dd>
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+     <li>Removed <code>stdio.h</code> from the <code>include-fixed/</code> directories of all versions of GCC. (Issue <a href="http://b.android.com/73728">73728</a>.)</li>
+     <li>Removed duplicate header files from the Windows packages in the <code>platforms/android-L/arch-*/usr/include/linux/netfilter*/</code> directories. (Issue <a href="https://code.google.com/p/android/issues/detail?id=73704">73704</a>.)</li>
+     <li>Fixed a problem that prevented Clang from building HelloComputeNDK.</li>
+     <li>Fixed atexit. (Issue <a href="http://b.android.com/66595">66595</a>.)</li>
+     <li>Made various fixes to the docs in <code>docs/</code> and <code>sources/third_party/googletest/README.NDK</code>. (Issue <a href="http://b.android.com/74069">74069</a>.)</li>
+     <li>Made the following fixes to the Android-L headers:</li>
+     <ol>
+     <li>Added the following functions to <code>ctype.h</code> and <code>wchar.h</code>: <code>dn_expand()</code>, <code>grantpt()</code>, <code> inet_nsap_addr()</code>, <code>inet_nsap_ntoa()</code>, <code>insque()</code>, <code>nsdispatch()</code>, <code>posix_openpt()</code>, <code>__pthread_cleanup_pop()</code>, <code>__pthread_cleanup_push()</code>, <code>remque()</code>, <code>setfsgid()</code>, <code>setfsuid()</code>, <code>splice()</code>, <code>tee()</code>, <code>twalk()</code> (Issue <a href = "http://b.android.com/73719">73719</a>), and 42 <code>*_l()</code> functions.</li>
+
+    <li>Renamed <code>cmsg_nxthdr</code> to <code>__cmsg_nxthdr</code>.</li>
+
+    <li>Removed <code>__libc_malloc_dispatch</code>.</li>
+
+    <li>Changed the <code>ptrace()</code> prototype to <code>long ptrace(int, ...);</code>.</li>
+
+    <li>Removed <code>sha1.h</code>.</li>
+
+    <li>Extended <code>android_dlextinfo</code> in <code>android/dlext.h</code>.</li>
+
+    <li>Annotated <code>__NDK_FPABI__</code> for functions receiving or returning float- or double-type values in <code>stdlib.h</code>, <code>time.h</code>, <code>wchar.h</code>, and <code>complex.h</code>.</li>
+    </ol>
+     </ul>
+     </dd>
+
+     <dt>Other changes:</dt>
+     <dd>
+     <ul>
+        <li>Updated <code>mipsel-linux-android-4.9</code> and <code>mips64el-linux-android-4.9</code>, implementing a new multilib directory layout, and providing support for gdb-7.7</li>
+        <li>Enhanced <code>cpu-features</code> to detect more arm64 features.  (Change list <a href="https://android-review.googlesource.com/#/c/100339">100339</a>.)</li>
+     </dd>
+     </ul>
+
+   </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+<a name="10"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 10</a> <em>(July 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+      <ul>
+        <li>Added 3 new ABIs, all 64-bit: arm64-v8a, x86_64, mips64.</li> Note that:
+        <ul>
+           <li>GCC 4.9 is the default compiler for 64-bit ABIs. Clang is currently version 3.4.
+<code>NDK_TOOLCHAIN_VERSION=clang</code>
+      may not work for arm64-v8a and mips64.</li>
+           <li>Android-L is the first level with 64-bit support.  Note that this API
+level is a temporary one, and only for L-preview. An actual API level number will replace it at
+L-release.</li>
+           <li>This release includes now includes <code>all32</code> and <code>all64</code>
+settings for <code>APP_ABI</code>.
+              <ul>
+              <li><code>APP_ABI=all32</code> is equivalent to
+<code>APP_ABI=armeabi,armeabi-v7a,x86,mips</code>.</li>
+              <li><code>APP_ABI=all64</code> is equivalent to
+<code>APP_ABI=arm64-v8a,x86_64,mips64</code>.</li>
+              <li><code>APP_ABI=all</code> selects all ABIs.</li>
+              </ul>
+           <li>The new GNU libstdc++ in Android-L contains all <code>&lt;tr1/cmath&gt;</code>
+Before defining your own math function, check <code>_GLIBCXX_USE_C99_MATH_TR1</code> to see a
+function with that name already exists, in order to avoid "multiple definition" errors from the
+linker.</li>
+           <li>The cpu-features library has been updated for the ARMv8 kernel.  The existing
+cpu-features library may fail to detect the presence of NEON on the ARMv8 platform. Recompile your
+code with the new version.</li>
+        </ul>
+        <li>Added a new <code>platforms/android-L/</code> API directory. It includes:</li>
+        <ul>
+           <li>Updated Bionic headers, which had not changed from Android API levels 3
+(Cupcake) to 19 (KitKat). This new version, for level L, is to be synchronized with AOSP.</li>
+           <li>New media APIs and a native-codec sample.</li>
+           <li>An updated <code>Android.h</code> header for SLES/OpenSLES, enabling support for
+single-precision, floating-point audio format in AudioPlayer.</li>
+           <li>GLES 3.1 and AEP extensions to <code>libGLESv3.so.</code></li>
+           <li>GLES2 and GLES3 headers updated to the latest official Khronos versions.</li>
+        </ul>
+        <li>Added GCC 4.9 compilers to the 32-/64-bit ABIs.  GCC 4.9 is the default (only) compiler
+for 64-bit ABIs, as previously mentioned.  For 32-bit ABIs, you must explcitly enable GCC 4.9, as
+GCC 4.6 is still the default.</li>
+        <ul>
+           <li>For ndk-build, enable 32-bit, GCC 4.9 building either by adding
+<code>NDK_TOOLCHAIN_VERSION=4.9</code> to <code>Application.mk</code>, or exporting it as an
+environment variable from the command line.</li>
+           <li>For a standalone toolchain, use the <code>--toolchain=</code> option in the
+<code>make-standalone-toolchain.sh</code> script. For example: <code>--toolchain=arm-linux-androideabi-4.9.</code></li>
+        </ul>
+        <li>Upgraded GDB to version 7.6 in GCC 4.8/4.9 and x86*. Since GDB is still at version GDB-7.3.x in
+GCC 4.6 (the default for ARM and MIPS), you must set
+<code>NDK_TOOLCHAIN_VERSION=4.8</code> or <code>4.9</code> to enable ndk-gdb to select GDB 7.6.</li>
+        <li>Added the <code>-mssse3</code> build option to provide SSSE3 support, and made it the default for ABI x86
+(upgrading from SSE3). The image released by Google does not contain SSSE3 instructions.</li>
+        <li>Updated GCC 4.8 to 4.8.3.</li>
+        <li>Improved ARM libc++ EH support by switching from gabi++ to libc++abi. For details, see the "C++ Support" section of the documentation.
+  Note that:</li>
+        <ul>
+           <li>All tests except for locale now pass for Clang 3.4 and GCC 4.8. For more
+information, see the "C++ Support" section of the documentation.</li>
+           <li>The libc++ libraries for X86 and MIPS libc++ still use gabi++.</li>
+           <li>GCC 4.7 and later can now use &lt;atomic&gt;.</li>
+           <li>You must add <code>-fno-strict-aliasing</code> if you use <code> &lt;list&gt;</code>, because <code>__list_imp::_end</code>_ breaks
+      TBAA rules.  (Issue <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571">61571</a>.)</li>
+           <li>As of GCC 4.6, LIBCXX_FORCE_REBUILD:=true no longer rebuilds libc++. Rebuilding it
+requires the use of a different compiler. Note that Clang 3.3 is untested.</li>
+        </ul>
+        <li>mclinker is now version 2.7, and has aarch64 Linux support.</li>
+        <li>Added precompiled header support for headers specified by <code>LOCAL_PCH</code>.  (Issue <a href="http://b.android.com/25412">25412</a>).</li>
+      </dd>
+   <dl>
+
+
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Fixed libc++ so that it now compiles <code>std::feof</code>, etc. (Issue <a
+href="http://b.android.com/66668">66668</a>).</li>
+       <li>Fixed a Clang 3.3/3.4 atomic library call that caused crashes in some of the libc++
+tests for ABI armeabi.</li>
+       <li>Fixed Clang 3.4 crashes that were occurring on reading precompiled headers. (Issue <a
+href="http://b.android.com/66657">66657</a>).</li>
+       <li>Fixed the Clang 3.3/3.4 <code>-O3</code> assert on:</li>
+       <code>llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode*
+llvm::MDBuilder::createBranchWeights(llvm::ArrayRef<unsigned int>): Assertion Weights.size() >= 2
+&& "Need at least two branch weights!"</code> (Issue <a href="http://b.android.com/57381">57381</a>).
+       <li>Fixed the following Clang 3.3/3.4 crash:</li>
+       <code>Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file
+Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018</code>.
+(Issue <a href="http://b.android.com/66950">66950</a>).
+     </ul>
+     </dd>
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Fixed headers:</li>
+       <ul>
+          <li>Fixed 32-bit <code>ssize_t</code> to be <code>int</code> instead of <code>long
+int</code>.</li>
+          <li>Fixed <code>WCHAR_MIN</code> and <code>WCHAR_MAX</code> so that they they take
+appropriate signs according to the architecture they're running on:</li>
+          <ul>
+             <li>X86/MIPS: signed.
+             <li>ARM: unsigned.
+             <li>To force X86/MIPS to default to unsigned, use
+<code>-D__WCHAR_UNSIGNED__</code>.</li>
+             <li>To force <code>wchar_t</code> to be 16 bits, use <code>-fshort-wchar</code>.</li>
+          </ul>
+          <li>Removed non-existent symbols from 32-bit <code>libc.so</code>, and added <code>pread64</code>,
+<code>pwrite64</code>, <code>ftruncate64</code> for
+Android API level 12 and higher. (Issue <a href="http://b.android.com/69319">69319</a>). For more
+information, see the commit message accompanying AOSP change list
+     <a href="https://android-review.googlesource.com/#/c/94137">94137</a>.</li>
+       </ul>
+       <li>Fixed GCC warning about redefinition of <code>putchar</code>. Warning message reads:</li>
+       <code>include/stdio.h:236:5: warning: conflicts with previous declaration here
+[-Wattributes] int  putchar(int);</code> (Change list <a
+href="https://android-review.googlesource.com/#/c/91185">91185</a>).
+       <li>Fixed <code>make-standalone-toolchain.sh --stl=libc++</code> so that it:</li>
+       <ul>
+          <li>Copies <code>cxxabi.h</code>. (Issue <a
+href="http://b.android.com/68001">68001</a>).</li>
+          <li>Runs in directories other than the NDK install directory. (Issues <a
+href="http://b.android.com/67690">67690</a> and <a href="http://b.android.com/68647">68647</a>).</li>
+       </ul>
+       <li>Fixed GCC/Windows to quote arguments only when necessary for spawning processes in
+external programs. This change decreases the likelihood of exceeding the 32K length limit.</li>
+       <li>Fixed an issue that made it impossible to adjust the <code>APP_PLATFORM</code>
+environment variable.</li>
+       <li>Fixed the implementation of <code>IsSystemLibrary()</code> in crazy_linker so that it
+uses <code>strrchr()</code>
+  instead of <code>strchr()</code> to find the library path's true basename.</li>
+       <li>Fixed native-audio's inability to build in debug mode.</li>
+       <li>Fixed gdb's inability to print extreme floating-point numbers. (Issue <a
+href="http://b.android.com/69203">69203</a>).</li>
+       <li>Fixed Clang 3.4 inability to compile with <code>-Wl,-shared</code> (as opposed to
+<code>-shared</code>, which
+  had no compilation issues).  The problem was that Clang added <code>-pie</code> for Android
+targets if neither <code>-shared</code> nor <code>-static</code> existed. This behavior, which was
+incorrect, caused the linker to complain that <code>-shared</code> and <code>-pie</code> could not
+co-exist.</li>
+
+     </ul>
+     </dd>
+
+
+     <dt>Other changes:</dt>
+     <dd>
+     <ul>
+        <li>Added <code>arm_neon.h</code> to the x86 toolchain so that it now emulates ~47% of
+Neon. There is currently no support for 64-bit types. For more information, see the section on ARM
+Neon intrinsics support in the x86 documentation.</li>
+        <li>Ported ARM/GOT_PREL optimization (present in GCC 4.6 built from the GCC google branch) to
+ARM GCC 4.8/4.9.  This optimization sometimes reduces instruction count when accessing global
+variables.  As an example, see the build.sh script in
+<code>$NDK/tests/build/b14811006-GOT_PREL-optimization/</code>.</li>
+        <li>Added ARM version for STL gabi++, stlport, and libc++. They now have both it and Thumb
+mode.</li>
+        <li>It is now possible to call the make-standalone-toolchain.sh script with
+<code>--toolchain=x86_64-linux-android-4.9</code>, which is equivalent to
+<code>--toolchain=x86_64-4.9</code>.</li>
+     </dd>
+     </ul>
+   </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+<a name="9d"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 9d</a> <em>(March 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+      <ul>
+        <li>Added support for the Clang 3.4 compiler. The
+<code>NDK_TOOLCHAIN_VERSION=clang</code> option now picks Clang 3.4. GCC 4.6 is
+still the default compiler.</li>
+        <li>Added <code>APP_ABI=armeabi-v7a-hard</code>, with
+additional multilib option <code>-mfloat-abi=hard</code>. These options are for
+use with ARM GCC 4.6/4.8 and Clang 3.3/3.4 (which use 4.8's assembler, linker,
+and libs). When using these options, note the following changes:</li>
+        <ul>
+           <li> When executing the <code>ndk-build</code> script, add the
+following options for armeabi-v7a target:
+<pre>TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
+TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard</pre>
+The built library is copied to <code>libs/armeabi-v7a</code>. For make to
+behave as expected, you cannot specify both <code>armeabi-v7a</code> and
+<code>armeabi-v7a-hard</code> as make targets (i.e., on the APP_ABI= line).
+Doing so causes one of them to be ignored. Note that <code>APP_ABI=all</code>
+is still equivalent to
+<code>armeabi armeabi-v7a x86 mips</code>.</li>
+           <li>The <code>make-standalone-toolchain.sh</code> script copies
+additional libaries under <code>/hard</code> directories.
+      Add the above <code>CFLAGS</code> and <code>LFLAGS</code> to your
+makefile to enable GCC or Clang to link with
+      libraries in <code>/hard</code>.</li>
+        </ul>
+        <li>Added the yasm assembler, as well as <code>LOCAL_ASMFLAGS</code>
+and <code>EXPORT_ASMFLAGS</code> flags for x86
+targets. The <code>ndk-build</code> script uses
+<code>prebuilts/*/bin/yasm*</code> to build <code>LOCAL_SRC_FILES</code> that
+have the <code>.asm</code> extension.</li>
+        <li>Updated MClinker to 2.6.0, which adds <code>-gc-sections</code>
+support.</li>
+        <li>Added experimental libc++ support (upstream r201101).  Use this new
+feature by following these steps:
+        <ul>
+           <li>Add <code>APP_STL := c++_static</code> or <code>APP_STL :=
+c++_shared</code> in <code>Application.mk</code>.
+      You may rebuild from source via <code>LIBCXX_FORCE_REBUILD :=
+true</code></li>
+           <li>Execute <code>make-standalone-toolchain.sh --stl=libc++</code>
+to create a standalone toolchain with libc++ headers/lib.</li>
+        </ul>
+        For more information, see
+<code>CPLUSPLUS-SUPPORT.html</code>.
+(Issue <a href="http://b.android.com/36496">36496</a>)</li>
+      </ul>
+      </dd>
+   <dl>
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Fixed an uncaught throw from an unexpected
+exception handler for GCC 4.6/4.8 ARM EABI. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59392">59392</a>)</li>
+       <li>Fixed GCC 4.8 so that it now correctly resolves partial
+specialization of a template with
+  a dependent, non-type template argument. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59052">59052</a>)</li>
+       <li>Added more modules to prebuilt python (Issue <a
+href="http://b.android.com/59902">59902</a>):
+               <ul>
+                 <li>Mac OS X: <code>zlib</code>, <code>bz2</code>,
+<code>_curses</code>, <code>_curses_panel</code>, <code>_hashlib</code>,
+<code>_ssl</code></li>
+                 <li>Linux: <code>zlib</code>, <code>nis</code>,
+<code>crypt</code>, <code>_curses</code>, and <code>_curses_panel</code></li>
+               </ul>
+       <li>Fixed the x86 and MIPS gdbserver
+<code>event_getmsg_helper</code>.</li>
+       <li>Fixed numerous issues in the RenderScript NDK toolchain, including
+issues with compatibility across older devices and C++ reflection.</li>
+<br>
+     </ul>
+     </dd>
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Header fixes:
+         <ul>
+           <li>Fixed a missing <code>#include &lt;sys/types.h&gt;</code> in
+<code>android/asset_manager.h</code> for Android API level 13 and higher.
+     (Issue <a href="http://b.android.com/64988">64988</a>)</li>
+           <li>Fixed a missing <code>#include <stdint.h></code> in
+<code>android/rect_manager.h</code> for Android API level 14 and higher.</li>
+           <li>Added <code>JNICALL</code> to <code>JNI_OnLoad</code> and
+<code>JNI_OnUnload</code> in <code>jni.h</code>. Note that <code>JNICALL</code>
+ is defined as <code>__NDK_FPABI__</code> For more information, see
+<code>sys/cdefs.h</code>.</li>
+           <li>Updated the following headers so that they can be included
+without the need to
+manually include their dependencies (Issue <a
+href="http://b.android.com/64679">64679</a>):</li>
+<pre>
+android/tts.h
+EGL/eglext.h
+fts.h
+GLES/glext.h
+GLES2/gl2ext.h
+OMXAL/OpenMAXSL_Android.h
+SLES/OpenSLES_Android.h
+sys/prctl.h
+sys/utime.h
+</pre>
+           <li>Added <code>sys/cachectl.h</code> for all architectures. MIPS
+developers can now include this header instead of writing <code>#ifdef
+__mips__</code>.</li>
+           <li></code>Fixed <code>platforms/android-18/include/android/input.h
+</code> by adding <code>__NDK_FPABI__</code> to functions taking or returning
+float or double values.</li>
+           <li>Fixed MIPS <code>struct stat</code>, which was incorrectly set
+to its 64-bit counterpart for Android API level 12 and later. This wrong
+setting was a
+regression introduced in release r9c.</li>
+           <li>Defined <code>__PTHREAD_MUTEX_INIT_VALUE</code>,
+<code>__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE</code>,
+     and <code>__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE</code> for Android API
+level 9 and lower.</li>
+           <li>Added <code>scalbln</code>, <code>scalblnf</code>, and
+<code>scalblnl</code> to x86 <code>libm.so</code> for APIs 18 and later.</li>
+           <li>Fixed a typo in
+<code>sources/android/support/include/iconv.h</code>.
+     (Issue <a href="http://b.android.com/63806">63806</a>)</li>
+
+         </ul>
+       </li>
+       <li>Fixed gabi++ <code>std::unexpected()</code> to call
+<code>std::terminate()</code> so that
+  a user-defined <code>std::terminate()</code> handler has a chance to run.
+</li>
+       <li>Fixed gabi++ to catch <code>std::nullptr</code>.</li>
+       <li>Fixed samples Teapot and MoreTeapots:
+         <ul>
+      <li>Solved a problem with Tegra 2 and 3 chips by changing specular
+variables to use medium precision. Values for specular power can now be less
+than 1.0. </li>
+      <li>Changed the samples so that pressing the volume button restores
+immersive mode and invalidates
+<code>SYSTEM_UI_FLAG_IMMERSIVE_STICKY</code>. Screen rotation does not
+trigger <code>onSystemUiVisibilityChange</code>, and so does not restore
+immersive mode.</li>
+         </ul>
+        </li>
+        <li>Fixed the <code>ndk-build</code> script to add
+<code>-rpath-link=$SYSROOT/usr/lib</code> and
+<code>-rpath-link=$TARGET_OUT</code> in order to use <code>ld.bfd</code> to
+link executables. (Issue  <a href="http://b.android.com/64266">64266</a>)</li>
+        <li>Removed <code>-Bsymbolic</code> from all STL builds.</li>
+        <li>Fixed <code>ndk-gdb-py.cmd</code> by setting <code>SHELL</code> as
+an environment variable
+instead of passing it to
+  <code>python.exe</code>, which ignores the setting.
+  (Issue <a href="http://b.android.com/63054">63054</a>)</li>
+        <li>Fixed the <code>make-standalone-toolchain.sh</code> script so that
+the <code>--stl=stlport</code> option copies the gabi++ headers instead of
+symlinking them; the <code>cmd.exe</code> and MinGW shells do not understand
+symlinks created by cygwin.</li>
+     </ul>
+     </dd>
+
+     <dt>Other changes:</dt>
+     <dd>
+     <ul>
+        <li>Applied execution permissions to all <code>*cmd</code> scripts
+previously intended for use only in the <code>cmd.exe</code> shell, in case
+developers prefer to use <code>ndk-build.cmd</code> in cygwin instead of the
+recommended <code>ndk-build</code> script.</li>
+        <li>Improved the speed of the <code>make-standalone-toolchain.sh</code>
+script by moving instead of copying if the specified destination directory does
+not exist.</li>
+     </dd>
+     </ul>
+   </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+<a name="9c"></a>
+ <p>
+   <a href="#" onclick="return toggleContent(this)"> <img
+     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+   >Android NDK, Revision 9c</a> <em>(December 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+<p>This is a bug-fix-only release.</p>
+   <dl>
+     <dt>Important bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Fixed a problem with GCC 4.8 ARM, in which the stack pointer is
+restored too early. This problem prevented the frame pointer from reliably
+accessing a variable in the stack frame. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854">58854</a>)</li>
+<li>Fixed a problem with GCC 4.8 libstdc++, in which a bug in
+std::nth_element was causing generation of code that produced a random
+segfault. (Issue <a
+href="https://code.google.com/p/android/issues/detail?id=62910">62910</a>)</li>
+           <li>Fixed GCC 4.8 ICE in cc1/cc1plus with
+<code>-fuse-ld=mcld</code>, so that the following error no longer occurs:
+<pre>cc1: internal compiler error: in common_handle_option, at
+opts.c:1774</pre></li>
+           <li>Fixed <code>-mhard-float</code> support for
+<code>__builtin</code> math functions. For ongoing information on fixes for
+<code>-mhard-float</code> with STL, please follow Issue <a
+href="http://b.android.com/61784">61784</a>.</li>
+     </ul>
+     </dd>
+
+     <dt>Other bug fixes:</dt>
+     <dd>
+     <ul>
+       <li>Header fixes:
+         <ul>
+           <li>Changed prototype of <code>poll</code> to <code>poll(struct
+pollfd *, nfds_t, int);</code> in <code>poll.h</code>.</li>
+           <li>Added <code>utimensat</code> to <code>libc.so</code> for Android
+API levels 12 and 19. These libraries are now included for all Android API
+levels 12 through 19.</li>
+<li>Introduced <code>futimens</code> into <code>libc.so</code>, for Android API
+level 19.</li>
+<li>Added missing <code>clock_settime()</code> and
+<code>clock_nanosleep()</code> to <code>time.h</code> for Android API level 8
+and higher.</li>
+<li>Added <code>CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE,
+CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,</code> and
+<code>CLOCK_BOOTTIME_ALARM</code> in <code>time.h.</code></li>
+<li>Removed obsolete <code>CLOCK_REALTIME_HR</code> and
+<code>CLOCK_MONOTONIC_HR.</code></li>
+         </ul>
+       </li>
+       <li>In samples Teapot, MoreTeapots, and
+<code>source/android/ndk_helper</code>:
+         <ul>
+<li>Changed them so that they now use a hard-float abi for armeabi-v7a.</li>
+<li>Updated them to use immersive mode on Android API level 19 and
+higher.</li>
+<li>Fixed a problem with <code>Check_ReleaseStringUTFChars</code> in
+<code>/system/lib/libdvm.so</code> that was causing crashes on x86 devices.</li>
+         </ul>
+        </li>
+<li>Fixed <code>ndk-build</code> fails that happen in cygwin when the NDK
+package is
+referenced via symlink.</li>
+<li>Fixed <code>ndk-build.cmd</code> fails that happen in windows
+<code>cmd.exe</code> when
+<code>LOCAL_SRC_FILES</code> contains absolute paths. (Issue <a
+href="https://android-review.googlesource.com/#/c/69992">69992</a>)</li>
+<li>Fixed the <code>ndk-stack</code> script to proceed even when it can't parse
+a frame due to inability to find a routine, filename, or line number. In any of
+these cases, it prints <code>??</code>.</li>
+<li>Fixed the <code>ndk-stack</code> stack for windows-x64_64 targets so that
+it no longer erroneously matches a frame line with a line in the
+<code>stack:</code> section that doesn't contain <code>pc</code>,
+<code>eip</code>, or <code>ip</code>. For example:
+<pre>I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
+/system/lib/libc.so</pre></li>
+<li>Fixed gabi++ so that it:
+     <ul>
+         <li>Does not use malloc() to allocate C++ thread-local
+  objects.</li>
+         <li>Avoids deadlocks in gabi++ in cases where libc.debug.malloc is
+non-zero in userdebug/eng Android platform builds.</li>
+     </ul>
+     </ul>
+     </dd>
+
+     <dt>Other changes:</dt>
+     <dd>
+     <ul>
+       <li>Added <code>LOCAL_EXPORT_LDFLAGS</code>.</li>
+<li>Introduced the <code>NDK_PROJECT_PATH=null</code> setting for use in an
+integrated build system where options are explicitly passed to
+<code>ndk-build</code>. With this setting, <code>ndk-build</code> makes no
+attempt to look for <code>NDK_PROJECT_PATH.</code> This setting also prevents
+variables from deriving default settings from NDK_PROJECT_PATH. As a result,
+the following variables must now be explicitly specified (with their default
+values if such exist): <code>NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT,
+NDK_DEBUG</code> (optional, default to 0), and other <code>APP_*</code>'s
+contained in <code>Application.mk</code>.</li>
+<li><code>APP_ABI</code> can now be enumerated in a comma-delimited list. For
+example:
+<pre>APP_ABI := "armeabi,armeabi-v7a"</pre></li>
+<li>Provided the ability to rebuild all of STL with debugging info in an
+optional, separate package called
+<code>android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip</code>, using the
+<code>-g</code> option. This option
+helps the <code>ndk-stack</code> script provide better a stack dump across STL.
+This change should not affect the code/size of the final, stripped file.</li>
+<li>Enhanced <code>hello-jni</code> samples to report <code>APP_ABI</code> at
+compilation.</li>
+<li>Used the <code>ar</code> tool in Deterministic mode (option
+<code>-D</code>) to build static libraries.  (Issue <a
+href="http://b.android.com/60705">60705</a>)</li>
+     </ul>
+     </dd>
+
+   </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+<a name="9b"></a>
+  <p>
+    <a href="#" onclick="return toggleContent(this)"> <img
+      src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+    >Android NDK, Revision 9b</a> <em>(October 2013)</em>
+  </p>
+  <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+      <ul>
+        <li>Updated {@code include/android/*h} and {@code math.h} for all Android API levels up to
+          18, including the addition of levels 13, 15, 16 and 17.
+          For information on added APIs, see commit messages for Changes
+          <a href="https://android-review.googlesource.com/68012">68012</a> and
+          <a href="https://android-review.googlesource.com/68014">68014</a>.
+          (Issues <a href="http://b.android.com/47150">47150</a>,
+           <a href="http://b.android.com/58528">58528</a>, and
+           <a href="http://b.android.com/38423">38423</a>)</li>
+        <li>Added support for Android API level 19, including Renderscript binding.</li>
+        <li>Added support for <code>-mhard-float</code> in the existing armeabi-v7a ABI. For more
+          information and current restrictions on Clang, see
+          {@code tests/device/hard-float/jni/Android.mk}.</li>
+        <li>Migrated from GNU Compiler Collection (GCC) 4.8 to 4.8.2, and added diagnostic color
+          support. To enable diagnostic colors, set <code>-fdiagnostics-color=auto</code>,
+          <code>-fdiagnostics-color=always,</code> or export {@code GCC_COLORS} as shown below:
+<pre>
+GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+</pre>
+          For more information, see
+          <a href="http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html">GCC
+          Language Independent Options</a>.
+        </li>
+        <li>Added two new samples to demonstrate OpenGL ES 3.0 features: Teapot and MoreTeapots.
+          These samples run on devices with Android 4.1 (API level 16) and higher.</li>
+        <li>Deprecated GCC 4.7 and Clang 3.2 support, which will be removed in the next
+          release.</li>
+      </ul>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+      <dd>
+      <ul>
+        <li>Fixed problem with ARM GCC 4.6 {@code thumb2} failing to generate 16-bit relative jump
+          tables. (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48328">GCC Issue</a>)</li>
+        <li>Fixed GCC 4.8 internal compiler error (ICE) on
+          {@code g++.dg/cpp0x/lambda/lambda-defarg3.C}.
+          (<a href="https://android-review.googlesource.com/62770">Change 62770</a>,
+          <a href="http://gcc.gnu.org/ml/gcc/2013-07/msg00424.html">GCC Issue</a>)</li>
+        <li>Fixed a problem with Windows 32-bit {@code *-gdb.exe} executables failing to launch.
+          (<a href="http://b.android.com/58975">Issue 58975</a>)</li>
+        <li>Fixed GCC 4.8 ICE when building bullet library. The error message is as follows:
+          <pre>internal compiler error: verify_flow_info failed</pre>
+          (<a href="http://b.android.com/58916">Issue 58916</a>,
+           <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58165">GCC Issue</a>)</li>
+        <li>Modified GDB/ARM build to skip {@code ARM.exidx} data for unwinding in prologue code and
+          added a command ({@code set arm exidx-unwinding}) to control exidx-based stack unwinding.
+          (<a href="http://b.android.com/55826">Issue 55826</a>)</li>
+        <li>Fixed Clang 3.3 MIPS compiler problem where HI and LO registers are incorrectly
+          reused.</li>
+        <li>Fixed issue with MIPS 4.7 ICE in {@code dbx_reg_number}. The error message is as
+follows:
+<pre>
+external/icu4c/i18n/decimfmt.cpp:1322:1:
+internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
+</pre>
+          (<a href="http://gcc.gnu.org/ml/gcc-patches/2012-12/msg00830.html">GCC Patch</a>)
+
+        </li>
+
+      </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+      <dd>
+      <ul>
+        <li>Header fixes
+          <ul>
+            <li>Fixed the ARM {@code WCHAR_MIN} and {@code WCHAR_MAX} to be unsigned according to
+              spec (the X86/MIPS versions are signed). Define {@code _WCHAR_IS_ALWAYS_SIGNED} to
+              restore old behavior. (<a href="http://b.android.com/57749">Issue 57749</a>)</li>
+            <li>Fixed {@code include/netinet/tcp.h} to contain {@code TCP_INFO} state enum.
+              (<a href="http://b.android.com/38881">Issue 38881</a>)</li>
+            <li>Fixed the {@code cdefs_elh.h} macro {@code _C_LABEL_STRING} to stop generating
+               warnings in the GCC 4.8 toolchain when using c++11 mode.
+              (<a href="http://b.android.com/58135">Issue 58135</a>,
+               <a href="http://b.android.com/58652">Issue 58652</a>)</li>
+            <li>Removed non-existent functions {@code imaxabs} and {@code imaxdiv} from header
+              {@code inttypes.h}.</li>
+            <li>Fixed issue with {@code pthread_exit()} return values and {@code pthread_self()}.
+                 (<a href="http://b.android.com/60686">Issue 60686</a>)</li>
+            <li>Added missing {@code mkdtemp()} function, which already exists in {@code bionic}
+              header {@code stdlib.h}.</li>
+          </ul>
+        </li>
+        <li>Fixed problem building {@code samples/gles3jni} with Clang on Android API level 11.</li>
+        <li>Fixed MCLinker to allow multiple occurrences of the following options:
+          {@code -gc-sections} and {@code --eh-frame-hdr}.</li>
+        <li>Fixed MCLinker to accept the {@code --no-warn-mismatch} option.</li>
+        <li>Modified {@code cpu-features} option to not assume all VFPv4 devices support IDIV.
+          Now this option only adds IDIV to white-listed devices, including Nexus 4.
+          (<a href="http://b.android.com/57637">Issue 57637</a>)</li>
+        <li>Fixed problem with {@code android_native_app_glue.c} erroneously logging errors on event
+          predispatch operations.</li>
+        <li>Fixed all operations on {@code gabi++} terminate and unexpected_handler to be
+          thread-safe.</li>
+        <li>Fixed several issues with Clang <code>-integrated-as</code> option so it can pass
+          tests for {@code ssax-instructions} and {@code fenv}.</li>
+        <li>Fixed GCC 4.6/4.7/4.8 compiler to pass the linker option {@code --eh-frame-hdr} even
+          for static executables. For more information, see the
+          <a href="http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00969.html">GCC patch</a>.</li>
+        <li>Fixed extra apostrophe in <code>CPU-ARCH-ABIS.html</code>. For more information, see
+          <code>NDK-DEPENDS.html</code>. (<a href="http://b.android.com/60142">Issue 60142</a>)</li>
+        <li>Fixed extra quotes in ndk-build output on Windows.
+          (<a href="http://b.android.com/60649">Issue 60649</a>)</li>
+        <li>Fixed Clang 3.3 to compile ARM's built-in, atomic operations such as
+          {@code __atomic_fetch_add}, {@code __atomic_fetch_sub}, and {@code __atomic_fetch_or}.
+          </li>
+        <li>Fixed Clang 3.3 ICE with customized {@code vfprintf}.
+          (<a href="http://llvm.org/bugs/show_bug.cgi?id=16344">Clang issue</a>)
+        </li>
+      </ul>
+      </dd>
+
+      <dt>Other changes:</dt>
+      <dd>
+      <ul>
+        <li>Enabled OpenMP for all GCC builds. To use this feature, add the following flags to your
+          build settings:
+<pre>
+LOCAL_CFLAGS += -fopenmp
+LOCAL_LDFLAGS += -fopenmp
+</pre>
+          For code examples, see {@code tests/device/test-openmp}</li>
+        <li>Reduced the size of {@code ld.mcld} significantly (1.5MB vs. {@code ld.bfd} 3.5MB and
+          {@code ld.gold} 7.5MB), resulting in a speed improvement of approximately 20%.</li>
+        <li>Added <code>LOCAL_CONLYFLAGS</code> and <code>APP_CONLYFLAGS</code> to specify
+          options applicable to C only but not C++. The existing <code>LOCAL_CFLAGS</code>
+          and <code>APP_CFLAGS</code> are also used for C++ compilation (to save trouble of
+          specifying most options twice), so options such as <code>-std=gnu99</code> may fail in
+          g++ builds with a warning and clang++ builds with an error.</li>
+        <li>Added {@code gabi++} array helper functions.</li>
+        <li>Modified GCC builds so that all {@code libgcc.a} files are built with
+          <code>-funwind-tables</code> to allow the stack to be unwound past previously blocked
+          points, such as <code>__aeabi_idiv0</code>.</li>
+        <li>Added Ingenic MXU support in MIPS GCC4.6/4.7/4.8 with new <code>-mmxu</code>
+option.</li>
+        <li>Extended MIPS GCC4.6/4.7/4.8 <code>-mldc1-sdc1</code> to control ldxc1/sdxc1 too</li>
+        <li>Added crazy linker. For more information, see
+          {@code sources/android/crazy_linker/README.TXT}.</li>
+        <li>Fixed {@code bitmap-plasma} to draw to full screen rather than a 200x200 pixel
+area.</li>
+        <li>Reduced linux and darwin toolchain sizes by 25% by creating symlinks to identical files.
+          </li>
+      </ul>
+      </dd>
+
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+<a name="9"></a>
+  <p>
+    <a href="#" onclick="return toggleContent(this)"> <img
+      src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+    >Android NDK, Revision 9</a> <em>(July 2013)</em>
+  </p>
+  <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+        <ul>
+          <li>Added support for Android 4.3 (API level 18). For more information, see
+            {@code STABLE-APIS.html} and new code examples in {@code samples/gles3jni/README}.
+          <li>Added headers and libraries for OpenGL ES 3.0, which is supported by Android 4.3
+            (API level 18) and higher.</li>
+          <li>Added GNU Compiler Collection (GCC) 4.8 compiler to the NDK. Since GCC 4.6 is still
+            the default, you must explicitly enable this option:
+            <ul>
+              <li>For {@code ndk-build} builds, export {@code NDK_TOOLCHAIN_VERSION=4.8} or
+                add it in {@code Application.mk}.</li>
+              <li>For standalone builds, use the {@code --toolchain=} option in
+                {@code make-standalone-toolchain.sh}, for example:<br>
+                {@code --toolchain=arm-linux-androideabi-4.8}</li>
+            </ul>
+            <p class="note"><strong>Note:</strong>
+            The {@code -Wunused-local-typedefs} option is enabled by {@code -Wall}. Be
+            sure to add {@code __attribute__((unused))} if you use compile-time asserts like
+            {@code sources/cxx-stl/stlport/stlport/stl/config/features.h}, line #311. For more
+            information, see
+            <a href="https://android-review.googlesource.com/#/c/55460">Change 55460</a></p>
+            <p class="note"><strong>Note:</strong>
+            In the GCC 4.7 release and later, ARM compilers generate unaligned access code by
+            default for ARMv6 and higher build targets. You may need to add the
+            {@code -mno-unaligned-access} build option when building for kernels that do not support
+            this feature.</p>
+          </li>
+          <li>Added Clang 3.3 support. The {@code NDK_TOOLCHAIN_VERSION=clang} build option
+            now picks Clang 3.3 by default.
+            <p class="note"><strong>Note:</strong>
+             Both GCC 4.4.3 and Clang 3.1 are deprecated, and will be removed from the next NDK
+             release.</p></li>
+          <li>Updated GNU Project Debugger (GDB) to support python 2.7.5.</li>
+          <li>Added MCLinker to support Windows hosts. Since {@code ld.gold}
+            is the default where available, you must add {@code -fuse-ld=mcld} in
+            {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} to enable MCLinker.</li>
+          <li>Added {@code ndk-depends} tool which prints ELF library dependencies.
+            For more information, see {@code NDK-DEPENDS.html}.
+            (<a href="http://b.android.com/53486">Issue 53486</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>Fixed potential event handling issue in {@code android_native_app_glue}.
+            (<a href="http://b.android.com/41755">Issue 41755</a>)</li>
+          <li>Fixed ARM/GCC-4.7 build to generate sufficient alignment for NEON load and store
+            instructions VST and VLD.
+            (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271">GCC Issue 57271</a>)</li>
+          <li>Fixed a GCC 4.4.3/4.6/4.7 internal compiler error (ICE) for a constant negative index
+            value on a string literal.
+            (<a href="http://b.android.com/54623">Issue 54623</a>)</li>
+          <li>Fixed GCC 4.7 segmentation fault for constant initialization with an object address.
+            (<a href="http://b.android.com/56508">Issue 56508</a>)</li>
+          <li>Fixed GCC 4.6 ARM segmentation fault for <code>-O</code> values when using Boost
+            1.52.0. (<a href="http://b.android.com/42891">Issue 42891</a>)
+          <li>Fixed {@code libc.so} and {@code libc.a} to support the {@code wait4()} function.
+            (<a href="http://b.android.com/19854">Issue 19854</a>)</li>
+          <li>Updated the x86 libc.so and libc.a files to include the {@code clone()}
+            function.</li>
+          <li>Fixed {@code LOCAL_SHORT_COMMANDS} bug where the {@code linker.list} file is
+            empty or not used.</li>
+          <li>Fixed GCC MIPS build on Mac OS to use CFI directives, without which
+            {@code ld.mcld --eh-frame-hdr} fails frequently.</li>
+          <li>Fixed Clang 3.2 X86/MIPS internal compiler error in {@code llvm/lib/VMCore/Value.cpp}.
+            (<a href="https://android-review.googlesource.com/#/c/59021">Change 59021</a>)</li>
+          <li>Fixed GCC 4.7 64-bit Windows assembler crash. (Error: {@code out of memory allocating
+            4294967280 bytes}).</li>
+          <li>Updated {@code ndk-gdb} script so that the {@code --start} or {@code --launch} actions
+            now wait for the GNU Debug Server, so that it can more reliably hit breakpoints set
+            early in the execution path (such as breakpoints in JNI code).
+            (<a href="http://b.android.com/41278">Issue 41278</a>)
+            <p class="note"><strong>Note:</strong>
+              This feature requires jdb and produces warning about pending breakpoints.
+              Specify the {@code --nowait} option to restore previous behavior.
+            </p>
+          </li>
+          <li>Fixed GDB crash when library list is empty.</li>
+          <li>Fixed GDB crash when using a {@code stepi} command past a {@code bx pc} or
+            {@code blx pc} Thumb instruction.
+            (<a href="http://b.android.com/56962">Issue 56962</a>,
+             <a href="http://b.android.com/36149">Issue 36149</a>)</li>
+          <li>Fixed MIPS {@code gdbserver} to look for {@code DT_MIPS_RLD_MAP} instead of
+            {@code DT_DEBUG}. (<a href="http://b.android.com/56586">Issue 56586</a>)</li>
+          <li>Fixed a circular dependency in the ndk-build script, for example: If A-&gt;B and
+            B-&gt;B, then B was dropped from build.
+            (<a href="http://b.android.com/56690">Issue 56690</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>Fixed the {@code ndk-build} script to enable you to specify a version of Clang as a
+            command line option (e.g., {@code NDK_TOOLCHAIN_VERSION=clang3.2}). Previously, only
+            specifying the version as an environment variable worked.</li>
+          <li>Fixed gabi++ size of {@code _Unwind_Exception} to be 24 for MIPS build targets when
+            using the Clang compiler.
+            (<a href="https://android-review.googlesource.com/#/c/54141">Change 54141</a>)</li>
+          <li>Fixed the {@code ndk-build} script to ensure that built libraries are actually
+            removed from projects that include prebuilt static libraries when using the
+            {@code ndk-build clean} command.
+            (<a href="https://android-review.googlesource.com/#/c/54461">Change 54461</a>,
+             <a href="https://android-review.googlesource.com/#/c/54480">Change 54480</a>)</li>
+          <li>Modified the {@code NDK_ANALYZE=1} option to be less verbose.</li>
+          <li>Fixed {@code gnu-libstdc++/Android.mk} to include a {@code backward/} path for builds
+            that use backward compability.
+            (<a href="http://b.android.com/53404">Issue 53404</a>)</li>
+          <li>Fixed a problem where {@code stlport new} sometimes returned random values.</li>
+          <li>Fixed {@code ndk-gdb} to match the order of {@code CPU_ABIS}, not {@code APP_ABIS}.
+            (<a href="http://b.android.com/54033">Issue 54033</a>)</li>
+          <li>Fixed a problem where the NDK 64-bit build on MacOSX choses the wrong path for
+            compiler.
+            (<a href="http://b.android.com/53769">Issue 53769</a>)</li>
+          <li>Fixed build scripts to detect 64-bit Windows Vista.
+            (<a href="http://b.android.com/54485">Issue 54485</a>)</li>
+          <li>Fixed x86 {@code ntonl/swap32} error: {@code invalid 'asm': operand number
+            out of range}.
+            (<a href="http://b.android.com/54465">Issue 54465</a>,
+             <a href="https://android-review.googlesource.com/#/c/57242">Change 57242</a>)</li>
+          <li>Fixed {@code ld.gold} to merge string literals.</li>
+          <li>Fixed {@code ld.gold} to handle large symbol alignment.</li>
+          <li>Updated {@code ld.gold} to enable the {@code --sort-section=name} option.</li>
+          <li>Fixed GCC 4.4.3/4.6/4.7 to suppress the {@code -export-dynamic} option for
+            statically linked programs. GCC no longer adds an {@code .interp} section for statically
+            linked programs.</li>
+          <li>Fixed GCC 4.4.3 {@code stlport} compilation error about inconsistent {@code typedef}
+            of {@code _Unwind_Control_Block}.
+            (<a href="http://b.android.com/54426">Issue 54426</a>)</li>
+          <li>Fixed {@code awk} scripts to handle {@code AndroidManifest.xml} files created on
+            Windows which may contain trailing {@code \r} characters and cause build errors.
+            (<a href="http://b.android.com/42548">Issue 42548</a>)</li>
+          <li>Fixed {@code make-standalone-toolchain.sh} to probe the {@code prebuilts/}
+            directory to detect if the host is 32 bit or 64 bit.</li>
+          <li>Fixed the Clang 3.2 {@code -integrated-as} option.</li>
+          <li>Fixed the Clang 3.2 ARM EHABI compact model {@code pr1} and {@code pr2} handler data.
+            </li>
+          <li>Added Clang {@code -mllvm -arm-enable-ehabi} option to fix the following Clang error:
+            <pre>clang: for the -arm-enable-ehabi option: may only occur zero or one times!</pre>
+            </li>
+          <li>Fixed build failure when there is no {@code uses-sdk} element in application
+            manifest. (<a href="http://b.android.com/57015">Issue 57015</a>)</li>
+        </ul>
+
+      </dd>
+      <dt>Other changes:</dt>
+      <dd>
+        <ul>
+          <li>Header Fixes
+            <ul>
+              <li>Modified headers to make {@code __set_errno} an inlined function, since
+                {@code __set_errno} in {@code errno.h} is deprecated, and {@code libc.so} no longer
+                exports it.</li>
+              <li>Modified {@code elf.h} to include {@code stdint.h}.
+                (<a href="http://b.android.com/55443">Issue 55443</a>)</li>
+              <li>Fixed {@code sys/un.h} to be included independently of other headers.
+                (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
+              <li>Fixed all of the {@code MotionEvent_getHistorical} API family to take the
+                {@code const AInputEvent* motion_event}.
+                (<a href="http://b.android.com/55873">Issue 55873</a>)</li>
+              <li>Fixed {@code malloc_usable_size} to take {@code const void*}.
+                (<a href="http://b.android.com/55725">Issue 55725</a>)</li>
+              <li>Fixed stdint.h to be more compatible with C99.
+                (<a href="https://android-review.googlesource.com/#/c/46821">Change 46821</a>)</li>
+              <li>Modified {@code wchar.h} to not redefine {@code WCHAR_MAX} and
+                {@code WCHAR_MIN}</li>
+              <li>Fixed {@code &lt;inttypes.h&gt;} declaration for pointer-related {@code PRI} and
+                {@code SCN} macros. (<a href="http://b.android.com/57218">Issue 57218</a>)</li>
+              <li>Changed the {@code sys/cdefs.h} header so that {@code __WCHAR_TYPE__} is 32-bit
+                for API levels less than 9, which means that {@code wchat_t} is 32-bit for all
+                API levels. To restore the previous behavior, define the {@code _WCHAR_IS_8BIT}
+                boolean variable. (<a href="http://b.android.com/57267">Issue 57267</a>)</li>
+            </ul>
+          </li>
+          <li>Added more formatting in NDK {@code docs/} and miscellaneous documentation fixes.
+            </li>
+          <li>Added support for a thin archive technique when building static libraries.
+            (<a href="http://b.android.com/40303">Issue 40303</a>)</li>
+          <li>Updated script {@code make-standalone-toolchain.sh} to support the {@code stlport}
+            library in addition to {@code gnustl}, when you specify the option
+            {@code --stl=stlport}. For more information, see {@code STANDALONE-TOOLCHAIN.html}.</li>
+          <li>Updated the {@code make-standalone-toolchain.sh} script so that the
+            {@code --llvm-version=} option creates the {@code $TOOLCHAIN_PREFIX-clang} and
+            {@code $TOOLCHAIN_PREFIX-clang++} scripts in addition to {@code clang} and
+            {@code clang++}, to avoid using the host's clang and clang++ definitions by accident.
+            </li>
+          <li>Added two flags to re-enable two optimizations in upstream Clang but disabled in
+              NDK for better compatibility with code compiled by GCC:
+            <ul>
+              <li>Added a {@code -fcxx-missing-return-semantics} flag to re-enable <em>missing
+return
+                semantics</em> in Clang 3.2+. Normally, all paths should terminate with a return
+                statement for a value-returning function. If this is not the case, clang inserts
+                an undefined instruction (or trap in debug mode) at the path without a return
+                statement. If you are sure your code is correct, use this flag to allow the
+                optimizer to take advantage of the undefined behavior. If you are not sure, do not
+                use this flag. The caller may still receive a random incorrect value, but the
+                optimizer will not exploit it and make your code harder to debug.</li>
+              <li>Added a {@code -fglobal-ctor-const-promotion} flag to re-enable
+                promoting global variables with static constructor to be constants. With this flag,
+                the global variable optimization pass of LLVM tries to evaluate the global
+                variables with static constructors and promote them to global constants. Although
+                this optimization is correct, it may cause some incompatability with code compiled
+                by GCC. For example, code may do {@code const_cast} to cast the constant to mutable
+                and modify it. In GCC, the variable is in read-write and the code is run by
+                accident. In Clang, the const variable is in read-only memory and may cause your
+                application to crash.</li>
+            </ul>
+          </li>
+          <li>Added {@code -mldc1-sdc1} to the MIPS GCC and Clang compilers. By default, compilers
+            align 8-byte objects properly and emit the {@code ldc1} and {@code sdc1} instructions
+            to move them around. If your app uses a custom allocator that does not always align
+            with a new object's 8-byte boundary in the same way as the default allocator, your app
+            may crash due to {@code ldc1} and {@code sdc1} operations on unaligned memory. In this
+            case, use the {@code -mno-ldc1-sdc1} flag to workaround the problem.</li>
+          <li>Downgraded the event severity from warning to info if {@code APP_PLATFORM_LEVEL} is
+            larger than {@code APP_MIN_PLATFORM_LEVEL}. The {@code APP_PLATFORM_LEVEL} may be lower
+            than {@code APP_PLATFORM} in {@code jni/Application.mk} because the NDK does not have
+            headers for all levels. In this case, the actual level is shifted downwards. The
+            {@code APP_MIN_PLATFORM_LEVEL} is specified by the {@code android:minSdkVersion} in
+            your application's manifest.
+            (<a href="http://b.android.com/39752">Issue 39752</a>)</li>
+          <li>Added the {@code android_getCpuIdArm()} and {@code android_setCpuArm()} methods to
+            {@code cpu-features.c}. This addition enables easier retrieval of the ARM CPUID
+            information. (<a href="http://b.android.com/53689">Issue 53689</a>)</li>
+          <li>Modified {@code ndk-build} to use GCC 4.7's {@code as/ld} for Clang compiling.
+            <p class="note"><strong>Note:</strong>
+              In GCC 4.7, {@code monotonic_clock} and {@code is_monotonic} have been renamed to
+              {@code steady_clock} and {@code is_steady}, respectively.</p></li>
+          <li>Added the following new warnings to the {@code ndk-build} script:
+            <ul>
+              <li>Added warnings if {@code LOCAL_LDLIBS/LDFLAGS} are used in static library
+                modules.</li>
+              <li>Added a warning if a configuration has no module to build.</li>
+              <li>Added a warning for non-system libraries being used in
+                {@code LOCAL_LDLIBS/LDFLAGS} of a shared library or executable modules.</li>
+            </ul>
+          </li>
+          <li>Updated build scripts, so that if {@code APP_MODULES} is not defined and only static
+            libraries are listed in {@code Android.mk}, the script force-builds all of them.
+            (<a href="http://b.android.com/53502">Issue 53502</a>)</li>
+          <li>Updated {@code ndk-build} to support absolute paths in {@code LOCAL_SRC_FILES}.</li>
+          <li>Removed the {@code *-gdbtui} executables, which are duplicates of the {@code *-gdb}
+            executables with the {@code -tui} option enabled.</li>
+          <li>Updated the build scripts to warn you when the Edison Design Group (EDG) compiler
+            front-end turns {@code _STLP_HAS_INCLUDE_NEXT} back on.
+            (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
+          <li>Added the environment variable {@code NDK_LIBS_OUT} to allow overriding of the
+            path for {@code libraries/gdbserver} from the default {@code $PROJECT/libs}.
+            For more information, see {@code OVERVIEW.html}.</li>
+          <li>Changed ndk-build script defaults to compile code with format string protection
+            {@code -Wformat -Werror=format-security}. You may set
+            {@code LOCAL_DISABLE_FORMAT_STRING_CHECKS=true} to disable it.
+            For more information, see {@code ANDROID-MK.html}</li>
+          <li>Added STL pretty-print support in {@code ndk-gdb-py}. For more information, see
+            {@code NDK-GDB.html}.</li>
+          <li>Added tests based on the googletest frameworks.</li>
+          <li>Added a notification to the toolchain build script that warns you if the current shell
+            is not {@code bash}.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+<a name="lower"></a>
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 8e</a> <em>(March 2013)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+        <ul>
+          <li>Added 64-bit host toolchain set (package name suffix {@code *-x86_64.*}). For more
+            information, see {@code CHANGES.HTML} and {@code NDK-BUILD.html}.</li>
+          <li>Added Clang 3.2 compiler. GCC 4.6 is still the default. For information on using the
+            Clang compiler, see {@code CHANGES.HTML}.</li>
+          <li>Added static code analyzer for Linux/MacOSX hosts. For information on using the
+            analyzer, see {@code CHANGES.HTML}.</li>
+          <li>Added MCLinker for Linux/MacOSX hosts as an experimental feature. The {@code ld.gold}
+            linker is the default where available, so you must explicitly enable it. For more
+            information, see {@code CHANGES.HTML}.</li>
+          <li>Updated ndk-build to use topological sort for module dependencies, which means the
+            build automatically sorts out the order of libraries specified in
+            {@code LOCAL_STATIC_LIBRARIES}, {@code LOCAL_WHOLE_STATIC_LIBRARIES} and
+            {@code LOCAL_SHARED_LIBRARIES}. For more information, see {@code CHANGES.HTML}.
+            (<a href="http://b.android.com/39378">Issue 39378</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>Fixed build script to build all toolchains in {@code -O2}. Toolchains in previous
+            releases were incorrectly built without optimization.</li>
+          <li>Fixed build script which unconditionally builds Clang/llvm for MacOSX in 64-bit.</li>
+          <li>Fixed GCC 4.6/4.7 internal compiler error:
+            {@code gen_thumb_movhi_clobber at config/arm/arm.md:5832}.
+            (<a href="http://b.android.com/52732">Issue 52732</a>)</li>
+          <li>Fixed build problem where GCC/ARM 4.6/4.7 fails to link code using 64-bit atomic
+            built-in functions.
+            (<a href="http://b.android.com/41297">Issue 41297</a>)</li>
+          <li>Fixed GCC 4.7 linker DIV usage mismatch errors.
+          (<a href="http://sourceware.org/ml/binutils/2012-12/msg00202.html">Sourceware Issue</a>)
+          <li>Fixed GCC 4.7 internal compiler error {@code build_data_member_initialization, at
+            cp/semantics.c:5790}.</li>
+          <li>Fixed GCC 4.7 internal compiler error {@code redirect_eh_edge_1, at tree-eh.c:2214}.
+            (<a href="http://b.android.com/52909">Issue 52909</a>)</li>
+          <li>Fixed a GCC 4.7 segfault.
+            (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55245">GCC Issue</a>)</li>
+          <li>Fixed {@code &lt;chrono&gt;} clock resolution and enabled {@code steady_clock}.
+            (<a href="http://b.android.com/39680">Issue 39680</a>)</li>
+          <li>Fixed toolchain to enable {@code _GLIBCXX_HAS_GTHREADS} for GCC 4.7 libstdc++.
+            (<a href="http://b.android.com/41770">Issue 41770</a>,
+             <a href="http://b.android.com/41859">Issue 41859</a>)</li>
+          <li>Fixed problem with the X86 MXX/SSE code failing to link due to missing
+            {@code posix_memalign}.
+            (<a href="https://android-review.googlesource.com/#/c/51872">Change 51872</a>)</li>
+          <li>Fixed GCC4.7/X86 segmentation fault in {@code i386.c}, function
+            {@code distance_non_agu_define_in_bb()}.
+            (<a href="https://android-review.googlesource.com/#/c/50383">Change 50383</a>)</li>
+          <li>Fixed GCC4.7/X86 to restore earlier {@code cmov} behavior.
+            (<a href="http://gcc.gnu.org/viewcvs?view=revision&revision=193554">GCC Issue</a>)</li>
+          <li>Fixed handling NULL return value of {@code setlocale()} in libstdc++/GCC4.7.
+            (<a href="http://b.android.com/46718">Issue 46718</a>)
+          <li>Fixed {@code ld.gold} runtime undefined reference to {@code __exidx_start} and
+            {@code __exidx_start_end}.
+            (<a href="https://android-review.googlesource.com/#/c/52134">Change 52134</a>)</li>
+          <li>Fixed Clang 3.1 internal compiler error when using Eigen library.
+            (<a href="http://b.android.com/41246">Issue 41246</a>)</li>
+          <li>Fixed Clang 3.1 internal compiler error including {@code &lt;chrono&gt;} in C++11
+mode.
+            (<a href="http://b.android.com/39600">Issue 39600</a>)</li>
+          <li>Fixed Clang 3.1 internal compiler error when generating object code for a method
+            call to a uniform initialized {@code rvalue}.
+            (<a href="http://b.android.com/41387">Issue 41387</a>)</li>
+          <li>Fixed Clang 3.1/X86 stack realignment.
+            (<a href="https://android-review.googlesource.com/#/c/52154">Change 52154</a>)</li>
+          <li>Fixed problem with GNU Debugger (GDB) SIGILL when debugging on Android 4.1.2.
+            (<a href="http://b.android.com/40941">Issue 40941</a>)</li>
+          <li>Fixed problem where GDB cannot set {@code source:line} breakpoints when symbols
+contain
+            long, indirect file paths.
+            (<a href="http://b.android.com/42448">Issue 42448</a>)</li>
+          <li>Fixed GDB {@code read_program_header} for MIPS PIE executables.
+            (<a href="https://android-review.googlesource.com/#/c/49592">Change 49592</a>)</li>
+          <li>Fixed {@code STLport} segmentation fault in {@code uncaught_exception()}.
+            (<a href="https://android-review.googlesource.com/#/c/50236">Change 50236</a>)</li>
+          <li>Fixed {@code STLport} bus error in exception handling due to unaligned access of
+            {@code DW_EH_PE_udata2}, {@code DW_EH_PE_udata4}, and {@code DW_EH_PE_udata8}.</li>
+          <li>Fixed Gabi++ infinite recursion problem with {@code nothrow new[]} operator.
+            (<a href="http://b.android.com/52833">Issue 52833</a>)</li>
+          <li>Fixed Gabi++ wrong offset to exception handler pointer.
+            (<a href="https://android-review.googlesource.com/#/c/53446">Change 53446</a>)</li>
+          <li>Removed Gabi++ redundant free on exception object
+            (<a href="https://android-review.googlesource.com/#/c/53447">Change 53447</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>Fixed NDK headers:
+            <ul>
+              <li>Removed redundant definitions of {@code size_t}, {@code ssize_t}, and
+                {@code ptrdiff_t}.</li>
+              <li>Fixed MIPS and ARM {@code fenv.h} header.</li>
+              <li>Fixed {@code stddef.h} to not redefine {@code offsetof} since it already exists
+                in the toolchain.</li>
+              <li>Fixed {@code elf.h} to contain {@code Elf32_auxv_t} and {@code Elf64_auxv_t}.
+                (<a href="http://b.android.com/38441">Issue 38441</a>)
+                </li>
+              <li>Fixed the {@code #ifdef} C++ definitions in the
+                {@code OpenSLES_AndroidConfiguration.h} header file.
+                (<a href="http://b.android.com/53163">Issue 53163</a>)
+                </li>
+            </ul>
+          </li>
+          <li>Fixed {@code STLport} to abort after out of memory error instead of silently exiting.
+            </li>
+          <li>Fixed system and Gabi++ headers to be able to compile with API level 8 and lower.</li>
+          <li>Fixed {@code cpufeatures} to not parse {@code /proc/self/auxv}.
+            (<a href="http://b.android.com/43055">Issue 43055</a>)</li>
+          <li>Fixed {@code ld.gold} to not depend on host libstdc++ and on Windows platforms,
+            to not depend on the {@code libgcc_sjlj_1.dll} library.</li>
+          <li>Fixed Clang 3.1 which emits inconsistent register list in {@code .vsave} and fails
+            assembler.
+            (<a href="https://android-review.googlesource.com/#/c/49930">Change 49930</a>)</li>
+          <li>Fixed Clang 3.1 to be able to compile libgabi++ and pass the {@code test-stlport}
+            tests for MIPS build targets.
+            (<a href="https://android-review.googlesource.com/#/c/51961">Change 51961</a>)</li>
+          <li>Fixed Clang 3.1 to only enable exception by default for C++, not for C.</li>
+          <li>Fixed several issues in Clang 3.1 to pass most GNU exception tests.</li>
+          <li>Fixed scripts {@code clang} and {@code clang++} in standalone NDK compiler to detect
+            {@code -cc1} and to not specify {@code -target} when found.</li>
+          <li>Fixed {@code ndk-build} to observe {@code NDK_APP_OUT} set in {@code Application.mk}.
+            </li>
+          <li>Fixed X86 {@code libc.so} and {@code lib.a} which were missing the {@code sigsetjmp}
+            and {@code siglongjmp} functions already declared in {@code setjmp.h}.
+            (<a href="http://b.android.com/19851">Issue 19851</a>)</li>
+          <li>Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++ 11.
+            (<a href="http://clang.llvm.org/cxx_status.html">Clang Issue</a>)</li>
+          <li>Fixed cygwin path in argument passed to {@code HOST_AWK}.</li>
+          <li>Fixed {@code ndk-build} script warning in windows when running from project's JNI
+            directory.
+            (<a href="http://b.android.com/40192">Issue 40192</a>)</li>
+          <li>Fixed problem where the {@code ndk-build} script does not build if makefile has
+            trailing whitespace in the {@code LOCAL_PATH} definition.
+            (<a href="http://b.android.com/42841">Issue 42841</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Other changes:</dt>
+      <dd>
+        <ul>
+          <li>Enabled threading support in GCC/MIPS toolchain.</li>
+          <li>Updated GCC exception handling helpers {@code __cxa_begin_cleanup} and
+            {@code __cxa_type_match} to have <em>default</em> visibility from the previous
+            <em>hidden</em> visibility in GNU libstdc++. For more information, see
+            {@code CHANGES.HTML}.</li>
+          <li>Updated build scripts so that Gabi++ and STLport static libraries are now built with
+            hidden visibility except for exception handling helpers.</li>
+          <li>Updated build so that {@code STLport} is built for ARM in Thumb mode.</li>
+          <li>Added support for {@code std::set_new_handler} in Gabi++.
+            (<a href="http://b.android.com/52805">Issue 52805</a>)</li>
+          <li>Enabled {@code FUTEX} system call in GNU libstdc++.</li>
+          <li>Updated {@code ndk-build} so that it  no longer copies prebuilt static library to
+            a project's {@code obj/local/&lt;abi&gt;/} directory.
+            (<a href="http://b.android.com/40302">Issue 40302</a>)</li>
+          <li>Removed {@code __ARM_ARCH_5*__} from ARM {@code toolchains/*/setup.mk} script.
+            (<a href="http://b.android.com/21132">Issue 21132</a>)</li>
+          <li>Built additional GNU libstdc++ libraries in thumb for ARM.</li>
+          <li>Enabled MIPS floating-point {@code madd/msub/nmadd/nmsub/recip/rsqrt}
+            instructions with 32-bit FPU.</li>
+          <li>Enabled graphite loop optimizer in GCC 4.6 and 4.7 to allow more optimizations:
+            {@code -fgraphite}, {@code -fgraphite-identity}, {@code -floop-block}, {@code
+-floop-flatten},
+            {@code -floop-interchange}, {@code -floop-strip-mine}, {@code -floop-parallelize-all},
+            and {@code -ftree-loop-linear}.
+            (<a href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html">info</a>)</li>
+          <li>Enabled {@code polly} for Clang 3.1 on Linux and Max OS X 32-bit hosts which analyzes
+            and optimizes memory access. (<a href="http://polly.llvm.org">info</a>)</li>
+          <li>Enabled {@code -flto} in GCC 4.7, 4.6, Clang 3.2 and Clang 3.1 on linux (Clang LTO
+            via LLVMgold.so). MIPS compiler targets are not supported because {@code ld.gold}
+            is not available.</li>
+          <li>Enabled {@code --plugin} and {@code --plugin-opt} for {@code ld.gold} in GCC 4.6/4.7.
+            </li>
+          <li>Enabled {@code --text-reorder} for {@code ld.gold} in GCC 4.7.</li>
+          <li>Configured GNU libstdc++ with {@code _GLIBCXX_USE_C99_MATH} which undefines the
+            {@code isinf} script in the bionic header. For more information, see
+            {@code CHANGES.html}.</li>
+          <li>Added {@code APP_LDFLAGS} to the build scripts. For more information, see
+            {@code ANDROID-MK.html}.</li>
+          <li>Updated build scripts to allow {@code NDK_LOG=0} to disable the {@code NDK_LOG}.</li>
+          <li>Updated build scripts to allow {@code NDK_HOST_32BIT=0} to disable the host developer
+            environment 32-bit toolchain.</li>
+          <li>Changed the default GCC/X86 flags {@code -march=} and {@code -mtune=} from
+            {@code pentiumpro} and {@code generic} to {@code i686} and {@code atom}.</li>
+          <li>Enhanced toolchain build scripts:
+            <ul>
+              <li>Fixed a race condition in {@code build-gcc.sh} for the {@code mingw} build type
+                which was preventing a significant amount of parallel build processing.</li>
+              <li>Updated {@code build-gabi++.sh} and {@code build-stlport.sh} so they can now run
+                from the NDK package.
+                (<a href="http://b.android.com/52835">Issue 52835</a>)
+                </li>
+              <li>Fixed {@code run-tests.sh} in the {@code MSys} utilities collection.</li>
+              <li>Improved 64-bit host toolchain and Canadian Cross build support.</li>
+              <li>Updated {@code build-mingw64-toolchain.sh} script to more recent version.</li>
+              <li>Added option to build {@code libgnustl_static.a} and {@code stlport_static.a}
+                without hidden visibility.</li>
+            </ul>
+          </li>
+        </ul>
+
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 8d</a> <em>(December 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+      <dd>
+        <ul>
+          <li>Added the GNU Compiler Collection (GCC) 4.7 compiler to the NDK. The GCC 4.6 compiler
+            is still the default, so you must to explicitly enable the new version as follows:
+            <ul>
+              <li>For {@code ndk-build}, export the {@code NDK_TOOLCHAIN_VERSION=4.7} variable
+                <em>or</em> add it to {@code Application.mk}.</li>
+              <li>For standalone builds, add the {@code --toolchain=} option to
+                {@code make-standalone-toolchain.sh}, for example:
+                <pre>--toolchain=arm-linux-androideabi-4.7</pre></li>
+            </ul>
+            <p class="note">
+              <strong>Note:</strong> This feature is experimental. Please try it and
+              <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
+          </li>
+          <li>Added {@code stlport} exception support via gabi++.  Note that the new gabi++
+            depends on {@code dlopen} and related code, meaning that:
+            <ul>
+              <li>You can no longer build a <em>static</em> executable using the {@code -static}
+                option or include {@code libstlport_static.a} using
+                {@code APP_STL := stlport_static}. (You can still use the {@code -static} option
+                with a standalone toolchain.) Compiling a <em>dynamic</em> executable using
+                {@code include $(BUILD_EXECUTABLE)} continues to work because the compiler
+                automatically adds the {@code -ldl} option.</li>
+              <li>If your project links using {@code -nostdlib} and {-Wl,--no-undefined}, you
+                must manually include the {@code -ldl} option.</li>
+            </ul>
+              For more information, see {@code CPLUSPLUS-SUPPORT.html}.
+
+              <p class="note">
+                <strong>Note:</strong> This feature is experimental and works better with the GCC
+                4.6/4.7 compilers than with GCC 4.4.3 or Clang 3.1. Please try it and
+                <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
+          </li>
+          <li>Added a {@code -mstack-protector-guard=} option for x86 to choose between a
+            <em>global</em> default path which is compatible with older Android C library (bionic)
+            and a new <em>tls</em> path (%gs:20) for {@code -fstack-protector},
+            {@code -fstack-protector-all} and {@code -fstack-protector-strong} using the GCC 4.6
+            and higher compilers.
+
+            <p class="note">
+              <strong>Note:</strong> The {@code -mstack-protector-guard} setting itself does not
+              enable any {@code -fstack-protector*} options.</p>
+          </li>
+          <li>Added {@code android_setCpu()} function to
+            {@code sources/android/cpufeatures/cpu-features.c} for use when auto-detection via
+            {@code /proc} is not possible in Android 4.1 and higher.
+            (<a href="http://code.google.com/p/chromium/issues/detail?id=164154">Chromium Issue
+            164154</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>Fixed unnecessary rebuild of object files when using the {@code ndk-build} script.
+            (<a href="http://b.android.com/39810">Issue 39810</a>)</li>
+          <li>Fixed a linker failure with the NDK 8c release for Mac OS X 10.6.x that produced the
+            following error:
+            <pre>
+dyld: lazy symbol binding failed: Symbol not found: _memmem
+Referenced from: ...../arm-linux-androideabi/bin/ld
+Expected in: /usr/lib/libSystem.B.dylib</pre>
+            This problem was caused by building on Mac OS X 10.7, which produced binaries that were
+            not compatible with Mac OS 10.6.x and the NDK.
+          </li>
+          <li>Removed the {@code -x c++} options from the Clang++ standalone build script.
+          (<a href="http://b.android.com/39089">Issue 39089</a>)</li>
+          <li>Fixed issues using the {@code NDK_TOOLCHAIN_VERSION=clang3.1} option in Cygwin.
+           (<a href="http://b.android.com/39585">Issue 39585</a>)</li>
+          <li>Fixed the {@code make-standalone-toolchain.sh} script to allow generation of a
+            standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain
+            can be used in Cygwin, MingGW or CMD.exe environments.
+            (<a href="http://b.android.com/39915">Issue 39915</a>,
+            <a href="http://b.android.com/39585">Issue 39585</a>)</li>
+          <li>Added missing {@code SL_IID_ANDROIDBUFFERQUEUESOURCE} option in android-14 builds for
+            ARM and X86.
+            (<a href="http://b.android.com/40625">Issue 40625</a>)</li>
+          <li>Fixed x86 CPU detection for the {@code ANDROID_CPU_X86_FEATURE_MOVBE} feature.
+            (<a href="http://b.android.com/39317">Issue 39317</a>)</li>
+          <li>Fixed an issue preventing the Standard Template Library (STL) from using C++
+            sources that do not have a {@code .cpp} file extension.</li>
+          <li>Fixed GCC 4.6 ARM internal compiler error <em>at reload1.c:1061</em>.
+            (<a href="http://b.android.com/20862">Issue 20862</a>)</li>
+          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at emit-rtl.c:1954</em>.
+            (<a href="http://b.android.com/22336">Issue 22336</a>)</li>
+          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at postreload.c:396</em>.
+            (<a href="http://b.android.com/22345">Issue 22345</a>)</li>
+          <li>Fixed problem with GCC 4.6/4.7 skipping lambda functions.
+            (<a href="http://b.android.com/35933">Issue 35933</a>)</li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+      <dd>
+        <ul>
+          <li>NDK header file fixes:
+            <ul>
+              <li>Fixed {@code __WINT_TYPE__} and {@code wint_t} to be the same type.</li>
+              <li>Corrected typo in {@code android/bitmap.h}.
+                (<a href="http://b.android.com/15134">Issue 15134</a>)
+              </li>
+              <li>Corrected typo in {@code errno.h}.</li>
+              <li>Added check for the presence of {@code __STDC_VERSION__} in {@code sys/cdefs.h}.
+                (<a href="http://b.android.com/14627">Issue 14627</a>)
+              </li>
+              <li>Reorganized headers in {@code byteswap.h} and {@code dirent.h}.</li>
+              <li>Fixed {@code limits.h} to include {@code page.h} which provides {@code PAGE_SIZE}
+                settings.
+                (<a href="http://b.android.com/39983">Issue 39983</a>)
+              </li>
+              <li>Fixed return type of {@code glGetAttribLocation()} and
+                {@code glGetUniformLocation()} from {@code int} to {@code GLint}.</li>
+              <li>Fixed {@code __BYTE_ORDER} constant for x86 builds.
+                (<a href="http://b.android.com/39824">Issue 39824</a>)
+              </li>
+            </ul>
+          </li>
+          <li>Fixed {@code ndk-build} script to not overwrite {@code -Os} with {@code -O2} for ARM
+            builds.</li>
+          <li>Fixed build scripts to allow overwriting of {@code HOST_AWK}, {@code HOST_SED}, and
+            {@code HOST_MAKE} settings.</li>
+          <li>Fixed issue for {@code ld.gold} on {@code fsck_msdos} builds linking objects built by
+            the Intel C/C++ compiler (ICC).</li>
+          <li>Fixed ARM EHABI support in Clang to conform to specifications.</li>
+          <li>Fixed GNU Debugger (GDB) to shorten the time spent on walking the target's link map
+            during {@code solib} events.
+            (<a href="http://b.android.com/38402">Issue 38402</a>)</li>
+          <li>Fixed missing {@code libgcc.a} file when linking shared libraries.</li>
+        </ul>
+      </dd>
+
+      <dt>Other changes:</dt>
+      <dd>
+        <ul>
+          <li>Backported 64-bit built-in atomic functions for ARM to GCC 4.6.</li>
+          <li>Added documentation for audio output latency, along with other documentation and
+            fixes.</li>
+          <li>Fixed debug builds with Clang so that non-void functions now raise a {@code SIGILL}
+            signal for paths without a return statement.</li>
+          <li>Updated {@code make-standalone-toolchain.sh} to accept the suffix {@code -clang3.1}
+            which is equivalent to adding {@code --llvm-version=3.1} to the GCC 4.6 toolchain.</li>
+          <li>Updated GCC and Clang bug report URL to:
+            <a
+href="http://source.android.com/source/report-bugs.html">http://source.android.com/source/report-bug
+s.html</a></li>
+          <li>Added ARM ELF support to {@code llvm-objdump}.</li>
+          <li>Suppressed <em>treating c input as c++</em> warning for Clang builds.</li>
+          <li>Updated build so that only the 32-bit version of {@code libiberty.a} is built and
+            placed in {@code lib32/}.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 8c</a> <em>(November 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <dl>
+      <dt>Important changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Added the Clang 3.1 compiler to the NDK. The GNU Compiler Collection (GCC) 4.6 is
+          still the default, so you must explicitly enable the Clang compiler option as follows:
+            <ul>
+              <li>For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} <em>or</em>
+                add this environment variable setting to {@code Application.mk}.</li>
+              <li>For standalone builds, add {@code --llvm-version=3.1} to
+                {@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
+                makefile with {@code &lt;tool-path&gt;/bin/clang} and
+                {@code &lt;tool-path&gt;/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
+                details.</li>
+            </ul>
+            <p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
+            <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p></li>
+          <li>Added Gold linker {@code ld.gold} for the Windows toolchain. Gold linker is also the
+            default for ARM and X86 on all hosts. You may override it to use the {@code ld.bfd}
+            linker by adding {@code LOCAL_LDFLAGS += -fuse-ld=bfd} to {@code Android.mk}, or by
+passing
+            {@code -fuse-ld=bfd} to the g++/clang++ command line that does the linking.</li>
+          <li>Added checks for spaces in the NDK path to the {@code ndk-build[.cmd]} and
+            {@code ndk-gdb} scripts, to prevent build errors that are difficult to diagnose.</li>
+          <li>Made the following changes to API level handling:
+            <ul>
+              <li>Modified build logic so that projects that specify {@code android-10} through
+                {@code android-13} in {@code APP_PLATFORM}, {@code project.properties} or
+                {@code default.properties} link against {@code android-9} instead of
+                {@code android-14}.
+              <li>Updated build so that executables using android-16 (Jelly Bean) or higher are
+                compiled with the {@code -fPIE} option for position-independent executables (PIE).
+                A new {@code APP_PIE} option allows you to control this behavior. See {@code
+                APPLICATION-MK.html} for details.
+                <p class="note">
+                  <strong>Note:</strong> All API levels above 14 still link against {@code
+                  platforms/android-14} and no new {@code platforms/android-N} have been added.
+                </p></li>
+              <li>Modified {@code ndk-build} to provide warnings if the adjusted API level is larger
+              than {@code android:minSdkVersion} in the project's {@code AndroidManifest.xml}.</li>
+            </ul>
+          </li>
+          <li>Updated the {@code cpu-features} helper library to include more ARM-specific features.
+          See {@code sources/android/cpufeatures/cpu-features.h} for details.</li>
+          <li>Modified the long double on the X86 platform to be 8 bytes. This data type is now the
+          same size as a double, but is still treated as a distinct type.</li>
+          <li>Updated build for {@code APP_ABI=armeabi-v7a}:
+            <ul>
+              <li>Modified this build type to pass the {@code -march=armv7-a} parameter
+              to the linker. This change ensures that v7-specific libraries and {@code crt*.o} are
+              linked correctly.</li>
+              <li>Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the
+              {@code -mfpu=vfp} option used in previous releases.</li>
+            </ul>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed an issue where running {@code make-standalone-toolchain.sh} with root privileges
+            resulted in the stand alone tool chain being inaccessible to some users.
+            (<a href="http://b.android.com/35279">Issue 35279</a>)
+            <ul>
+              <li>All files and executables in the NDK release package are set to have read and
+                execute permissions for all.</li>
+              <li>The ownership/group of {@code libstdc++.a} is now preserved when copied.</li>
+            </ul>
+          </li>
+          <li>Removed redundant {@code \r} from Windows prebuilt {@code echo.exe}. The redundant
+          {@code \r} caused {@code gdb.setup} to fail in the GNU Debugger (GDB) because it
+          incorrectly became part of the path.
+          (<a href="http://b.android.com/36054">Issue 36054</a>)</li>
+          <li>Fixed Windows parallel builds that sometimes failed due to timing issues in the
+          {@code host-mkdir} implementation.
+          (<a href="http://b.android.com/25875">Issue 25875</a>)</li>
+          <li>Fixed GCC 4.4.3 GNU {@code libstdc++} to <em>not</em> merge {@code typeinfo} names by
+          default. For more details, see
+          {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}.
+          (<a href="http://b.android.com/22165">Issue 22165</a>)</li>
+          <li>Fixed problem on {@code null} context in GCC 4.6
+          {@code cp/mangle.c::write_unscoped_name}, where GCC may crash when the context is
+          {@code null} and dereferenced in {@code TREE_CODE}.</li>
+          <li>Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats.
+          (<a href="http://b.android.com/34613">Issue 34613</a>)</li>
+          <li>Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation
+          where a stale stack location holding the dereferenced value was returned and caused
+          runtime crashes.
+          (<a href="http://b.android.com/38630">Issue 38630</a>)</li>
+
+          <li>ARM-specific fixes:
+            <ul>
+              <li>Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the <em>mangling of
+              &lt;va_list&gt; was changed in GCC 4.4</em>. The workaround using the
+              {@code -Wno-psabi} switch to avoid this warning is no longer required.</li>
+              <li>Fixed an issue when a project with {@code .arm} or {@code .neon} suffixes in
+              {@code LOCAL_SRC_FILES} also used {@code APP_STL}. With {@code APP_STL}, the
+              {@code ndk-build} script searches for C++ files in {@code LOCAL_SRC_FILES} before
+              adding STL {@code header/lib} paths to compilation. Modified {@code ndk-build} to
+              filter out {@code .arm} and {@code .neon} suffixes before the search, otherwise items
+              in {@code LOCAL_SRC_FILES} like {@code myfile.cpp.arm.neon} won't be compiled as C++
+              code.</li>
+              <li>Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older
+              binutils without {@code tag_FP_arch}, which was producing <em>assertion fail</em>
+              error messages in GNU Binutils.
+              (<a href="http://b.android.com/35209">Issue 35209</a>)
+              </li>
+              <li>Removed <em>Unknown EABI object attribute 44</em> warning when
+              {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}</li>
+              <li>Fixed an issue in GNU {@code stdc++} compilation with both {@code -mthumb} and
+              {@code -march=armv7-a}, by modifying {@code make-standalone-toolchain.sh} to populate
+              {@code headers/libs} in sub-directory {@code armv7-a/thumb}.
+              (<a href="http://b.android.com/35616">Issue 35616</a>)
+              </li>
+              <li>Fixed <em>unresolvable R_ARM_THM_CALL relocation</em> error.
+              (<a href="http://b.android.com/35342">Issue 35342</a>)
+              </li>
+              <li>Fixed internal compiler error at {@code reload1.c:3633}, caused by the ARM
+              back-end expecting the wrong operand type when sign-extend from {@code char}.
+              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099">GCC Issue 50099</a>)</li>
+              <li>Fixed internal compiler error with negative shift amount.
+              (<a href="http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html">GCC Issue</a>)</li>
+            </ul>
+          </li>
+
+          <li>Fixed {@code -fstack-protector} for X86, which is also the default for the
+          {@code ndk-build} x86 ABI target.</li>
+
+          <li>MIPS-specific fixes:
+            <ul>
+              <li>Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when
+              compiling MIPS {@code libstlport_*}.</li>
+              <li>Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM.
+              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369">GCC Issue 54369</a>)</li>
+              <li>Backported fix for {@code cc1} compile process consuming 100% CPU.
+              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380">GCC Issue 50380</a>)</li>
+            </ul>
+          </li>
+
+          <li>GNU Debugger-specific fixes:
+            <ul>
+              <li>Disabled Python support in gdb-7.x at build, otherwise the gdb-7.x configure
+              function may pick up whatever Python version is available on the host and build
+              {@code gdb} with a hard-wired dependency on a specific version of Python.
+              (<a href="http://b.android.com/36120">Issue 36120</a>)
+              </li>
+              <li>Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none
+              of the known architectures.
+              (<a href="http://b.android.com/35392">Issue 35392</a>)
+              </li>
+              <li>Fixed Windows pathname support, by keeping the {@code :} character if it looks
+              like it could be part of a Windows path starting with a drive letter.
+              (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12843">GDB Issue 12843</a>)
+              </li>
+              <li>Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}.
+              (<a href="http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html">GDB Issue</a>)
+              </li>
+              <li>Added fix to only read the current {@code solibs} when the linker is consistent.
+              This change speeds up {@code solib} event handling.
+              (<a href="http://b.android.com/37677">Issue 37677</a>)
+              </li>
+              <li>Added fix to make repeated attempts to find {@code solib} breakpoints. GDB now
+              retries {@code enable_break()} during every call to {@code svr4_current_sos()} until
+              it succeeds.
+              (<a href="https://android-review.googlesource.com/#/c/43563">Change 43563</a>)</li>
+              <li>Fixed an issue where {@code gdb} would not stop on breakpoints placed in
+              {@code dlopen-ed} libraries.
+              (<a href="http://b.android.com/34856">Issue 34856</a>)
+              </li>
+              <li>Fixed {@code SIGILL} in dynamic linker when calling {@code dlopen()}, on system
+              where {@code /system/bin/linker} is stripped of symbols and
+              {@code rtld_db_dlactivity()} is implemented as {@code Thumb}, due to not preserving
+              {@code LSB} of {@code sym_addr}.
+              (<a href="http://b.android.com/37147">Issue 37147</a>)
+              </li>
+            </ul>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed NDK headers:
+            <ul>
+              <li>Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from
+              original kernel. (<a href="https://android-review.googlesource.com/#/c/43335">Change
+              43335</a>)</li>
+              <li>Replaced struct member data {@code __unused} with {@code __linux_unused} in
+              {@code linux/sysctl.h} and {@code linux/icmp.h} to avoid conflict with
+              {@code #define __unused} in {@code sys/cdefs.h}.</li>
+              <li>Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and
+              {@code __END_DECLS}.</li>
+              <li>Removed unimplemented functions in {@code malloc.h}.</li>
+              <li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
+              (<a href="http://b.android.com/1952">Issue 1952</a>)</li>
+              <li>Fixed preprocessor macros in {@code &lt;arch&gt;/include/machine/*}.</li>
+              <li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
+              <li>Removed {@code linux-unistd.h}</li>
+              <li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
+              {@code ULONG_LONG_MAX} from {@code &lt;pthread.h&gt;} to {@code
+&lt;limits.h&gt;}.</li>
+            </ul>
+          </li>
+          <li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
+          <li>Fixed {@code _STLP_USE_EXCEPTIONS}, when not defined, to omit all declarations
+          and uses of {@code __Named_exception}. Compiling and use of {@code __Named_exception}
+          settings only occurs when {@code STLport} is allowed to use exceptions.</li>
+          <li>Fixed building of Linux-only NDK packages without also building Windows code. Use the
+          following settings to perform this type of build:
+          <pre>./build/tools/make-release.sh --force --systems=linux-x86</pre></li>
+          <li>Fixed {@code libc.so} so it does not export {@code atexit()} and {@code __do_handler}.
+          These symbols are exported for ARM builds by the system version of the C library to
+          support legacy native libraries. NDK-generated should never reference them directly.
+          Instead, each shared library or executable should embed its own version of these symbols,
+          provided by {@code crtbegin_*.o}.
+          <p>If your project is linked with the {@code -nostdlib -Wl,--no-undefined} options, you
+          must provide your own {@code __dso_handle} because {@code crtbegin_so.o} is not linked in
+          this case. The content of {@code __dso_handle} does not matter, as shown in the following
+          example code:</p>
+<pre>
+extern "C" {
+  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
+  void *__dso_handle;
+}
+</pre>
+          </li>
+          <li>Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to
+          generate a more readable form {@code function@plt}.</li>
+          <li>Removed the following symbols, introduced in GCC 4.6 {@code libgcc.a}, from
+          the X86 platform {@code libc.so} library: {@code __aeabi_idiv0}, {@code __aeabi_ldiv0},
+          {@code __aeabi_unwind_cpp_pr1}, and {@code __aeabi_unwind_cpp_pr2}.</li>
+          <li>Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS
+          {@code crt*_so.S}.</li>
+          <li>Updated {@code ndk-gdb} so that it only takes the last line of output for
+          {@code ndk-build} {@code DUMP_XXXX}. This change ensures that if {@code Application.mk} or
+          {@code Android.mk} print something with {@code $(info ...)} syntax, it does not get
+          injected into the result of {@code DUMP_XXXX}.
+          (<a href="https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ">More info</a>)</li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Removed {@code arch-x86} and {@code arch-mips} headers from
+          {@code platforms/android-[3,4,5,8]}. Those headers were incomplete, since both X86 and
+          MIPS ABIs are only supported at API 9 or higher.</li>
+          <li>Simplified c++ include path in standalone packages, as shown below.
+          (<a href="http://b.android.com/35279">Issue 35279</a>)
+<pre>
+&lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
+  to:
+&lt;path&gt;/include/c++/4.6/
+</pre></li>
+          <li>Fixed {@code ndk-build} to recognize more C++ file extensions by default:
+          {@code .cc .cp .cxx .cpp .CPP .c++ .C}. You may still use {@code LOCAL_CPP_EXTENSION} to
+          overwrite these extension settings.</li>
+          <li>Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze
+          frame on re-launch.</li>
+          <li>Replaced deprecated APIs in NDK samples.
+          (<a href="http://b.android.com/20017">Issue 20017</a>)
+            <ul>
+              <li>{@code hello-gl2} from android-5 to android-7</li>
+              <li>{@code native-activity} from android-9 to android-10</li>
+              <li>{@code native-audio} from android-9 to android-10</li>
+              <li>{@code native-plasma} from android-9 to android-10</li>
+            </ul>
+          </li>
+          <li>Added new branding for Android executables with a simpler scheme in section
+          {@code .note.android.ident} (defined in {@code crtbegin_static/dynamic.o}) so that
+          debugging tools can act accordingly. The structure member and values are defined as
+          follows:
+<pre>
+static const struct {
+  int32_t namesz;  /* = 8,  sizeof ("Android") */
+  int32_t descsz;  /* = 1 * sizeof(int32_t) */
+  int32_t type;    /* = 1, ABI_NOTETYPE */
+  char name[sizeof "Android"];  /* = "Android" */
+  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
+}
+</pre>
+            <p>The previous branding options in section {@code .note.ABI-tag} are deprecated.</p>
+          </li>
+          <li>Added a new script {@code run-tests-all.sh} which calls {@code run-tests.sh} and
+          {@code standalone/run.sh} with various conditions. The script {@code run-tests.sh} runs
+          without the {@code --abi} option, and is enhanced to compile most of the tests for all
+          supported ABIs and run on all attached devices</li>
+        </ul>
+      </dd>
+    </dl>
+
+  </div>
+</div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 8b</a> <em>(July 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>The main features of this release are a new GNU Compiler Collection (GCC) 4.6 toolchain and
+GNU Debugger (GDB) 7.3.x which adds debugging support for the Android 4.1 (API Level 16) system
+image.</p>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code LOCAL_SHORT_COMMANDS} issues on Mac OS, Windows Cygwin environments for
+static libraries. List file generation is faster, and it is not regenerated to avoid repeated
+project rebuilds.</li>
+          <li>Fixed several issues in {@code ndk-gdb}:
+            <ul>
+              <li>Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more
+consistently.</li>
+              <li>Updated tool to accept device serial names containing spaces.</li>
+              <li>Updated tool to retrieve {@code /system/bin/link} information, so {@code gdb} on
+the host can set a breakpoint in {@code __dl_rtld_db_dlactivity} and be aware of linker activity
+(e.g., rescan {@code solib} symbols when {@code dlopen()} is called).</li>
+            </ul>
+          </li>
+          <li>Fixed {@code ndk-build clean} on Windows, which was failing to remove
+{@code ./libs/*/lib*.so}.</li>
+          <li>Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make}
+fails.</li>
+          <li>Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and
+{@code __exidx_end} symbols.</li>
+          <li>Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and
+MIPS.</li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Important changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Added GCC 4.6 toolchain ({@code binutils} 2.21 with {@code gold} and GDB 7.3.x) to
+co-exist with the original GCC 4.4.3 toolchain ({@code binutils} 2.19 and GDB 6.6).
+            <ul>
+              <li>GCC 4.6 is now the default toolchain. You may set {@code
+NDK_TOOLCHAIN_VERSION=4.4.3} in {@code Application.mk} to select the original one.</li>
+              <li>Support for the {@code gold} linker is only available for ARM and x86
+architectures on Linux and Mac OS hosts. This support is disabled by default. Add {@code
+LOCAL_LDLIBS += -fuse-ld=gold} in {@code Android.mk} to enable it.</li>
+              <li>Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging,
+including binaries in Android 4.1 (API Level 16) system images.</li>
+              <li>The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from
+version 2.22:
+                <ul>
+                  <li>Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to
+external libraries. (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=13177">more
+info</a>).</li>
+                  <li>Fixed ARM {@code strip} command to preserve the original {@code p_align} and
+{@code p_flags} in {@code GNU_RELRO} section if they are valid. Without this fix, programs
+built with {@code -fPIE} could not be debugged. (<a
+href="http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553">mor
+e info</a>)</li>
+                </ul>
+              </li>
+              <li>Disabled {@code sincos()} optimization for compatibility with older
+                platforms.</li>
+            </ul>
+          </li>
+
+          <li>Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code
+bind_now} protections by default:
+            <ul>
+              <li>Added {@code --noexecstack} to assembler and {@code -z noexecstack} to linker
+that provides NX protection against buffer overflow attacks by enabling NX bit on stack and
+heap.</li>
+              <li>Added {@code -z relro} and  {@code -z now} to linker for hardening of internal
+data sections after linking to guard against security vulnerabilities caused by memory corruption.
+(more info: <a href="http://www.akkadia.org/drepper/nonselsec.pdf">1</a>,
+<a href="http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html">2</a>)</li>
+
+              <li>These features can be disabled using the following options:
+                <ol>
+                  <li>Disable NX protection by setting the {@code --execstack} option for the
+assembler and {@code -z execstack} for the linker.</li>
+                  <li>Disable hardening of internal data by setting the {@code -z norelro} and
+{@code -z lazy} options for the linker.</li>
+                  <li>Disable these protections in the NDK {@code jni/Android.mk} by setting the
+following options:
+<pre>
+LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
+DISABLE_RELRO=true             # disable "-z relro" and "-z now"
+</pre>
+                  </li>
+                </ol>
+                <p>See {@code docs/ANDROID-MK.html} for more details.</p>
+              </li>
+            </ul>
+          </li>
+
+          <li>Added branding for Android executables with the {@code .note.ABI-tag} section (in
+{@code crtbegin_static/dynamic.o}) so that debugging tools can act accordingly. The structure
+member and values are defined as follows:
+<pre>
+static const struct {
+  int32_t namesz;  /* = 4,  sizeof ("GNU") */
+  int32_t descsz;  /* = 6 * sizeof(int32_t) */
+  int32_t type;    /* = 1 */
+  char  name[sizeof "GNU"];  /* = "GNU" */
+  int32_t os;      /* = 0 */
+  int32_t major;   /* = 2 */
+  int32_t minor;   /* = 6 */
+  int32_t teeny;   /* = 15 */
+  int32_t os_variant;  /* = 1 */
+  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
+}</pre>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue.
+            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12637">more info</a>)</li>
+          <li>Fixed {@code ld} tool segfaults when using {@code --gc-sections}.
+            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12845">more info</a>)
+          </li>
+          <li>Fixed MIPS {@code GOT_PAGE} counting issue.
+            (<a href="http://sourceware.org/ml/binutils/2011-05/msg00198.html">more info</a>)</li>
+          <li>Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.</li>
+          <li>Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.</li>
+          <li>Moved MIPS {@code .dynamic} to the data segment, so that it is writable.</li>
+          <li>Replaced hard-coded values for symbols with correct segment sizes for MIPS.</li>
+          <li>Removed the {@code -mno-shared} option from the defaults in the MIPS toolchain.
+The default for Android toolchain is {@code -fPIC} (or {@code -fpic} if supported). If you do not
+explicitly specify {@code -mshared}, {@code -fpic}, {@code -fPIC}, {@code -fpie}, or {@code -fPIE},
+the MIPS compiler adds {@code -mno-shared} that turns off PIC. Fixed compiler not to add
+{@code -mno-shared} in this case.</li>
+          <li>Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that
+the {@code tests} project underneath it can compile.</li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other Changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Changed locations of binaries:
+            <ul>
+              <li>Moved {@code gdbserver} from
+{@code toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver} to
+{@code prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver}.</li>
+              <li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
+{@code i686-linux-android-}.</li>
+              <li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
+{@code sources/cxx-stl/gnu-libstdc++/4.6} when compiled with GCC 4.6, or
+{@code sources/cxx-stl/gnu-libstdc++/4.4.3} when compiled with GCC 4.4.3.</li>
+              <li>Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code
+lib32/}.</li>
+            </ul>
+          </li>
+
+          <li>Added and improved various scripts in the rebuild and test NDK toolchain:
+            <ul>
+              <li>Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain
+that generates Win32 and Win64 executables.</li>
+              <li>Improved speed of {@code download-toolchain-sources.sh} by using the {@code
+clone} command and only using {@code checkout} for the directories that are needed to build the NDK
+toolchain binaries.</li>
+              <li>Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.</li>
+              <li>Added {@code tests/check-release.sh} to check the content of a given NDK
+installation directory, or an existing NDK package.</li>
+              <li>Rewrote the {@code tests/standalone/run.sh} standalone tests .</li>
+            </ul>
+          </li>
+          <li>Removed {@code if_dl.h} header from all platforms and architectures. The {@code
+AF_LINK} and {@code sockaddr_dl} elements it describes are specific to BSD (i.e., they don't exist
+in Linux).</li>
+        </ul>
+      </dd>
+    </dl>
+
+  </div>
+</div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 8</a> <em>(May 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>
+
+    <dl>
+      <dt>New features:</dt>
+
+      <dd>
+        <ul>
+          <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
+            compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
+            toolchains, system headers, libraries and debugging support. For more details regarding
+            MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.
+
+              <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
+              your {@code APP_ABI} definition in your {@code Application.mk} file to build
+              for MIPS platforms. For example, the following line instructs {@code ndk-build}
+              to build your code for three distinct ABIs:</p>
+
+              <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>
+
+              <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
+              code, you should not need to touch your {@code Android.mk} files to build MIPS
+              machine code.</p>
+          </li>
+
+          <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
+          option when calling <code>make-standalone-toolchain.sh</code>. See
+          {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
+          </li>
+        </ul>
+
+        <p class="note"><strong>Note:</strong> To ensure that your applications are available
+to users only if their devices are capable of running them, Google Play filters applications based
+on the instruction set information included in your application ? no action is needed on your part
+to enable the filtering. Additionally, the Android system itself also checks your application at
+install time and allows the installation to continue only if the application provides a library that
+is compiled for the device's CPU architecture.</p>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed a typo in GAbi++ implementation where the result of {@code
+          dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
+          incorrectly adjusted in the opposite direction from the base class.
+          (<a href="http://b.android.com/28721">Issue 28721</a>)
+          </li>
+          <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
+          {@code libsupc++.*}.</li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
+          if the user has redefined the {@code SHELL} environment variable, which may be changed
+          when installing a variety of development tools in Windows environments.
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 7c</a> <em>(April 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
+additional fixes and improvements:</p>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
+  devices. The files provided with NDK r7b were not configured properly,
+  resulting in crashes on Tegra2-based devices and others when trying to use
+  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
+        </ul>
+      </dd>
+
+      <dt>Important changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Added support for custom output directories through the {@code NDK_OUT}
+  environment variable. When defined, this variable is used to store all
+  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
+  also recognized by {@code ndk-gdb}. </li>
+          <li>Added support for building modules with hundreds or even thousands of source
+  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
+            <p>This change forces the NDK build system to put most linker or archiver options
+  into list files, as a work-around for command-line length limitations.
+  See {@code docs/ANDROID-MK.html} for details.</p>
+          </li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
+helper library. On certain devices, where cores are enabled dynamically by the system, the previous
+implementation would report the total number of <em>active</em> cores the first time the function
+was called, rather than the total number of <em>physically available</em> cores.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 7b</a> <em>(February 2012)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
+      improvements:</p>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Updated {@code sys/atomics.h} to avoid correctness issues
+            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
+            version of the NDK and this problem should be completely eliminated.
+            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
+          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
+            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
+          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
+            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
+          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
+            affected. The fixes include:
+            <ul>
+              <li>Removed an infinite loop / stack overflow bug that happened when trying
+                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
+                your project path (e.g., in any sub-directory of it).</li>
+              <li>Fixed a problem where the auto-generated dependency files were ignored. This
+                meant that updating a header didn't trigger recompilation of sources that included
+                it.</li>
+              <li>Fixed a problem where special characters in files or paths, other than spaces and
+                quotes, were not correctly handled.</li>
+            </ul>
+          </li>
+          <li>Fixed the standalone toolchain to generate proper binaries when using
+            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
+            should use {@code -lgnustl_shared} if you want to link against the shared library
+            version or {@code -lstdc++} for the static version.
+
+            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
+          </li>
+          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
+            {@code libsupc++.a} even though the file was at the right location.</li>
+          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
+            {@code APP_STL}.</li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other changes:</dt>
+
+      <dd>
+        <ul>
+          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
+            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
+            <p>If you need these features, you must do one of the following:</p>
+            <ul>
+              <li>Enable exceptions and/or RTTI explicitly in your modules or
+                {@code Application.mk}. (recommended)</li>
+              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
+                {@code 'rtti'} or both in your {@code Application.mk}. See
+                {@code docs/APPLICATION-MK.html} for more details.</li>
+            </ul>
+          </li>
+          <li>{@code ndk-gdb} now works properly when your application has private services
+            running in independent processes. It debugs the main application process, instead of the
+            first process listed by {@code ps}, which is usually a service process.</li>
+          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
+            and always compile certain source files (but not all) to 32-bit instructions.</li>
+          <li>{@code STLport}: Refresh the sources to match the Android platform version. This
+            update fixes a few minor bugs:
+            <ul>
+               <li>Fixed instantiation of an incomplete type</li>
+               <li>Fixed minor "==" versus "=" typo</li>
+               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
+               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
+                 etc.</li>
+             </ul>
+             <p>For complete details, see the commit log.</p>
+          </li>
+          <li>{@code STLport}: Removed 5 unnecessary static initializers from the library.</li>
+          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
+            armeabi instead. This change had no impact on correctness, but using the right
+            ABI should provide slightly better performance.</li>
+          <li>The {@code cpu-features} helper library was updated to report three optional
+            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
+            {@code docs/CPU-FEATURES.html} for more details.</li>
+          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
+            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
+          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
+            directory when invoked.</li>
+          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
+            didn't work properly in the following cases:
+            <ul>
+              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
+              <li>When using drive-less mounts, for example, when Cygwin would translate
+                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
+            </ul>
+          </li>
+          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
+            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 7</a> <em>(November 2011)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
+    as many other additions and improvements:</p>
+
+    <dl>
+      <dt>New features</dt>
+
+      <dd>
+        <ul>
+          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
+          native features to the platform:
+
+            <ul>
+              <li>Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1
+              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
+              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
+              API level 14 to perform multimedia output directly from native code by using a new
+              Android-specific buffer queue interface. For more details, see
+              <code>docs/openmaxal/index.html</code> and <a href=
+              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>
+
+              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1?
+              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
+              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
+              <a href=
+              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
+            </ul>
+          </li>
+
+          <li>Added CCache support. To speed up large rebuilds, define the
+          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
+          your <code>ccache</code> binary). When declared, the NDK build system automatically
+          uses CCache when compiling any source file. For example:
+            <pre>
+export NDK_CCACHE=ccache
+</pre>
+          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
+          so you must have it installed prior to using it. For more information about CCache, see
+          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
+          </li>
+
+          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
+          you want to build your NDK modules for all the ABIs supported by your given NDK
+          release. This means that either one of the following two lines in your
+          <code>Application.mk</code> are equivalent with this release:
+            <pre>
+APP_ABI := all
+APP_ABI := armeabi armeabi-v7a x86
+</pre>
+
+            <p>This also works if you define <code>APP_ABI</code> when calling
+            <code>ndk-build</code> from the command-line, which is a quick way to check that your
+            project builds for all supported ABIs without changing the project's
+            <code>Application.mk file</code>. For example:</p>
+            <pre>
+ndk-build APP_ABI=all
+</pre>
+          </li>
+
+          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
+          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
+          ensures that the final linking works correctly if you have prebuilt modules that depend
+          on these features. See <code>docs/ANDROID-MK.html</code> and
+          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>
+
+          <li>Shortened paths to source and object files that are used in build commands. When
+          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
+          object, and binary files that are passed to the build commands are significantly
+          shorter now, because they are passed relative to the current directory. This is useful
+          when building projects with a lot of source files, to avoid limits on the maximum
+          command line length supported by your host operating system. The behavior is unchanged
+          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
+          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
+        </ul>
+      </dd>
+
+      <dt>Experimental features</dt>
+
+      <dd>
+        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
+        <code>ndk-build.cmd</code> script from the command line from your project path. The
+        script takes exactly the same arguments as the original <code>ndk-build</code> script.
+        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
+        tools required by the build. You should not need to install anything else to get a
+        working build system.
+
+        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
+        Windows, so you still need Cygwin to debug.</p>
+
+        <p>This feature is still experimental, so feel free to try it and report issues on the
+        <a href="http://b.android.com">public bug database</a> or <a href=
+        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
+        shipped with the NDK succesfully compile with this feature.</p>
+      </dd>
+
+      <dt>Important bug fixes</dt>
+
+      <dd>
+        <ul>
+          <li>Imported shared libraries are now installed by default to the target installation
+          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
+          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
+          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
+          <code>libbar.so</code> are copied to the install location. Previously, only
+          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
+          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
+          behavior is unchanged.</li>
+
+          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
+          their MAIN intent filters.</li>
+
+          <li>Static library imports are now properly transitive. For example, if a top-level
+          module <code>foo</code> imports static library <code>bar</code> that imports static
+          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
+          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
+        </ul>
+      </dd>
+
+      <dt>Other changes</dt>
+
+      <dd>
+        <ul>
+          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
+          9, not 8 for native activities.</li>
+
+          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
+          supported stable API, starting from API level 9.</li>
+
+          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
+          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
+          which is the new location for the AOSP servers.</li>
+
+          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
+          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>
+
+          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
+          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
+          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>
+
+          <li>Added support for RTTI in the STLport C++ runtimes (no support for
+          exceptions).</li>
+
+          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
+          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
+          declare the following:
+            <pre>
+LOCAL_CPP_EXTENSION := .cpp .cxx
+</pre>
+          </li>
+
+          <li>Removed many unwanted exported symbols from the link-time shared system libraries
+          provided by the NDK. This ensures that code generated with the standalone toolchain
+          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
+          symbol that changes each time the toolchain used to build the platform is changed)</li>
+
+          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
+          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
+          because each extension must be probed at runtime by the client application.
+
+            <p>The extensions that are available depend on your actual device and GPU drivers,
+            not the platform version the device runs on. The header changes simply add new
+            constants and types to make it easier to use the extensions when they have been
+            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
+            following list describes the newly supported extensions:</p>
+
+            <dl>
+              <dt>GLES 1.x</dt>
+
+              <dd>
+                <ul>
+                  <li><code>GL_OES_vertex_array_object</code></li>
+
+                  <li><code>GL_OES_EGL_image_external</code></li>
+
+                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>
+
+                  <li><code>GL_EXT_blend_minmax</code></li>
+
+                  <li><code>GL_EXT_discard_framebuffer</code></li>
+
+                  <li><code>GL_EXT_multi_draw_arrays</code></li>
+
+                  <li><code>GL_EXT_read_format_bgra</code></li>
+
+                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>
+
+                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
+
+                  <li><code>GL_EXT_texture_lod_bias</code></li>
+
+                  <li><code>GL_IMG_read_format</code></li>
+
+                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
+
+                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>
+
+                  <li><code>GL_IMG_user_clip_plane</code></li>
+
+                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
+
+                  <li><code>GL_NV_fence</code></li>
+
+                  <li><code>GL_QCOM_driver_control</code></li>
+
+                  <li><code>GL_QCOM_extended_get</code></li>
+
+                  <li><code>GL_QCOM_extended_get2</code></li>
+
+                  <li><code>GL_QCOM_perfmon_global_mode</code></li>
+
+                  <li><code>GL_QCOM_writeonly_rendering</code></li>
+
+                  <li><code>GL_QCOM_tiled_rendering</code></li>
+                </ul>
+              </dd>
+
+              <dt>GLES 2.0</dt>
+
+              <dd>
+                <ul>
+                  <li><code>GL_OES_element_index_uint</code></li>
+
+                  <li><code>GL_OES_get_program_binary</code></li>
+
+                  <li><code>GL_OES_mapbuffer</code></li>
+
+                  <li><code>GL_OES_packed_depth_stencil</code></li>
+
+                  <li><code>GL_OES_texture_3D</code></li>
+
+                  <li><code>GL_OES_texture_float</code></li>
+
+                  <li><code>GL_OES_texture_float_linear</code></li>
+
+                  <li><code>GL_OES_texture_half_float_linear</code></li>
+
+                  <li><code>GL_OES_texture_npot</code></li>
+
+                  <li><code>GL_OES_vertex_array_object</code></li>
+
+                  <li><code>GL_OES_EGL_image_external</code></li>
+
+                  <li><code>GL_AMD_program_binary_Z400</code></li>
+
+                  <li><code>GL_EXT_blend_minmax</code></li>
+
+                  <li><code>GL_EXT_discard_framebuffer</code></li>
+
+                  <li><code>GL_EXT_multi_draw_arrays</code></li>
+
+                  <li><code>GL_EXT_read_format_bgra</code></li>
+
+                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
+
+                  <li><code>GL_EXT_texture_compression_dxt1</code></li>
+
+                  <li><code>GL_IMG_program_binary</code></li>
+
+                  <li><code>GL_IMG_read_format</code></li>
+
+                  <li><code>GL_IMG_shader_binary</code></li>
+
+                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
+
+                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
+
+                  <li><code>GL_NV_coverage_sample</code></li>
+
+                  <li><code>GL_NV_depth_nonlinear</code></li>
+
+                  <li><code>GL_QCOM_extended_get</code></li>
+
+                  <li><code>GL_QCOM_extended_get2</code></li>
+
+                  <li><code>GL_QCOM_writeonly_rendering</code></li>
+
+                  <li><code>GL_QCOM_tiled_rendering</code></li>
+                </ul>
+              </dd>
+
+              <dt>EGL</dt>
+
+              <dd>
+                <ul>
+                  <li><code>EGL_ANDROID_recordable</code></li>
+
+                  <li><code>EGL_NV_system_time</code></li>
+                </ul>
+              </dd>
+            </dl>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 6b</a> <em>(August 2011)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>This release of the NDK does not include any new features compared to r6. The r6b release
+      addresses the following issues in the r6 release:</p>
+      <dl>
+        <dt>Important bug fixes</dt>
+        <dd>
+          <ul>
+            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
+            multi-architecture builds.</li>
+            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
+            A bug in the packaging script placed them in the wrong location.</li>
+            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
+            toolchain.</li>
+            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
+            to copy the proper GNU libstdc++ binaries to the right location.</li>
+            <li>Fixed the standalone toolchain linker warnings about missing the definition and
+            size for the <code>__dso_handle</code> symbol (ARM only).</li>
+            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
+            See the <a href="http://b.android.com/18540">bug</a> for
+            more information.</li>
+            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
+            x86-specific systems when they are used with the x86 standalone toolchain.</li>
+          </ul>
+        </dd>
+      </dl>
+  </div>
+</div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 6</a> <em>(July 2011)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
+      For detailed information describing the changes in this release, read the
+      <code>CHANGES.HTML</code> document included in the NDK package.
+      </p>
+      <dl>
+        <dt>General notes:</dt>
+        <dd>
+          <ul>
+            <li>Adds support for the x86 ABI, which allows you to generate machine code
+            that runs on compatible x86-based Android devices. Major features for x86
+            include x86-specific toolchains, system headers, libraries and
+            debugging support. For all of the details regarding x86 support,
+            see <code>docs/CPU-X86.html</code> in the NDK package.
+
+              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
+              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
+              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
+              to build your code for three distinct ABIs:</p>
+
+              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>
+
+              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
+              your <code>Android.mk</code> files to build x86 machine code.</p>
+
+            </li>
+
+            <li>You can build a standalone x86 toolchain using the
+<code>--toolchain=x86-4.4.3</code>
+            option when calling <code>make-standalone-toolchain.sh</code>. See
+            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
+            </li>
+            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
+            <code>logcat</code> that are generated by native code. The tool translates
+            instruction addresses into a readable format that contains things such
+            as the function, source file, and line number corresponding to each stack frame.
+            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
+            </li>
+          </ul>
+        </dd>
+        <dt>Other changes:</dt>
+        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
+        removed from the NDK distribution.</dd>
+
+      </dl>
+    </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 5c</a> <em>(June 2011)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
+    addresses the following problems in the r5b release:</p>
+    <dl>
+      <dt>Important bug fixes:</dt>
+      <dd>
+        <ul>
+          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
+          builds of debuggable projects.</li>
+
+          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
+          correctly with the new toolchain and added documentation for this in
+          <code>docs/ANDROID-MK.html</code>.</li>
+
+          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
+          platform releases older than API level 8 (Android 2.2).</li>
+
+          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging
+Android 3.0
+          or newer devices.</li>
+
+          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
+          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
+          binary interface to the system is unchanged. The incorrect functions were missing a
+          <code>history_index</code> parameter, and the correct definitions are shown below:
+<pre>
+float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
+                                           size_t pointer_index,
+                                           size_t history_index);
+
+float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
+                                           size_t pointer_index,
+                                           size_t history_index);
+</pre>
+          </li>
+
+          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
+          link time new functions that were added in that API level (for example,
+          <code>pthread_rwlock_init</code>).</li>
+
+        </ul>
+      </dd>
+
+      <dt>Minor improvements and fixes:</dt>
+      <dd>
+        <ul>
+          <li>Object files are now always linked in the order they appear in
+          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
+          grouped by source extensions instead.</li>
+
+          <li>When <code>import-module</code> fails, it now prints the list of directories that
+          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
+          used by the build system is correct.</li>
+
+          <li>When <code>import-module</code> succeeds, it now prints the directory where the
+          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>
+
+          <li>Increased the build speed of debuggable applications when there is a very large number
+          of include directories in the project.</li>
+
+          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
+          error messages.</li>
+
+          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
+          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>
+
+          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
+          GNU Make.</li>
+
+          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
+          true (typo in <code>build/core/build-binary.mk</code>).</li>
+
+          <li>Fixed a bug that prevented the compilation of <code>.s</code> assembly files
+          (<code>.S</code> files were okay).</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 5b</a> <em>(January 2011)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>This release of the NDK does not include any new features compared to r5. The r5b release
+addresses the
+      following problems in the r5 release:
+      </p>
+      <ul>
+    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
+    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on
+Ubuntu 8.04 or higher. </li>
+    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
+    The previous binary generated invalid thumb instruction sequences when
+    dealing with signed chars.</li>
+    <li>Adds missing documentation for the
+    "gnustl_static" value for APP_STL, that allows you to link against
+    a static library version of GNU libstdc++. </li> the
+    <li>Fixed the following <code>ndk-build</code> issues:
+      <ul>
+        <li>A bug that created inconsistent dependency files when a
+        compilation error occured on Windows. This prevented a proper build after
+        the error was fixed in the source code.</li>
+        <li>A Cygwin-specific bug where using very short paths for
+        the Android NDK installation or the project path led to the
+        generation of invalid dependency files. This made incremental builds
+        impossible.</li>
+        <li>A typo that prevented the cpufeatures library from working correctly
+        with the new NDK toolchain.</li>
+        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
+        from GNU Make for every source or object file, which caused problems
+        with very large source trees. In case this doesn't work properly, define
+<code>NDK_USE_CYGPATH=1</code> in your
+        environment to use <code>cygpath -m</code> again.</li>
+        <li>The Cygwin installation now notifies the user of invalid installation paths that
+contain spaces. Previously, an invalid path
+        would output an error that complained about an incorrect version of GNU Make, even if the
+right one was installed.
+      </ul>
+    </li>
+  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from
+working properly when
+  it contained multiple directories separated with a colon. </li>
+  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
+  generated machine code, instead of relying on the host tag, which
+  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts
+now also support
+  using a 32-bit host toolchain.</li>
+  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to
+<code>&lt;netinet/in.h&gt;</code>.</li>
+  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and
+<code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
+  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow
+compilation with <code>-std=c99</code>.</li>
+  </ul>
+  </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 5</a> <em>(December 2010)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>This release of the NDK includes many new APIs, most of which are introduced to
+         support the development of games and similar applications that make extensive use
+         of native code. Using the APIs, developers have direct native access to events, audio,
+         graphics and window management, assets, and storage. Developers can also implement the
+         Android application lifecycle in native code with help from the new
+         {@link android.app.NativeActivity} class. For detailed information describing the changes
+in this
+         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK
+package.
+      </p>
+      <dl>
+        <dt>General notes:</dt>
+        <dd>
+          <ul>
+            <li>Adds support for native activities, which allows you to implement the
+            Android application lifecycle in native code.</li>
+
+            <li>Adds native support for the following:
+
+              <ul>
+
+                <li>Input subsystem (such as the keyboard and touch screen)</li>
+
+                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>
+
+                <li>Event loop APIs to wait for things such as input and sensor events.</li>
+
+                <li>Window and surface subsystem</li>
+
+                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
+                as well as control over platform audio effects</li>
+
+                <li>Access to assets packaged in an <code>.apk</code> file.</li>
+
+              </ul>
+            </li>
+
+            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can
+also now
+            be used as a standalone cross-compiler, for people who want to build their stuff with
+            <code>./configure &amp;&amp; make</code>. See
+            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still
+provided,
+            but the 4.2.1 binaries were removed.</li>
+
+            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and
+module
+            exports and imports to make sharing and reuse of third-party modules much easier
+            (docs/IMPORT-MODULE.html explains why).</li>
+
+            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It
+can be used either
+            as a static or shared library (details and usage examples are in
+sources/android/stlport/README). Prebuilt
+            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also
+provided if you choose to
+            compile against those libraries instead of the default C++ STL implementation.
+            C++ Exceptions and RTTI are not supported in the default STL implementation. For more
+information, see
+            docs/CPLUSPLUS-SUPPORT.HTML.</li>
+
+            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves
+reporting
+            of the CPU type (some devices previously reported ARMv7 CPU when the device really was
+an ARMv6). We
+            recommend developers that use this library to rebuild their applications then
+            upload to Google Play to benefit from the improvements.</li>
+
+            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
+              services.</li>
+
+            <li>Adds new sample applications, <code>native-plasma</code> and
+<code>native-activity</code>,
+            to demonstrate how to write a native activity.</li>
+
+            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a
+more
+              detailed list of changes.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 4b</a> <em>(June 2010)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <dl>
+        <dt>NDK r4b notes:</dt>
+
+        <dd>
+          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
+          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
+          information describing the changes in this release, read the CHANGES.TXT document
+          included in the downloaded NDK package.</p>
+        </dd>
+      </dl>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Provides a simplified build system through the new <code>ndk-build</code> build
+            command.</li>
+
+            <li>Adds support for easy native debugging of generated machine code on production
+            devices through the new <code>ndk-gdb</code> command.</li>
+
+            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
+            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
+            include these CPU instruction set extensions:
+
+              <ul>
+                <li>Thumb-2 instructions</li>
+
+                <li>VFP hardware FPU instructions (VFPv3-D16)</li>
+
+                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
+                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
+                others.</li>
+              </ul>
+            </li>
+
+            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
+            app detect the host device's CPU features at runtime. Specifically, applications can
+            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
+            code paths as needed.</li>
+
+            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
+            <code>cpufeatures</code> library to check CPU features and then provide an optimized
+            code path using NEON instrinsics, if supported by the CPU.</li>
+
+            <li>Lets you generate machine code for either or both of the instruction sets supported
+            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
+            same time and have everything stored to your application's final
+            <code>.apk</code>.</li>
+
+            <li>To ensure that your applications are available to users only if their devices are
+            capable of running them, Google Play now filters applications based on the
+            instruction set information included in your application &mdash; no action is needed on
+            your part to enable the filtering. Additionally, the Android system itself also checks
+            your application at install time and allows the installation to continue only if the
+            application provides a library that is compiled for the device's CPU architecture.</li>
+
+            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
+            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 3</a> <em>(March 2010)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Adds OpenGL ES 2.0 native library support.</li>
+
+            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
+            OpenGL ES 2.0 vertex and fragment shaders.</li>
+
+            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
+            should generate slightly more compact and efficient machine code than the previous one
+            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
+            to build your machine code.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 2</a> <em>(September 2009)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>Originally released as "Android 1.6 NDK, Release 1".</p>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Adds OpenGL ES 1.1 native library support.</li>
+
+            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
+            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
+            android.opengl.GLSurfaceView} object.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+      alt="">Android NDK, Revision 1</a> <em>(June 2009)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+      <p>Originally released as "Android 1.5 NDK, Release 1".</p>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
+            instructions.</li>
+
+            <li>Includes system headers for stable native APIs, documentation, and sample
+            applications.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+
+
+
+
+<!-- ####################### END OF RELEASE NOTES ####################### -->
diff --git a/docs/html-ndk/ndk/guides/abis.jd b/docs/html-ndk/ndk/guides/abis.jd
index 81604b5..ee55898 100644
--- a/docs/html-ndk/ndk/guides/abis.jd
+++ b/docs/html-ndk/ndk/guides/abis.jd
@@ -14,7 +14,7 @@
   </div>
 
 <p>Different Android handsets use different CPUs, which in turn support different instruction sets.
-Each combination of CPU and instruction set(s) has its own Application Binary Interface, or
+Each combination of CPU and instruction sets has its own Application Binary Interface, or
 <i>ABI</i>. The ABI defines, with great precision, how an application's machine code is supposed to
 interact with the system at runtime. You must specify an ABI for each CPU architecture you want
 your app to work with.</p>
@@ -59,7 +59,7 @@
 </tr>
 
 <tr>
-<td><a href="#v7a">{@code armeabi-v7a}</a></td>
+<td><a href="#v7a">{@code armeabi-v7a} ({@code armeabi-v7a-hard)}</a></td>
 <td>
 <li>armeabi</li>
 <li>Thumb-2</li>
@@ -158,7 +158,8 @@
 <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0210c/CACBCAAE.html">
 Thumb (a.k.a. Thumb-1) instruction set</a>. The NDK generates Thumb
 code by default unless you specify different behavior using the
-<code>LOCAL_ARM_MODE</code> variable in your <a href="android_mk.html"><code>Android.mk</code></a>
+<code>LOCAL_ARM_MODE</code> variable in your
+<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a>
 file.</p>
 
 <h3 id="v7a">armeabi-v7a (armeabi-v7a-hard)</h3>
@@ -186,7 +187,7 @@
 instruction sets on x86 CPUs.</p>
 
 <p>For information about how to perform these runtime checks, refer to
-<a href="{@docRoot}ndk/guides/cpu-features.html">CPU Features</a>.
+<a href="{@docRoot}ndk/guides/cpu-features.html">The {@code cpufeatures} Library</a>.
 Also, for information about the NDK's support for building
 machine code for NEON, see
 <a href="{@docRoot}ndk/guides/cpu-arm-neon.html">NEON Support</a>.</p>
@@ -250,7 +251,7 @@
 CPUs.</p>
 <p> For more information on compiler flags, particularly related to performance optimization,
 refer to <a href="http://software.intel.com/blogs/2012/09/26/gcc-x86-performance-hints">GCC
-x86 Performance</a>.</p>
+x86 performance hints</a>.</p>
 </li>
 <li>Use of the standard Linux x86 32-bit calling convention, as opposed to the one for SVR. For
 more information, see section 6, "Register Usage", of
@@ -377,7 +378,7 @@
 <h2 id="gc">Generating Code for a Specific ABI</h2>
 <p>By default, the NDK generates machine code for the armeabi ABI. You can
 generate ARMv7-a-compatible machine code, instead, by adding the following line
-to your <a href="{docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file.</p>
+to your <a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file.</p>
 <pre class="no-pretty-print">
 APP_ABI := armeabi-v7a
 </pre>
@@ -391,7 +392,7 @@
 
 <p>This setting tells the NDK to build two versions of your machine code: one
 for each ABI listed on this line. For more information on the values you can specify for the
-{@code APP_ABI} variable, see <a href="{docRoot}ndk/guides/android_mk.html">Android.mk</a>.
+{@code APP_ABI} variable, see <a href="{@docRoot}ndk/guides/android_mk.html">Android.mk</a>.
 </p>
 
 <p>When you build multiple machine-code versions, the build system copies the libraries to your
@@ -490,4 +491,4 @@
 {@code data} directory ({@code data/data/&lt;package_name&gt;/lib/}).</p>
 
 <p>If there is no shared-object file at all, the application builds and installs, but crashes at
-runtime.</p>
\ No newline at end of file
+runtime.</p>
diff --git a/docs/html-ndk/ndk/guides/android_mk.jd b/docs/html-ndk/ndk/guides/android_mk.jd
index da94679..8d0a8b1 100644
--- a/docs/html-ndk/ndk/guides/android_mk.jd
+++ b/docs/html-ndk/ndk/guides/android_mk.jd
@@ -9,9 +9,7 @@
         <li><a href="#over">Overview</a></li>
         <li><a href="#basics">Basics</a></li>
         <li><a href="#var">Variables and Macros</a></li>
-        <li><a href="#npv">NDK-provided variables</a></li>
-        <li><a href="#npfm">NDK-provided function macros</a></li>
-        <li><a href="#mdv">Module-description variables</a></li>
+        <li><a href="#mdv">Module-Description Variables</a></li>
       </ol>
     </div>
   </div>
@@ -24,7 +22,8 @@
 <p>The {@code Android.mk} file resides in a subdirectory of your project's {@code jni/} directory,
 and describes your sources and shared libraries to the build system. It is really a tiny GNU
 makefile fragment that the build system parses once or more. The {@code Android.mk} file is useful
-for defining project-wide settings that {@code Application.mk}, the build system, and your
+for defining project-wide settings that <a href="{@docRoot}ndk/guides/application_mk.html">{@code
+Application.mk}</a>, the build system, and your
 environment variables leave undefined. It can also override project-wide settings for specific
 <i>modules</i>.</p>
 
@@ -84,7 +83,7 @@
 
 <p>Each module name must be unique and not contain any spaces. The build system, when it
 generates the final shared-library file, automatically adds the proper prefix and suffix to
-the name that you assign to {@code LOCAL_MODULE|. For example, the example that appears above
+the name that you assign to {@code LOCAL_MODULE}. For example, the example that appears above
 results in generation of a library called {@code libhello-jni.so}.</p>
 
 <p class="note"><strong>Note:</strong> If your module's name already starts with {@code lib}, the
@@ -114,10 +113,10 @@
 script determines what to build, and how to do it.</p>
 
 <p>There are more complex examples in the samples directories, with commented
-{@code Android.mk} files that you can look at. In addition, the
-<a href="{@docRoot}ndk/guides/native-activity.html">walkthrough</a> of the native-activity sample
-disucsses that sample's {@code Android.mk} file in some detail. Finally, the next section explains
-the variables from this section in a bit more detail.
+{@code Android.mk} files that you can look at. In addition,
+<a href="{@docRoot}ndk/guides/sample_na.html">Sample: native-activity</a> provides
+a detailed explanation of that sample's {@code Android.mk} file. Finally, <a href="#var">
+Variables and Macros</a> provides further information on the variables from this section.
 
 
 <h2 id="var">Variables and Macros</h2>
@@ -155,7 +154,7 @@
 you provided in your {@code LOCAL_XXX} variables, and determines how to build a target shared
 library from the sources you listed. Note that using this script requires that you have already
 assigned values to {@code LOCAL_MODULE} and {@code LOCAL_SRC_FILES}, at a minimum (for more
-information about these variables, see <a href = "#mdv">Module-description variables</a>).</p>
+information about these variables, see <a href = "#mdv">Module-Description Variables</a>).</p>
 
 <p>The syntax for using this variable is:</p>
 
@@ -190,23 +189,14 @@
 </pre>
 
 <p>You can also reference a prebuilt library in another module by using the
-{@code LOCAL_PREBUILTS} variable. The following example shows an example of using
-{@code LOCAL_PREBUILTS}:
-
-<!--
-<pre class="no-pretty-print">
-(TODO: Example of referencing prebuilt library from another, using LOCAL_PREBUILTS.)
-</pre>
--->
-
-<p>For more information about using prebuilts, see <a href="{@docRoot}ndk/guides/prebuilts.html">
-NDK Prebuilt Library Support</a>.</p>
+{@code LOCAL_PREBUILTS} variable. For more information about using prebuilts, see
+<a href="{@docRoot}ndk/guides/prebuilts.html">Using Prebuilt Libraries</a>.</p>
 
 
 <h4>PREBUILT_STATIC_LIBRARY</h4>
 <p>The same as {@code PREBUILT_SHARED_LIBRARY}, but for a prebuilt static library. For more
-information about using prebuilts, see <a href="{@docRoot}ndk/guides/prebuilts.html">NDK Prebuilt
-Library Support</a>.</p>
+information about using prebuilts, see <a href="{@docRoot}ndk/guides/prebuilts.html">Using Prebuilt
+Libraries</a>.</p>
 
 <h4>TARGET_ARCH</h4>
 <p>The name of the target CPU architecture as the Android Open Source Project specifies it.
@@ -214,14 +204,13 @@
 ABI (see TARGET_ARCH_ABI, below).</p>
 
 <p>The value of this variable is taken from the APP_ABI variable that you define in the
-<a href="{docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file, which the system
-reads ahead of parsing the {@code Android.mk} file.</p>
+{@code Android.mk} file, which the system reads ahead of parsing the {@code Android.mk} file.</p>
 
 <h4>TARGET_PLATFORM</h4>
 <p>The Android API level number for the build system to target.
 For example, the Android 5.1 system images correspond to Android API level 22: {@code android-22}.
 For a complete list of platform names and corresponding Android system
-images, see <a href="{@docRoot}ndk/guides/stable_apis.html">Android NDK Stable APIs</a>.
+images, see <a href="{@docRoot}ndk/guides/stable_apis.html">Android NDK Native APIs</a>.
 The following example shows the syntax for using this variable:</p>
 
 <pre class="no-pretty-print">
@@ -242,36 +231,36 @@
     <th scope="col">Setting</th>
   </tr>
   <tr>
-    <th scope="col">ARMv5TE</th>
-    <th scope="col">{@code armeabi}</th>
+    <td>ARMv5TE</td>
+    <td>{@code armeabi}</td>
   </tr>
   <tr>
-    <th scope="col">ARMv7</th>
-    <th scope="col">{@code armeabi-v7a}</th>
+    <td>ARMv7</td>
+    <td>{@code armeabi-v7a}</td>
   </tr>
   <tr>
-    <th scope="col">ARMv8 AArch64</th>
-    <th scope="col">{@code arm64-v8a}</th>
+    <td>ARMv8 AArch64</td>
+    <td>{@code arm64-v8a}</td>
   </tr>
   <tr>
-    <th scope="col">i686</th>
-    <th scope="col">{@code x86}</th>
+    <td>i686</td>
+    <td>{@code x86}</td>
   </tr>
   <tr>
-    <th scope="col">x86-64</th>
-    <th scope="col">{@code x86_64}</th>
+    <td>x86-64</td>
+    <td>{@code x86_64}</td>
   </tr>
   <tr>
-    <th scope="col">mips32 (r1)</th>
-    <th scope="col">{@code mips}</th>
+    <td>mips32 (r1)</td>
+    <td>{@code mips}</td>
   </tr>
   <tr>
-    <th scope="col">mips64 (r6)</th>
-    <th scope="col">{@code mips64}</th>
+    <td>mips64 (r6)</td>
+    <td>{@code mips64}</td>
   </tr>
   <tr>
-    <th scope="col">All</th>
-    <th scope="col">{@code all}</th>
+    <td>All</td>
+    <td>{@code all}</td>
   </tr>
 </table>
 
@@ -286,8 +275,7 @@
 
 <p>For more details about architecture ABIs and associated compatibility
 issues, refer to
-<a href="{@docRoot}ndk/guides/md_3__key__topics__c_p_u__support__chapter_1-section_8__a_b_is.html">
-Android Native CPU ABI Management</a></p>
+<a href="{@docRoot}ndk/guides/abis.html">ABI Management</a>.</p>
 
 <p>New target ABIs in the future will have different values.</p>
 
@@ -303,7 +291,7 @@
 <p class="note"><strong>Note:</strong> Up to Android NDK 1.6_r1, the default value was
 {@code android-3-arm}.</p>
 
-<h2 id="mdv">Module-description variables</h2>
+<h2 id="mdv">Module-Description Variables</h2>
 <p>The variables in this section describe your module to the build system. Each module description
 should follow this basic flow:
 <ul>
@@ -332,7 +320,8 @@
 and must not contain any spaces. You must define it before including any scripts (other than
 the one for {@code CLEAR_VARS}). You need not add either the {@code lib} prefix
 or the {@code .so} or {@code .a} file extension; the build system makes these modifications
-automatically. Throughout your {@code Android.mk} and {@code Application.mk} files, refer to
+automatically. Throughout your {@code Android.mk} and
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> files, refer to
 your module by its unmodified name. For example, the following line results in the generation of a
 shared library module called {@code libfoo.so}:</p>
 
@@ -365,8 +354,7 @@
 system automatically computes any associated depencies.</p>
 <p>Note that you can use both relative (to {@code LOCAL_PATH}) and absolute file paths.
 
-<p>We recommend avoiding absolute file paths; relative paths make your
-<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file more
+<p>We recommend avoiding absolute file paths; relative paths make your {@code Android.mk} file more
 portable.</p>
 
 <p class="note"><strong>Note: </strong> Always use Unix-style forward slashes (/) in build files.
@@ -450,8 +438,8 @@
 
 <p>Try not to change the optimization/debugging level in your {@code Android.mk} file.
 The build system can handle this setting automatically for you, using the relevant information
-in the {@code Application.mk} file. Doing it this way allows the build system to generate useful
-data files used during debugging.</p>
+in the <a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file. Doing it
+this way allows the build system to generate useful data files used during debugging.</p>
 
 <p class="note"><strong>Note: </strong>In android-ndk-1.5_r1, the corresponding flags only applied
 to C source files, not C++ ones. They now match the full Android build system behavior.
@@ -520,7 +508,7 @@
 </pre>
 
 <p>For the list of exposed system libraries against which you can link in this NDK release, see
-<a href="stable_apis.html">Android NDK Stable APIs</a>.</p>
+<a href="stable_apis.html">Android NDK Native APIs</a>.</p>
 
 <p class="note"><strong>Note: </strong> If you define this variable for a static library,
 the build system ignores it, and {@code ndk-build} prints a warning.</p>
@@ -574,22 +562,20 @@
 
 <p class="note"><strong>Note: </strong> You can also force the build system to generate ARM binaries
 by setting {@code APP_OPTIM} in your
-<a href="{@docRoot}ndk/guides/application_mk.html>{@code Application.mk}</a> file to {@code debug}.
-Specifying {@code debug} forces an ARM build because the toolchain debugger does not handle thumb
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file to {@code debug}.
+Specifying {@code debug} forces an ARM build because the toolchain debugger does not handle Thumb
 code properly.</p>
 
 
 <h4>LOCAL_ARM_NEON</h4>
-<p>This variable only matters when you are targetting the {@code armeabi-v7a} ABI. It allows the
+<p>This variable only matters when you are targeting the {@code armeabi-v7a} ABI. It allows the
 use of ARM Advanced SIMD (NEON) GCC intrinsics in your C and C++ sources, as well as NEON
 instructions in Assembly files.</p>
 
 <p>Note that not all ARMv7-based CPUs support the NEON instruction set extensions. For this reason,
 you must perform runtime detection to be able to safely use this code at runtime. For more
-information, please see <a href="{@docRoot}ndk/guides/cpu_support.html">Android
-NDK &amp; ARM NEON Instruction Set Extension Support</a> and <a
-href="{@docRoot}ndk/guides/cpu_features.html">Android
-NDK CPU Features Detection Library</a>.</p>
+information, see <a href="{@docRoot}ndk/guides/cpu-arm-neon.html">NEON Support</a> and <a
+href="{@docRoot}ndk/guides/cpu-features.html">The {@code cpufeatures} Library</a>.</p>
 
 <p>Alternatively, you can use the {@code .neon} suffix to specify that the build system only
 compile specific source files with NEON support. In the following example, the build system compiles
@@ -635,8 +621,8 @@
 
 <p>By default, the build system compiles code with format string protection. Doing so forces a
 compiler error if a non-constant format string is used in a {@code printf}-style function.</p>
-<p>This protection is off by default, but you can disable it by setting its value to
-{@code true}. We do not recommend doing so without a compelling reason.</p>
+<p>This protection is on by default, but you can disable it by setting the value of
+this variable to {@code true}. We do not recommend doing so without a compelling reason.</p>
 
 
 <h4>LOCAL_EXPORT_CFLAGS</h4>
@@ -729,7 +715,7 @@
 
 <p>Note that any value other than {@code true} will revert to the
 default behaviour. You can also define {@code APP_SHORT_COMMANDS} in your
-<a href="{docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file to force this
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file to force this
 behavior for all modules in your project.</p>
 
 <p>We do not recommend enabling this feature by default, since it makes the build slower.</p>
@@ -745,7 +731,8 @@
 such libraries <em>cannot</em> be moved to a different location (all paths
 inside them are relative).</p>
 <p>Valid values are {@code true}, {@code false} or empty. A
-default value can be set in your {@code Application.mk} file through the {@code APP_THIN_ARCHIVE}
+default value can be set in your <a href="{@docRoot}ndk/guides/application_mk.html">
+{@code Application.mk}</a> file through the {@code APP_THIN_ARCHIVE}
 
 variable.</p>
 <p class="note"><strong>Note:</strong> This is ignored for non-static library modules, or prebuilt
@@ -785,7 +772,7 @@
 myasmfilter bar.S $OBJS_DIR/bar.S
 </pre>
 
-<h3 id="npfm">NDK-Provided Function Macros</h2>
+<h3 id="npfm">NDK-provided function macros</h2>
 <p>This section explains GNU Make function macros that the NDK provides. Use
 {@code $(call &lt;function&gt;)} to evaluate them; they return textual information.</p>
 
@@ -876,16 +863,16 @@
 included the current one).</p>
 
 <h4>import-module</h4>
-<p>A function that allows you to find and include the {@code Android.mk}
-of another module by name. A typical example is as follows: </p>
+<p>A function that allows you to find and include a module's {@code Android.mk} file by the name of
+the module. A typical example is as follows: </p>
 
 <pre class="no-pretty-print">
 $(call import-module,&lt;name&gt;)
 </pre>
 
-<p>In this example, the build system looks for the module tagged &lt;name&gt; in the list of
+<p>In this example, the build system looks for the module tagged {@code &lt;name&gt;} in the list of
 directories referenced that your {@code NDK_MODULE_PATH} environment variable references, and
 includes its {@code Android.mk} file automatically for you.</p>
 
-<p>For more information, see <a href="import_module.html">Android Module Paths (Sharing Code)</a>.
+<p>For more information, see <a href="import.html">Android Module Paths (Sharing Code)</a>.
 </p>
diff --git a/docs/html-ndk/ndk/guides/application_mk.jd b/docs/html-ndk/ndk/guides/application_mk.jd
index be82fbe..d51cf64 100644
--- a/docs/html-ndk/ndk/guides/application_mk.jd
+++ b/docs/html-ndk/ndk/guides/application_mk.jd
@@ -117,7 +117,7 @@
 
 <h4>APP_ABI</h4>
 <p>By default, the NDK build system generates machine code for the
-<a href="{docRoot}ndk/guides/abis.html">{@code armeabi}</a> ABI. This machine code
+<a href="{@docRoot}ndk/guides/abis.html">{@code armeabi}</a> ABI. This machine code
 corresponds to an ARMv5TE-based CPU with software floating point operations. You can use
 {@code APP_ABI} to select a different ABI. Table 1 shows the {@code APP_ABI}
 settings for different instruction sets.</p>
@@ -169,12 +169,12 @@
 </pre>
 
 <p>For the list of all supported ABIs and details about their usage and limitations, refer to
-<a href="{@docRoot}ndk/guides/abis.html">Android Native CPU ABI Management</a>.</p>
+<a href="{@docRoot}ndk/guides/abis.html">ABI Management</a>.</p>
 
 <h4>APP_PLATFORM</h4>
 <p>This variable contains the name of the target Android platform. For example, {@code android-3}
 specifies the Android 1.5 system images. For a complete list of platform names and corresponding
-Android system images, see <a href="{@docRoot}ndk/guides/stable_apis.html">Android NDK Stable APIs
+Android system images, see <a href="{@docRoot}ndk/guides/stable_apis.html">Android NDK Native APIs
 </a>.</p>
 
 <h4>APP_STL</h4>
@@ -205,14 +205,14 @@
   </tr>
 </table>
 
-<p>For more information on this subject, see <a href="{@docRoot}ndk/guides/cpp_support.html">C++
-Support</a>.</p>
+<p>For more information on this subject, see <a href="{@docRoot}ndk/guides/cpp-support.html">
+C++ Library Support</a>.</p>
 
 
 <h4>APP_SHORT_COMMANDS</h4>
 <p>The equivalent of {@code LOCAL_SHORT_COMMANDS} in {@code Application.mk} for your whole project.
 For more information, see the documentation for this variable on
-<a href="{docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a>.</p>
+<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a>.</p>
 
 <h4>NDK_TOOLCHAIN_VERSION</h4>
 <p>Define this variable as either {@code 4.9} or {@code 4.8} to select a version of the GCC
@@ -237,5 +237,5 @@
 <h4>APP_THIN_ARCHIVE</h4>
 <p>Sets the default value of {@code LOCAL_THIN_ARCHIVE} in the {@code Android.mk} file for all
 static library modules in this project. For more information, see the documentation for
-{@code LOCAL_THIN_ARCHIVE} on <a href="{docRoot}ndk/guides/android_mk.html">{@code Android.mk}.</a>
+{@code LOCAL_THIN_ARCHIVE} on <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}.</a>
 </p>
diff --git a/docs/html-ndk/ndk/guides/arch.jd b/docs/html-ndk/ndk/guides/arch.jd
index 875bbd9..3dafe8f 100644
--- a/docs/html-ndk/ndk/guides/arch.jd
+++ b/docs/html-ndk/ndk/guides/arch.jd
@@ -1,31 +1,19 @@
-page.title=Architectures and CPUs
+page.title=CPUs and Architectures
 @jd:body
 
-<div class="contents">
-<div class="textblock"><p>This section includes detailed information about ABIs and detailed information on support for respective instruction sets. It includes these topics:</p>
-<ul>
-<li><a href="./md_3__key__topics__c_p_u__support__chapter_1-section_8__a_b_is.html">ABI Management</a><ul>
-<li>Different ABIs support different CPUs and processing capabilities.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__c_p_u__support__c_p_u-_a_r_m-_n_e_o_n.html">Neon</a><ul>
-<li>Details about targeting devices whose CPUs support Neon, or Advanced SIMD. Neon is an optional extension of the armv7 architecture.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__c_p_u__support__c_p_u-_m_i_p_s.html">Mips</a><ul>
-<li>Details about targeting devices with CPUs supporting the MIPS32 instruction set.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__c_p_u__support__c_p_u-_x86.html">x86</a><ul>
-<li>Details about targeting devices with CPUs supporting the IA-32 instruction set.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__c_p_u__support__c_p_u-_x86-64.html">x86-64</a><ul>
-<li>Details about targeting devices whose CPUs support the x86-64 instruction set.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__c_p_u__support__c_p_u-_f_e_a_t_u_r_e_s.html">CPU Features</a><ul>
-<li>A small library that detects the target device's CPU family and supported features. </li>
-</ul>
-</li>
-</ul>
\ No newline at end of file
+<p>When you're working with native code, hardware matters. The NDK lets you ensure you're compiling
+for the right architectures and CPUs by giving you a variety of ABIs from which
+to choose.</p>
+
+<p>This section begins by explaining how to target specific
+<a href="{@docRoot}ndk/guides/abis.html">architectures and CPUs</a>. It then
+provides information you need to know when targeting the
+<a href="{@docRoot}ndk/guides/abis.html">ARM</a>
+family of CPUs and architectures. Next, it provides information about  the other CPUs and
+architectures that it supports: <a href="{@docRoot}ndk/guides/cpu-arm-neon.html">NEON</a>, x86
+(<a href="{@docRoot}ndk/guides/x86.html">32-bit</a> and
+<a href="{@docRoot}ndk/guides/x86-64.html">64-bit</a>), and
+<a href="{@docRoot}ndk/guides/mips.html">MIPS</a>. Finally, it explains how to use the
+<a href="{@docRoot}ndk/guides/cpu-features.html">{@code cpufeatures}</a>
+library, which your app can use to query a given CPU and architecture about the optional
+features they support.</p>
\ No newline at end of file
diff --git a/docs/html-ndk/ndk/guides/build.jd b/docs/html-ndk/ndk/guides/build.jd
index b1893fa..6286328 100644
--- a/docs/html-ndk/ndk/guides/build.jd
+++ b/docs/html-ndk/ndk/guides/build.jd
@@ -1,23 +1,18 @@
-page.title=Building
+page.title=Building Your Project
 @jd:body
 
-<div class="contents">
-<div class="textblock"><p>This section explains, in detail, how to use the NDK to build your project. It comprises the following topics:</p>
-<ul>
-<li><a href="./md_3__key__topics__building__chapter_1-section_8_ndk-build.html">ndk-build</a><ul>
-<li>How to use the shell script that invokes the tools to build your shared libraries.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__building__chapter_1-section_8__android_8mk.html">Android.mk</a><ul>
-<li>Syntax for the file that describes your build sources to the build system.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__building__a_p_p_l_i_c_a_t_i_o_n-_m_k.html">Application.mk</a><ul>
-<li>Syntax for the file that describes the native modules that your application requires.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__building__s_t_a_n_d_a_l_o_n_e-_t_o_o_l_c_h_a_i_n.html">Standalone Toolchain</a><ul>
-<li>How to integrate the NDK into your existing build system. </li>
-</ul>
-</li>
-</ul>
\ No newline at end of file
+<p>One of the NDK's core purposes is allowing you to build C and C++ source code into shared
+libraries that you can use in your app.</p>
+
+<p>This section explains how to build native binaries for use in your Android app. It begins by
+explaining the
+<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file, which
+defines properties specific to individual <i>modules</i>, or libraries. Then, it explains the
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file, which defines
+properties for all the modules that you use in your
+app. Next, it tells you how to use the <a href="{@docRoot}ndk/guides/ndk-build.html">
+{@code ndk-build}</a> script, which is what the NDK uses to build your sources. Last, it ventures
+into advanced territory, discussing how to incorporate the NDK into your own
+<a href="{@docRoot}ndk/guides/standalone_toolchain.html">toolchain</a>, if you prefer to
+build that way instead of using
+<a href="{@docRoot}ndk/guides/ndk-build.html">{@code ndk-build}</a>.</p>
\ No newline at end of file
diff --git a/docs/html-ndk/ndk/guides/concepts.jd b/docs/html-ndk/ndk/guides/concepts.jd
index bd4570e..45dceeb 100644
--- a/docs/html-ndk/ndk/guides/concepts.jd
+++ b/docs/html-ndk/ndk/guides/concepts.jd
@@ -23,7 +23,7 @@
 <li>Already familiar with concepts inherent in native programming and in
 <a href="{@docRoot}">Android development</a>.</li>
 <li>Working in <a href="{@docRoot}sdk/index.html">Eclipse, and using the Android
-Development Tools ("ADT")</a>, except where otherwise noted.</li>
+Development Tools (ADT)</a>, except where otherwise noted.</li>
 </ul>
 <h2 id="intro">Introduction</h2>
 
@@ -53,14 +53,14 @@
 <li>Generate binaries.</li>
 <li>Copy the binaries to your app's project path.</li>
 </ul>
-<p>For more information, see the
-<a href="{@docRoot}ndk/guides/ndk-build.html">ndk-build</a> section of this guide.</p>
+<p>For more information, see
+<a href="{@docRoot}ndk/guides/ndk-build.html">ndk-build</a>.</p>
 </li>
 </ul>
 
 <ul>
 <li>Java: From your Java source, the Android build process generates {@code .dex}
-("Dalvik EXecutable") files, which are what the Android OS runs in the Dalvik Virtual Machine
+(Dalvik EXecutable) files, which are what the Android OS runs in the Dalvik Virtual Machine
 (“DVM”). Even if your app contains no Java source code at all, the build process still generates a
 {@code .dex} executable file within which the native component runs.
 
@@ -92,14 +92,14 @@
 </ul>
 
 <ul>
-<li>Java Native Interface ("JNI"): The JNI is the interface via which the Java and C++ components
+<li>Java Native Interface (JNI): The JNI is the interface via which the Java and C++ components
 talk to one another. This guide assumes knowledge of the JNI; for information about it, consult the
 <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html">
 Java Native Interface Specification</a>.</li>
 </ul>
 
 <ul>
-<li>Application Binary Interface ("ABI"): The ABI defines exactly how your app's machine code is
+<li>Application Binary Interface (ABI): The ABI defines exactly how your app's machine code is
 expected to interact with the system at runtime. The NDK builds {@code .so} files against these
 definitions. Different ABIs correspond to different architectures: The NDK includes ABI support for
 ARMEABI (default), MIPS, and x86. For more information, see
@@ -109,9 +109,9 @@
 <ul>
 <li>Manifest: If you are writing an app with no Java component to it, you must declare the
 {@link android.app.NativeActivity} class in the
-<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest</a>. The
-<a href="#naa">Native Activity</a> section provides more detail on how to do this, under
-“Using the native-activity.h interface.”
+<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest</a>.
+<a href="#naa">Native Activities and Applications</a> provides more detail on how to do this, under
+“Using the {@code native-activity.h} interface.”
 </li>
 </ul>
 
@@ -119,21 +119,22 @@
 the Android NDK as standalone compilers.</p>
 
 <ul>
-<li>{@code Android.mk}: You must create an {@code Android.mk} configuration file inside your
-{@code jni} folder. The ndk-build script looks at this file, which defines the module and its name,
-the source files to be compiled, build flags and libraries to link. For more information, see the
-<a href="{@docRoot}ndk/guides/android.mk.html">Android.mk</a> section of this document.</li>
+<li>{@code Android.mk}: You must create an <a href="{@docRoot}ndk/guides/android_mk.html">
+{@code Android.mk}</a> configuration file inside your {@code jni} folder. The ndk-build script
+looks at this file, which defines the module and its name, the source files to be compiled, build
+flags and libraries to link.</li>
 </ul>
 
 <ul>
-<li>{@code Application.mk}: You may optionally create an Application.mk file. This file enumerates
-and describes the modules that your app requires. This information includes:<ul>
+<li>{@code Application.mk}: You may optionally create an
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file. This file
+This file enumerates and describes the modules that your app requires. This information includes:
+
+<ul>
 <li>ABIs used to compile for specific platforms.</li>
 <li>Toolchains.</li>
 <li>Standard libraries to include (static and dynamic STLport or default system).</li>
 </ul>
-<p>For more information, see the
-<a href="{@docRoot}ndk/guides/application.mk.html">Application.mk</a> section.</p>
 </li>
 </ul>
 
@@ -152,13 +153,14 @@
 <li>Create an Android app Project in Eclipse as you would for any other Android project.</li>
 <li>If you are writing a native-only app, declare the {@link android.app.NativeActivity} class in
 {@code AndroidManifest.xml}. You can do so from the Eclipse/ADT Android Manifest Editor, or by
-hand-editing the file. For more information, see the <a href="#naa">Native Activity</a> section.
+hand-editing the file. For more information, see the <a href="#naa">Native Activities and
+Applications</a>.
 </li>
-<li>Create an Android.mk file describing the native library, including name, flags, linked libraries
-and source files to be compiled in the ‘JNI’ directory.</li>
-<li>OPTIONAL: Create an {@code Application.mk} file configuring the target ABIs, toolchain,
-release/debug mode, and STL. For any of these that you do not specify, the following default values
-are used, respectively:
+<li>Create an {@code Android.mk} file describing the native library, including name, flags, linked
+libraries, and source files to be compiled in the ‘JNI’ directory.</li>
+<li>Optionally, you can create an {@code Application.mk} file configuring the target ABIs,
+toolchain, release/debug mode, and STL. For any of these that you do not specify, the following
+default values are used, respectively:
 <ul>
 <li>
 ABI: armeabi
@@ -195,7 +197,7 @@
 through the JNI. In certain cases, however&ndash;such as for sensors, input events, and
 assets&ndash;the NDK provides native interfaces that you can use instead of having to call
 across the JNI. For more information about such support, see
-<a href="{@docRoot}ndk/guides/stable-apis.html">Stable APIs</a>.</p>
+<a href="{@docRoot}ndk/guides/stable_apis.html">Android NDK Native APIs</a>.</p>
 
 <p>Regardless of whether or not you are developing a native activity, we recommend that you create
 your projects with the traditional Android build tools. Doing so helps ensure building and packaging
@@ -265,25 +267,25 @@
 function, which the app calls when the native activity starts. This function, analogous
 to {@code main} in C/C++, receives a pointer to an {@code ANativeActivity} structure,
 which contains function pointers to the various callback implementations that you need to write.
-Set the applicable callback function pointers in {@code ANativeActivity-&gt;;callbacks} to the
+Set the applicable callback function pointers in {@code ANativeActivity-&gt;callbacks} to the
 implementations of your callbacks.</li>
 
 <!--TODO: API Ref links in the above para.-->
 
-<li>Set the {@code ANativeActivity-&gt;;instance} field to the address of any instance of specific
+<li>Set the {@code ANativeActivity-&gt;instance} field to the address of any instance of specific
 data that you want to use.</li>
 <li>Implement anything else that you want your activity to do upon starting.</li>
-<li>Implement the rest of the callbacks that you set in {@code ANativeActivity-&gt;;callbacks}. For
-more information on when the callbacks are called, see the
-<a href="{@docRoot}training/basics/activity-lifecycle/index.html">SDK documentation for Activity Lifecycles</a>.
+<li>Implement the rest of the callbacks that you set in {@code ANativeActivity-&gt;callbacks}. For
+more information on when the callbacks are called, see
+<a href="{@docRoot}training/basics/activity-lifecycle/index.html">Managing the Activity
+Lifecycle</a>.
 </li>
 <li>Develop the rest of your application.</li>
 <li>Create an {@code Android.mk file} in the {@code jni/} directory of your project to describe your
-native module to the build system. For more information, see the
-<a href="./md_3__key__topics__building__chapter_1-section_8__android_8mk.html">Android.mk section.</a>.
-</li>
-<li>Once you have an {@code Android.mk} file, compile your native code using the {@code ndk-build}
-command.</li>
+native module to the build system. For more information, see
+<a href="{@docRoot}ndk/guides/android_mk.html">Android.mk</a>.</li>
+<li>Once you have an <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a>
+file, compile your native code using the {@code ndk-build} command.</li>
 
 <pre class="no-pretty-print">
 $ cd &lt;path&gt;/&lt;to&gt;/&lt;project&gt;
diff --git a/docs/html-ndk/ndk/guides/cpp-support.jd b/docs/html-ndk/ndk/guides/cpp-support.jd
index 6054181..ff170f4 100644
--- a/docs/html-ndk/ndk/guides/cpp-support.jd
+++ b/docs/html-ndk/ndk/guides/cpp-support.jd
@@ -114,7 +114,7 @@
 For more information on how to use these runtimes with your own toolchain, see <a href="{@docRoot}ndk/guides/standalone_toolchain.html">Standalone Toolchain</a>.</p>
 
 <h2 id="rc">Runtime Characteristics</h2>
-<h3 id="system">System runtime</h3>
+<h3 id="system">libstdc++ (default system runtime)</h3>
 
 <p>This runtime only provides the following headers, with no support beyond them:</p>
 <ul>
@@ -175,7 +175,7 @@
 shared library file is named {@code libc++_shared.so}.</p>
 
 <p>By default, this runtime compiles with {@code -std=c++11}. As with GNU {@code libstdc++}, you
-need to explicitly turns on exceptions or rtti support. For information on how to do this, see
+need to explicitly turns on exceptions or RTTI support. For information on how to do this, see
 <a href="#xp">C++ Exceptions</a> and <a href="#rt">RTTI</a>.</p>
 
 <p>The NDK provides prebuilt static and shared libraries for {@code libc++} compiled by Clang 3.4,
@@ -235,9 +235,9 @@
 exceptions either for your entire app, or for individual modules.
 
 <p>To enable exception-handling support for your entire app, add the following line to
-your <a href="{docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file.
+your <a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file.
 To enable exception-handling support for individual modules', add the following line to
-their respective <a href="{docRoot}ndk/guides/android.html">{@code Android.mk}</a> files.</p>
+their respective <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> files.</p>
 
 <pre>
 APP_CPPFLAGS += -fexceptions
@@ -249,14 +249,14 @@
 sources with {@code -fno-rtti} by default.
 
 <p>To enable RTTI support for your entire app for your entire application, add the following line to
-your <a href="{docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file:
+your <a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a> file:
 
 <pre>
 APP_CPPFLAGS += -frtti
 </pre>
 
 To enable RTTI support for individual modules, add the following line to
-their respective <a href="{docRoot}ndk/guides/android.html">{@code Android.mk}</a> files:
+their respective <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> files:
 
 <pre>
 LOCAL_CPP_FEATURES += rtti
@@ -303,7 +303,7 @@
 <li>libstlport_shared.so, used by both libfoo and libbar</li>
 </ul>
 
-<p>You must need to load the libraries in reverse dependency order: </p>
+<p>You must load the libraries in reverse dependency order: </p>
 <pre>
     static {
       System.loadLibrary("stlport_shared");
@@ -325,4 +325,4 @@
 License</a> on the GCC website.</p>
 
 <p><a href="https://llvm.org/svn/llvm-project/libcxx/trunk/LICENSE.TXT">LLVM {@code libc++}</a>
-is dual-licensed under both the University of Illinois "BSD-Like" license and the MIT license.</p>
\ No newline at end of file
+is dual-licensed under both the University of Illinois "BSD-Like" license and the MIT license.</p>
diff --git a/docs/html-ndk/ndk/guides/cpu-arm-neon.jd b/docs/html-ndk/ndk/guides/cpu-arm-neon.jd
index 32e9942..1d12937 100644
--- a/docs/html-ndk/ndk/guides/cpu-arm-neon.jd
+++ b/docs/html-ndk/ndk/guides/cpu-arm-neon.jd
@@ -27,7 +27,7 @@
 <p>Not all ARMv7-based Android devices support NEON, but devices that do may benefit significantly
 from its support for scalar/vector instructions. For x86 devices, the NDK can also translate NEON
 instructions into SSE, although with several restrictions. For more information, see
-<a href="{docRoot}ndk/guides/x86.html#an>x86 Support for ARM NEON Intrinsics.</a></p>
+<a href="{@docRoot}ndk/guides/x86.html#an">x86 Support for ARM NEON Intrinsics.</a></p>
 
 <h2 id="ul">Using LOCAL_ARM_NEON</h2>
 <p>To have the NDK build all its source files with NEON support, include the following line in
@@ -58,7 +58,7 @@
 <p>NEON support only works with the {@code armeabi-v7a} and {@code x86} ABIs. If the NDK build
 scripts encounter other ABIs while attempting to build with NEON support, the NDK build scripts
 exit. x86 provides <a href="x86.html">partial NEON support</a> via translation header. It is
-important to use checks like the following in your <a href="{docRoot}ndk/guides/android_mk.html">
+important to use checks like the following in your <a href="{@docRoot}ndk/guides/android_mk.html">
 {@code Android.mk}</a> file:</p>
 
 <pre class="no-pretty-print">
@@ -76,7 +76,7 @@
 <p>Your app must perform runtime detection to confirm that NEON-capable machine code can be run on
 the target device. This is because not all ARMv7-based Android devices support NEON. The app can
 perform this check using the
-<a href="{@docRoot}ndk/guides/cpu_features.html">{@code cpufeatures}</a> library that comes with
+<a href="{@docRoot}ndk/guides/cpu-features.html">{@code cpufeatures}</a> library that comes with
 this NDK.</p>
 
 <p>You should explicitly check that {@code android_getCpuFamily()} returns {@code
diff --git a/docs/html-ndk/ndk/guides/cpu-features.jd b/docs/html-ndk/ndk/guides/cpu-features.jd
index b27250a..b031909 100644
--- a/docs/html-ndk/ndk/guides/cpu-features.jd
+++ b/docs/html-ndk/ndk/guides/cpu-features.jd
@@ -98,7 +98,7 @@
 
 <dt>{@code ANDROID_CPU_ARM_FEATURE_ARMv7}</dt>
 <dd>Indicates that the device's CPU supports the ARMv7-A instruction set as supported by the
-<a href="{@docRoot}ndk/guides/abis.html">armeabi-v7a</a> ABI. This instruction set supports both
+<a href="{@docRoot}ndk/guides/abis.html#v7a">armeabi-v7a</a> ABI. This instruction set supports both
 Thumb-2 and VFPv3-D16 instructions. This return value also indicates support for the VFPv3 hardware
 FPU instruction-set extension.</dd>
 
diff --git a/docs/html-ndk/ndk/guides/debug.jd b/docs/html-ndk/ndk/guides/debug.jd
index b202ed9..3c4da3b 100644
--- a/docs/html-ndk/ndk/guides/debug.jd
+++ b/docs/html-ndk/ndk/guides/debug.jd
@@ -1,17 +1,11 @@
-page.title=Debugging
+page.title=Debugging Your Project
 @jd:body
 
-<div class="title">Debugging </div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><p>This section introduces you to debugging with the NDK. It includes:</p>
-<ul>
-<li><a href="./md_3__key__topics__debugging__n_d_k-_g_d_b.html">ndk-gdb and ndk-gdb-py</a><ul>
-<li>The helper shell script named <code>ndk-gdb</code>, which allows you to launch a native debugging session for your NDK-generated machine code.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__debugging__n_d_k-_s_t_a_c_k.html">ndk-stack</a><ul>
-<li>A tool that helps you use ADB <code>logcat</code> in your debugging. </li>
-</ul>
-</li>
-</ul>
\ No newline at end of file
+<p>After you've built your app, you'll probably need to debug it. This section introduces you to the
+NDK's debugging tools.</p>
+
+<p>It begins by telling you how to use the <a href="{@docRoot}ndk/guides/ndk-gdb.html">
+{@code ndk-gdb}</a> tool to debug your code. It closes with an explanation of the
+<a href="{@docRoot}ndk/guides/ndk-stack.html">{@code ndk-stack}</a> tool, which helps you use the
+<a href="{@docRoot}tools/help/logcat.html">ADB logcat tool</a>
+as you debug.</p>
\ No newline at end of file
diff --git a/docs/html-ndk/ndk/guides/guides_toc.cs b/docs/html-ndk/ndk/guides/guides_toc.cs
index 854169d..981eb51 100644
--- a/docs/html-ndk/ndk/guides/guides_toc.cs
+++ b/docs/html-ndk/ndk/guides/guides_toc.cs
@@ -8,64 +8,58 @@
 
 <ul id="nav">
    <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/index.html"><span class="en">
-      Getting Started</span></a></div>
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>ndk/guides/index.html">
+      <span class="en">Getting Started</span></a></div>
       <ul>
-         <li><a href="setup.html">Setup</a></li>
-         <li><a href="concepts.html">Concepts</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/setup.html">Setup</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/concepts.html">Concepts</a></li>
       </ul>
    </li>
 
    <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/build.html"><span class="en">
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>ndk/guides/build.html">
+      <span class="en">
       Building</span></a></div>
       <ul>
-         <li><a href="#">ndk-build</a></li>
-         <li><a href="#">Android.mk</a></li>
-         <li><a href="#">Application.mk</a></li>
-         <li><a href="#">Standalone Toolchain</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/android_mk.html">Android.mk</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/application_mk.html">Application.mk</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/ndk-build.html">ndk-build</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/standalone_toolchain.html">Standalone Toolchain
+         </a></li>
       </ul>
    </li>
 
    <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/debug.html"><span class="en">
-      Debugging</span></a></div>
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>ndk/guides/arch.html">
+      <span class="en">Architectures and CPUs</span></a></div>
       <ul>
-         <li><a href="#">ndk-gdb</a></li>
-         <li><a href="#">ndk-stack</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/abis.html">ABI Management</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/cpu-arm-neon.html">NEON</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/x86.html">x86</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/x86-64.html">x86-64</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/mips.html">MIPS</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/cpu-features.html">The cpufeatures Library</a>
+         </li>
       </ul>
    </li>
 
    <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/arch.html"><span class="en">
-      Architectures and CPUs</span></a></div>
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>ndk/guides/debug.html">
+      <span class="en">Debugging</span></a></div>
       <ul>
-         <li><a href="#">ABI Management</a></li>
-         <li><a href="#">Neon</a></li>
-         <li><a href="#">Mips</a></li>
-         <li><a href="#">x86</a></li>
-         <li><a href="#">x86-64</a></li>
-         <li><a href="#">CPU Features</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/ndk-gdb.html">ndk-gdb</a></li>
+         <li><a href="<?cs var:toroot ?>ndk/guides/ndk-stack.html">ndk-stack</a></li>
       </ul>
    </li>
 
    <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/libs.html"><span class="en">
-      Libraries</span></a></div>
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>ndk/guides/libs.html">
+      <span class="en">Libraries</span></a></div>
       <ul>
-      <li><a href="#">Stable APIs</a></li>
-      <li><a href="#">C++ Support</a></li>
-      <li><a href="#">Prebuilt Libraries</a></li>
-      </ul>
-   </li>
+      <li><a href="<?cs var:toroot ?>ndk/guides/prebuilts.html">Prebuilt Libraries</a></li>
+      <li><a href="<?cs var:toroot ?>ndk/guides/cpp-support.html">C++ Support</a></li>
+      <li><a href="<?cs var:toroot ?>ndk/guides/stable_apis.html">Stable APIs</a></li>
 
-   <li class="nav-section">
-      <div class="nav-section-header"><a href="/ndk/guides/sample.html"><span class="en">
-      Sample Walkthrough</span></a></div>
-      <ul>
-      <li><a href="#">hello-jni</a></li>
-      <li><a href="#">native-activity</a></li>
-      <li><a href="#">Teapot</a></li>
       </ul>
    </li>
 
diff --git a/docs/html-ndk/ndk/guides/index.jd b/docs/html-ndk/ndk/guides/index.jd
index 3fbfb47..febeaab 100644
--- a/docs/html-ndk/ndk/guides/index.jd
+++ b/docs/html-ndk/ndk/guides/index.jd
@@ -1,17 +1,25 @@
-page.title=Getting Started
+page.title=Getting Started with the NDK
 @jd:body
 
-<p>This section provides the information you need to get up and running
-with the NDK.</p>
+<p>The Native Development Kit (NDK) is a set of tools that allow you to leverage C and
+C++ code in your Android apps. You can use it either to build from your own source code, or to take
+advantage of existing prebuilt libraries.</p>
+
+<p>The NDK is not appropriate for most novice Android programmers, and has little value for many
+types of Android apps. It is often not worth the additional complexity it inevitably brings to the
+development process. However, it can be useful in cases in which you need to:</p>
+
 <ul>
-   <li><a href="setup.html">Setup</a></li>
-   <ul>
-      <li>Learn how to set up the NDK, and verify that it's integrated into
-      your toolchain.</li>
-   </ul>
-   <li><a href="concepts.html">Concepts</a></li>
-   <ul>
-      <li>Learn some basics about how the NDK works and its components, and about how to use it.
-      </li>
-   </ul>
+   <li>Squeeze extra performance out of a device for computationally intensive applications like
+   games or physics simulations.</li>
+   <li>Reuse your own or other developers' C or C++ libraries.</li>
 </ul>
+
+<p>This guide gives you the information you need to get up and running with the NDK. It starts by
+explaining the <a href="{@docRoot}ndk/guides/concepts.html">concepts</a> underpinning the NDK, and
+how to <a href="{@docRoot}ndk/guides/setup.html">set it up</a>. Next, it explains how to use
+the NDK to <a href="{@docRoot}ndk/guides/build.html">build</a> and
+<a href="{@docRoot}ndk/guides/debug.html">debug</a> your app. Then, it continues with information
+about targeting <a href="{@docRoot}ndk/guides/arch.html">different hardware platforms</a> in your
+builds. Finally, it discusses how to use your own and other prebuilt
+<a href="{@docRoot}ndk/guides/libs.html">libraries</a>.</p>
diff --git a/docs/html-ndk/ndk/guides/libs.jd b/docs/html-ndk/ndk/guides/libs.jd
index 1d4d2ac..ea607de 100644
--- a/docs/html-ndk/ndk/guides/libs.jd
+++ b/docs/html-ndk/ndk/guides/libs.jd
@@ -1,20 +1,13 @@
-page.title=Libraries
+page.title=Using Existing Libraries
 @jd:body
 
-<div class="contents">
-<div class="textblock"><p>This section discusses libraries included with the NDK, as well as how to use other people's libraries and modules in your own application. It discusses:</p>
-<ul>
-<li><a href="./md_3__key__topics__libraries__s_t_a_b_l_e-_a_p_i_s.html">Stable APIs</a><ul>
-<li>This section discusses the stable APIs exposed by the NDK.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__libraries__p_r_e_b_u_i_l_t_s.html">Prebuilt Libraries</a><ul>
-<li>How to include and use prebuilt libraries in your own application.</li>
-</ul>
-</li>
-<li><a href="./md_3__key__topics__libraries__c_p_l_u_s_p_l_u_s-_s_u_p_p_o_r_t.html">C++ Support</a><br/>
-<ul>
-<li>Information about the NDK's C++ runtime support library and corresponding header files. </li>
-</ul>
-</li>
-</ul>
\ No newline at end of file
+<p>This section discusses the use of existing libraries&ndash;both your own, and those that the NDK
+provides.</p>
+
+<p>It begins by telling you how to use your own <a href="{@docRoot}ndk/guides/prebuilts.html">
+prebuilt libraries</a>. Then, it explains the <a href="{@docRoot}ndk/guides/cpp-support.html">
+C++ helper runtimes</a> available with the NDK, and how to use them. Finally, it provides
+information on <a href="{@docRoot}ndk/guides/stable_apis.html">the other libraries</a> that the NDK provides, such
+as <a href="https://www.khronos.org/opengles/">OpenGL ES</a> and
+<a href="https://www.khronos.org/opensles/">OpenSL ES</a>, and the minimum Android API levels
+required to support those libraries.</p>
\ No newline at end of file
diff --git a/docs/html-ndk/ndk/guides/mips.jd b/docs/html-ndk/ndk/guides/mips.jd
index 1aa1868..2b4eea4 100644
--- a/docs/html-ndk/ndk/guides/mips.jd
+++ b/docs/html-ndk/ndk/guides/mips.jd
@@ -29,7 +29,7 @@
 
 <p>The build system places generated libraries into {@code $PROJECT/libs/mips/}, where
 {@code $PROJECT} represents your project's root directory, and embeds them in your APK under
-{@code /lib/mips/}.</p>
+the {@code /lib/mips/} directory.</p>
 
 <p>The Android package manager extracts these libraries when installing your APK on a compatible
 MIPS-based device, placing them under your app's private data directory.</p>
diff --git a/docs/html-ndk/ndk/guides/ndk-build.jd b/docs/html-ndk/ndk/guides/ndk-build.jd
index d52d224..9e3edda 100644
--- a/docs/html-ndk/ndk/guides/ndk-build.jd
+++ b/docs/html-ndk/ndk/guides/ndk-build.jd
@@ -9,7 +9,7 @@
         <li><a href="#int">Internals</a></li>
          <li><a href="#ifc">Invoking from the Command Line</a></li>
          <li><a href="#ife">Invoking from Eclipse</a></li>
-         <li><a href="#6432">64-bit and 32-bit toolchains</a></li>
+         <li><a href="#6432">64-Bit and 32-Bit Toolchains</a></li>
          <li><a href="#req">Requirements</a></li>
           </ol>
         </li>
@@ -17,12 +17,12 @@
     </div>
   </div>
 
-<p>ndk-build is a tiny shell script introduced in Android NDK r4. Its purpose
-is simply to invoke the right NDK build script.
+<p>The {@code ndk-build} file is a shell script introduced in Android NDK r4. Its purpose
+is to invoke the right NDK build script.
 
 <h2 id="int">Internals</h2>
 
-ndk-build is equivalent to: </p>
+<p>Running the {@code ndk-build} script is equivalent to running the following command:</p>
 
 <pre class="no-pretty-print">
 $GNUMAKE -f &lt;ndk&gt;/build/core/build-local.mk
@@ -35,8 +35,8 @@
 make files.</p>
 
 <h2 id="ifc">Invoking from the Command Line</h2>
-<p>ndk-build lives in the top level the NDK installation directory. To run it from the
-command line, invoke it while in or under your application project directory.
+<p>The {@code ndk-build} file lives in the top level the NDK installation directory. To run it
+from the command line, invoke it while in or under your application project directory.
 For example: </p>
 
 <pre class="no-pretty-print">
@@ -132,7 +132,7 @@
 Optimized*3 </td></tr>
 </table>
 *1: Useful for profiling.<br>
-*2: Default for running <a href="{@docRoot}ndk/guides/"ndk-gdb.html">ndk-gdb</a>.<br>
+*2: Default for running <a href="{@docRoot}ndk/guides/ndk-gdb.html">{@code ndk-gdb}</a>.<br>
 *3: Default mode.<br>
 <br>
 <p class="note"><strong>Note:</strong> {@code NDK_DEBUG=0} is the equivalent of
@@ -159,7 +159,7 @@
 pick the native debug files generated with {@code NDK_DEBUG=1}.
 
 
-<h2 id="6432">64-bit and 32-bit toolchains</h2>
+<h2 id="6432">64-Bit and 32-Bit Toolchains</h2>
 <p>Some toolchains come with both 64-bit and 32-bit versions. For example,
 directories {@code &lt;ndk&gt;/toolchain/&lt;name&gt;/prebuilt/} and
 {@code &lt;ndk&gt;/prebuilt/} may contain both {@code linux-x86} and
diff --git a/docs/html-ndk/ndk/guides/ndk-gdb.jd b/docs/html-ndk/ndk/guides/ndk-gdb.jd
index 2370ba2..b15e67e 100644
--- a/docs/html-ndk/ndk/guides/ndk-gdb.jd
+++ b/docs/html-ndk/ndk/guides/ndk-gdb.jd
@@ -29,12 +29,12 @@
 <li>Build your app to run on Android 2.2 (Android API level 8) or higher.</li>
 <li>Debug on a device or emulator running Android 2.2 or higher. For debugging purposes, the target
 API level that you declare in your {@code AndroidManifest.xml} file does not matter.</li>
-<li>Develop your app in a Unix shell. On Windows, use <a href="https://www.cygwin.com/">Cygwin
+<li>Develop your app in a Unix shell. On Windows, use <a href="https://www.cygwin.com/">Cygwin</a>
 or the experimental {@code ndk-gdb-py} <a href="https://www.python.org/">Python</a>
 implementation.</li>
 <li>Use GNU Make 3.81 or higher.</li>
 <li>If you are building your app from
-<a href="http://developer.android.com/sdk/installing/installing-adt.html">Eclipse</a>, build it
+<a href="{@docRoot}sdk/installing/installing-adt.html">Eclipse</a>, build it
 using version 0.9.7 or higher of the ADT plug-in.</li>
 
 <h2 id="use">Usage</h2>
@@ -150,7 +150,7 @@
 
 <tr>
 <td>{@code --adb=&lt;file&gt;}</td>
-<td><p>This option specifies the <a href="http://developer.android.com/tools/help/adb.html">adb</a>
+<td><p>This option specifies the <a href="{@docRoot}tools/help/adb.html">adb</a>
 tool executable. It is only necessary if you have not set your path to include that executable.</p>
 </td>
 </tr>
diff --git a/docs/html-ndk/ndk/guides/ndk-stack.jd b/docs/html-ndk/ndk/guides/ndk-stack.jd
index 27c752a..46146cb 100644
--- a/docs/html-ndk/ndk/guides/ndk-stack.jd
+++ b/docs/html-ndk/ndk/guides/ndk-stack.jd
@@ -12,8 +12,10 @@
   </div>
 
 <p>The {@code ndk-stack} tool allows you to filter stack traces as they appear in the
-output of {@code adb logcat}, and replace any address inside a shared library with the corresponding
-{@code &lt;source-file&gt;:&lt;line-number&gt;} values.</p>
+output of <a href="{@docRoot}tools/help/logcat.html">{@code adb logcat}</a>. It also replaces any
+address inside a shared library with the corresponding
+{@code &lt;source-file&gt;:&lt;line-number&gt;} values from your source code, making issues easier
+to pinpoint.</p>
 
 <p>For example, it translates something like:</p>
 
@@ -36,7 +38,7 @@
 I/DEBUG   (   31):
 </pre>
 
-<p>Into the more readable output: </p>
+<p>into the more readable output: </p>
 
 <pre>
 ********** Crash dump: **********
diff --git a/docs/html-ndk/ndk/guides/prebuilts.jd b/docs/html-ndk/ndk/guides/prebuilts.jd
index f0530d1..f13e70e 100644
--- a/docs/html-ndk/ndk/guides/prebuilts.jd
+++ b/docs/html-ndk/ndk/guides/prebuilts.jd
@@ -42,7 +42,7 @@
     whether you are using a shared ({@code .so}) or static {@code .a}) library.</li>
 </ol>
 
-  <p>Here is a trivial example that assumes that the prebuilt library {@code libfoo.so} resides in
+  <p>Here is a trivial example that assumes the prebuilt library {@code libfoo.so} resides in
   the same directory as the <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a>
   file that describes it.</p>
 
@@ -142,4 +142,4 @@
 <p>If you have specified {@code armeabi} as the value of {@code TARGET_ARCH_ABI}, the build system
 uses the version of {@code libfoo.so} located in the {@code armeabi} directory. If you have
 specified {@code x86} as the value {@code TARGET_ARCH_ABI}, the build system uses the version in the
-{@code x86} directory.</p>
\ No newline at end of file
+{@code x86} directory.</p>
diff --git a/docs/html-ndk/ndk/guides/setup.html b/docs/html-ndk/ndk/guides/setup.html
deleted file mode 100644
index 0b44132..0000000
--- a/docs/html-ndk/ndk/guides/setup.html
+++ /dev/null
@@ -1,520 +0,0 @@
-<!DOCTYPE html>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<html>
-<head>
-
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="viewport" content="width=device-width" />
-
-<meta name="Description" content="This document explains how to: This document assumes that you are already familiar with Java-based Android development. For more information on that topic, see the Android developer site . To install and configure the NDK, follow these steps: Eclipse …">
-<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
-<title>Setup | Android Developers</title>
-
-<!-- STYLESHEETS -->
-<link rel="stylesheet"
-href="//fonts.googleapis.com/css?family=Roboto+Condensed">
-<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
-  title="roboto">
-<link href="/assets/css/default.css?v=5" rel="stylesheet" type="text/css">
-
-<!-- JAVASCRIPT -->
-<script src="//www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
-<script type="text/javascript">
-  var toRoot = "/";
-  var metaTags = [];
-  var devsite = false;
-</script>
-<script src="/assets/js/docs.js?v=3" type="text/javascript"></script>
-
-
-
-<script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-5831155-1', 'android.com');
-  ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'});  // New tracker);
-  ga('send', 'pageview');
-  ga('universal.send', 'pageview'); // Send page view for new tracker.
-</script>
-
-</head>
-
-<body class="gc-documentation develop  guide" itemscope itemtype="http://schema.org/Article">
-
-<a name="top"></a>
-
-<!-- dialog to prompt lang pref change when loaded from hardcoded URL
-<div id="langMessage" style="display:none">
-  <div>
-    <div class="lang en">
-      <p>You requested a page in English, would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang es">
-      <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang ja">
-      <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang ko">
-      <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang ru">
-      <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang zh-cn">
-      <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p>
-    </div>
-    <div class="lang zh-tw">
-      <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p>
-    </div>
-    <a href="#" class="button yes" onclick="return false;">
-      <span class="lang en">Yes</span>
-      <span class="lang es">Sí</span>
-      <span class="lang ja">Yes</span>
-      <span class="lang ko">Yes</span>
-      <span class="lang ru">Yes</span>
-      <span class="lang zh-cn">是的</span>
-      <span class="lang zh-tw">没有</span>
-    </a>
-    <a href="#" class="button" onclick="$('#langMessage').hide();return false;">
-      <span class="lang en">No</span>
-      <span class="lang es">No</span>
-      <span class="lang ja">No</span>
-      <span class="lang ko">No</span>
-      <span class="lang ru">No</span>
-      <span class="lang zh-cn">没有</span>
-      <span class="lang zh-tw">没有</span>
-    </a>
-  </div>
-</div> -->
-
-
-  <!-- Header -->
-  <div id="header-wrapper">
-    <div id="header">
-
-
-
-
-      <div class="wrap" id="header-wrap">
-        <div class="col-3 logo">
-          <a href="/index.html">
-            <img src="/assets/images/dac_logo.png"
-                srcset="/assets/images/dac_logo@2x.png 2x"
-                width="123" height="25" alt="Android Developers" />
-          </a>
-          <div class="btn-quicknav" id="btn-quicknav">
-            <a href="#" class="arrow-inactive">Quicknav</a>
-            <a href="#" class="arrow-active">Quicknav</a>
-          </div>
-        </div>
-
-        
-
-        
-
-      </div><!-- end header-wrap.wrap -->
-    </div><!-- end header -->
-
-
-    <!-- Secondary x-nav -->
-    <div id="nav-x">
-        <div class="wrap" style="position:relative;z-index:1">
-
-            <ul class="nav-x col-9 develop" style="width:100%">
-                <li class="guide"><a href="/ndk/guides/index.html">
-                    Guides</a></li>
-                <li class="reference"><a href="/ndk/reference/index.html">
-                    Reference</a></li>
-                <li class="samples"><a href="/ndk/samples/index.html">
-                    Samples</a></li>
-                <li class="downloads"><a href="/ndk/downloads/index.html">
-                    Downloads</a></li>
-                </li>
-            </ul>
-        </div>
-    </div>
-
-
-    <div id="searchResults" class="wrap" style="display:none;">
-      <h2 id="searchTitle">Results</h2>
-      <div id="leftSearchControl" class="search-control">Loading...</div>
-    </div>
-  </div> <!--end header-wrapper -->
-
-  <div id="sticky-header">
-    <div>
-      <a class="logo" href="#top"></a>
-      <a class="top" href="#top"></a>
-      <ul class="breadcrumb">
-        
-        <li class="current">Setup</li>
-      </ul>
-    </div>
-  </div>
-
-
-
-
-  <div class="wrap clearfix" id="body-content">
-    <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
-      <div id="devdoc-nav" class="scroll-pane">
-
-
-
-<ul id="nav">
-<li><strong>NDK</strong>
-   <ul>
-   <li><a href="/ndk/guides/index.html"><span class="en">Getting Started</span></a>
-      <ul>
-      <li><a href="setup.html">Setup</a></li>
-      <li><a href="concepts.html">Concepts</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/build.html"><span class="en">Building</span></a>
-      <ul>
-      <li><a href="">ndk-build</a></li>
-      <li><a href="">Android.mk</a></li>
-      <li><a href="">Application.mk</a></li>
-      <li><a href="">Standalone Toolchain</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/debug.html"><span class="en">Debugging</span></a>
-      <ul>
-      <li><a href="">ndk-gdb</a></li>
-      <li><a href="">ndk-stack</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/arch.html"><span class="en">Architectures and CPUs</span></a>
-      <ul>
-      <li><a href="">ABI Management</a></li>
-      <li><a href="">Neon</a></li>
-      <li><a href="">Mips</a></li>
-      <li><a href="">x86</a></li>
-      <li><a href="">x86-64</a></li>
-      <li><a href="">CPU Features</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/libs.html"><span class="en">Libraries</span></a>
-      <ul>
-      <li><a href="">Stable APIs</a></li>
-      <li><a href="">C++ Support</a></li>
-      <li><a href="">Prebuilt Libraries</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/sample.html"><span class="en">Sample Walkthrough</span></a>
-      <ul>
-      <li><a href="">hello-jni</a></li>
-      <li><a href="">native-activity</a></li>
-      <li><a href="">Teapot</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/atomics.html"><span class="en">Atomics</span></a></li>
-   <li><a href="/ndk/guides/importing.html"><span class="en">Importing Modules</span></a></li>
-   <li><a href="/ndk/guides/depends.html"><span class="en">ndk-depends</span></a></li>
-   <li><a href="/ndk/guides/system.html"><span class="en">System Image Issues</span></a></li>
-   <li><a href="/ndk/guides/licenses.html"><span class="en">Licenses</span></a></li>
-   </ul></li>
-<li><strong>Radiance</strong>
-   <ul>
-   <li><a href="/ndk/guides/null.html"><span class="en">Stub 1</span></a>
-      <ul>
-      <li><a href="">Stublet</a></li>
-      <li><a href="">Stublet</a></li>
-      </ul></li>
-   <li><a href="/ndk/guides/null.html"><span class="en">Stub 2, etc.</span></a>
-      <ul>
-      <li><a href="">Another Stublet</a></li>
-      <li><a href="">Another Stublet</a></li>
-      </ul></li>
-   </ul></li>
-</ul>
-
-
-<script type="text/javascript">
-<!--
-    buildToggleLists();
-    changeNavLang(getLangPref());
-//-->
-</script>
-
-
-
-
-      </div>
-    </div> <!-- end side-nav -->
-    <script>
-      $(document).ready(function() {
-        scrollIntoView("devdoc-nav");
-        });
-    </script>
-
-
-
-
-<div class="col-12" id="doc-col" >
-
-
-  
-
-  
-    
-      
-        <h1 itemprop="name" >Setup</h1>
-      
-    
-  
-
-
-  
-  <div id="jd-content">
-
-
-    <div class="jd-descr" itemprop="articleBody">
-    <div id="qv-wrapper">
-    <div id="qv">
-      <h2>On this page</h2>
-
-      <ol>
-        <li><a href="#install">Installation</a></li>
-        <li><a href="#configure">Configuring Eclipse</a></li>
-        <li><a href="#verify">Verification</a></li>
-          </ol>
-        </li>
-      </ol>
-    </div>
-  </div>
-
-
-<div class="contents">
-<div class="textblock"><p>This document explains how to:</p>
-<ul>
-<li><a href="#install">Get</a> and install the NDK.</li>
-<li><a href="#configure">Configure</a> your system and the Eclipse and the Android Development Tool
-(ADT) for use with it.</li>
-<li><a href="#verify">Verify</a>, using a simple sample, that everything is working as expected.
-</li>
-</ul>
-<p>This document assumes that you are already familiar with Java-based Android development. For more
-information on that topic, see the
-<a href="/">Android developer site</a>.</p>
-
-<h2 id="install">Installation</h2>
-<p>To install and configure the NDK, follow these steps:</p>
-<ol type="1">
-<li>Get and install the <a href="/sdk/index.html">Android SDK</a>.if you
-have not already done so.</li>
-<li><a href="/tools/sdk/ndk/index.html">Download</a> and unzip the NDK,
-making sure to download the correct version for your development platform. You may place the
-unzipped directory anywhere on your local drive.</li>
-<li>Update your <code>PATH</code> environment variable with the location of the directory that
-contains the NDK.</li>
-</ol>
-
-
-<h2 id="configure">Configuring Eclipse</h2>
-<p>Eclipse must know where the NDK is in order to use it when building your app. Follow these steps
-to set the location of the NDK.</p>
-<ol type="1">
-<li>Launch Eclipse, which is installed as part of the Android SDK.</li>
-<li>Open <b>Window</b> &gt; <b>Preferences</b>.</li>
-<li>In the pane on the left side of the <i>Preferences</i> window, select <i>Android</i>.
-The <i>Android</i> section expands, revealing a number of subsections.</li>
-<li>Select <b>NDK</b>. In the pane on the right side of the <i>Preferences</i> window, browse to
-the directory that contains the NDK.</li>
-<li>Click <b>OK</b> to return to the <i>Package Explorer</i> display.</li>
-</ol>
-
-<h2 id="verify">Verification</h2>
-<h3>Eclipse</h3>
-<p>To confirm that you have installed the NDK, set it up correctly, and properly configured Eclipse,
-follow these steps:</p>
-<ol type="1">
-<li>Import the hello-jni sample from <code>&lt;ndk&gt;/samples/</code>, as you would any other Android
-project.</li>
-<li>In the <i>Project Explorer</i> pane, right-click the project name (<i>HelloJni</i>). A
-context menu appears.</li>
-<li>From the context menu, select <b>Android Tools</b> &gt; <b>Add Native Support</b>. The
-<i>Add Android Native Support</i> window appears.</li>
-<li>Accept the default library name (“hello-jni”), and click <b>Finish</b>.</li>
-<li>Build and execute the application.</li>
-</ol>
-<h3>Command line</h3>
-<p>Follow these steps to build from the command line:</p>
-<ol type="1">
-<li>Change to the root directory of your project.</li>
-<li>Execute ndk-build to build the native component of your app. do this by
-typing <code>ndk-build</code> at the command prompt.</li>
-<li>Build and install your project as you would a regular Android app written in Java. For more
-information, see
-<a href="/tools/building/index.html">Building and Running</a> and
-<a href="/tools/building/building-cmdline.html">Building and Running
-from the Command Line</a>.</li>
-</ol>
-
-<p>If you have successfully installed and configured the NDK, the screen on your target device looks
-as shown in Figure 1.</p>
-
-<img src="./images/verification_screen.png" srcset="./images/verification_screen@2x.png 2x" alt="Output: Hello from JNI!" id="figure2" />
-
-<p class="img-caption">
-<strong>Figure 1.</strong> Target-device screen after successful launch.
-</p>
-
-    </div>
-
-      <div class="content-footer layout-content-row"
-                    itemscope itemtype="http://schema.org/SiteNavigationElement">
-        
-        <div class="paging-links layout-content-col col-10">
-          
-        </div>
-        <div class="layout-content-col plus-container col-2" >
-          
-            <div class="g-plusone" data-size="medium"></div>
-          
-        </div>
-        
-      </div>
-
-  </div> <!-- end jd-content -->
-
-<div id="footer" class="wrap" >
-        
-
-  <div id="copyright">
-    
-  Except as noted, this content is
-  licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
-  Creative Commons Attribution 2.5</a>. For details and
-  restrictions, see the <a href="/license.html">Content
-  License</a>.
-  </div>
-
-
-  <div id="footerlinks">
-    
-  <p>
-    <a href="/about/index.html">About Android</a>&nbsp;&nbsp;|&nbsp;
-    <a href="/legal.html">Legal</a>&nbsp;&nbsp;|&nbsp;
-    <a href="/support.html">Support</a>
-  </p>
-  </div>
-
-</div> <!-- end footer -->
-</div><!-- end doc-content -->
-
-</div> <!-- end body-content --> 
-
-
-
-
-
-  <script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
-  <script src="/jd_lists_unified.js?v=8" type="text/javascript"></script>
-  <script src="/jd_extras.js?v=10" type="text/javascript"></script>
-  <script src="/jd_collections.js?v=10" type="text/javascript"></script>
-  <script src="/jd_tag_helpers.js?v=5" type="text/javascript"></script>
-
-</body>
-</html>
-
-
-
diff --git a/docs/html-ndk/ndk/guides/setup.jd b/docs/html-ndk/ndk/guides/setup.jd
new file mode 100644
index 0000000..81a33c0
--- /dev/null
+++ b/docs/html-ndk/ndk/guides/setup.jd
@@ -0,0 +1,94 @@
+page.title=Setup
+@jd:body
+
+
+<div id="qv-wrapper">
+    <div id="qv">
+      <h2>On this page</h2>
+
+      <ol>
+        <li><a href="#install">Installation</a></li>
+        <li><a href="#configure">Configuring Eclipse</a></li>
+        <li><a href="#verify">Verification</a></li>
+          </ol>
+        </li>
+      </ol>
+    </div>
+  </div>
+
+
+<div class="contents">
+<div class="textblock"><p>This document explains how to:</p>
+<ul>
+<li><a href="#install">Get</a> and install the NDK.</li>
+<li><a href="#configure">Configure</a> your system and the Eclipse and the Android Development Tool
+(ADT) for use with it.</li>
+<li><a href="#verify">Verify</a>, using a simple sample, that everything is working as expected.
+</li>
+</ul>
+<p>This document assumes that you are already familiar with Java-based Android development. For more
+information on that topic, see the
+<a href="{@docRoot}">Android developer site</a>.</p>
+
+<h2 id="install">Installation</h2>
+<p>To install and configure the NDK, follow these steps:</p>
+<ol type="1">
+<li>Get and install the <a href="{@docRoot}sdk/index.html">Android SDK</a>.</li>
+<li><a href="{@docRoot}ndk/downloads/index.html">Download</a> and
+<a href="{@docRoot}ndk/downloads/index.html#extract">extract</a> the NDK,
+making sure to download the correct version for your development platform. You may place the
+unzipped directory anywhere on your local drive.</li>
+<li>Update your {@code PATH} environment variable with the location of the directory that
+contains the NDK.</li>
+</ol>
+
+
+<h2 id="configure">Configuring Eclipse</h2>
+<p>Eclipse must know where the NDK is in order to use it when building your app. Follow these steps
+to set the location of the NDK.</p>
+<ol type="1">
+<li>Launch Eclipse, which is installed as part of the Android SDK.</li>
+<li>Open <b>Window</b> &gt; <b>Preferences</b>.</li>
+<li>In the pane on the left side of the <i>Preferences</i> window, select <i>Android</i>.
+The <i>Android</i> section expands, revealing a number of subsections.</li>
+<li>Select <b>NDK</b>. In the pane on the right side of the <i>Preferences</i> window, browse to
+the directory that contains the NDK.</li>
+<li>Click <b>OK</b> to return to the <i>Package Explorer</i> display.</li>
+</ol>
+
+<h2 id="verify">Verification</h2>
+<h3>Eclipse</h3>
+<p>To confirm that you have installed the NDK, set it up correctly, and properly configured Eclipse,
+follow these steps:</p>
+<ol type="1">
+<li>Import the hello-jni sample from {@code &lt;ndk&gt;/samples/}, as you would any other Android
+project.</li>
+<li>In the <i>Project Explorer</i> pane, right-click the project name (<i>HelloJni</i>). A
+context menu appears.</li>
+<li>From the context menu, select <b>Android Tools</b> &gt; <b>Add Native Support</b>. The
+<i>Add Android Native Support</i> window appears.</li>
+<li>Accept the default library name (“hello-jni”), and click <b>Finish</b>.</li>
+<li>Build and execute the application.</li>
+</ol>
+<h3>Command line</h3>
+<p>Follow these steps to build from the command line:</p>
+<ol type="1">
+<li>Change to the root directory of your project.</li>
+<li>Execute ndk-build to build the native component of your app. do this by
+typing {@code ndk-build} at the command prompt.</li>
+<li>Build and install your project as you would a regular Android app written in Java. For more
+information, see
+<a href="{@docRoot}tools/building/index.html">Building and Running</a> and
+<a href="{@docRoot}tools/building/building-cmdline.html">Building and Running
+from the Command Line</a>.</li>
+</ol>
+
+<p>If you have successfully installed and configured the NDK, the screen on your target device looks
+as shown in Figure 1.</p>
+
+<img src="./images/verification_screen.png" srcset="./images/verification_screen@2x.png 2x"
+alt="Output: Hello from JNI!" id="figure1" />
+
+<p class="img-caption">
+<strong>Figure 1.</strong> Target-device screen after successful launch.
+</p>
diff --git a/docs/html-ndk/ndk/guides/stable_apis.jd b/docs/html-ndk/ndk/guides/stable_apis.jd
index a3fedcc..cad02ac 100644
--- a/docs/html-ndk/ndk/guides/stable_apis.jd
+++ b/docs/html-ndk/ndk/guides/stable_apis.jd
@@ -58,7 +58,7 @@
 have a specific new group of headers and libraries for an Android API level, it means that
 an app targeting that level should use the most recently released NDK assets. For example,
 there was no new release of NDK headers or libraries for Android API levels 6 and 7. Therefore,
-when developing an app targeting Android API level 7, you would use the headers and libraries
+when developing an app targeting Android API level 7, you should use the headers and libraries
 located under {@code android-5/}.</p>
 
 <p>Table 1 shows the correspondence between NDK-supported API levels and Android releases.</p>
diff --git a/docs/html-ndk/ndk/guides/standalone_toolchain.jd b/docs/html-ndk/ndk/guides/standalone_toolchain.jd
index f3777f3..62d22b5 100644
--- a/docs/html-ndk/ndk/guides/standalone_toolchain.jd
+++ b/docs/html-ndk/ndk/guides/standalone_toolchain.jd
@@ -29,7 +29,7 @@
 unnecessary for most use cases. In most cases, we recommend that you forego using a standalone
 toolchain, and instead stick to the NDK build system.</p>
 
-<h2 id="syt">Selecting your Toolchain</h2>
+<h2 id="syt">Selecting Your Toolchain</h2>
 <p>Before anything else, you need to decide which processing architecture your standalone toolchain
 is going to target. Each architecture corresponds to a different toolchain name, as Table 1
 shows.</p>
@@ -69,7 +69,7 @@
 
 
 
-<h2 id="sys">Selecting your Sysroot</h2>
+<h2 id="sys">Selecting Your Sysroot</h2>
 <p>The next thing you need to do is define your <i>sysroot</i> (A sysroot is a directory containing
 the system headers and libraries for your target). To define the sysroot, you must must know the
 Android API level you want to target for native support; available native APIs vary by Android API
@@ -86,7 +86,7 @@
 </pre>
 
 For more detail about the Android API levels and the respective native APIs they support, see
-<a href={docRoot}ndk/guides/stable_apis.html>Stable APIs</a>.
+<a href={@docRoot}ndk/guides/stable_apis.html>Android NDK Native APIs</a>.
 
 <h2 id="itc">Invoking the Compiler</h2>
 
@@ -307,7 +307,7 @@
 </table>
 
 For more information on specifying a 32- or 64-bit instruction host toolchain, see
-<a href="{@docRoot}/ndk/guides/ndk-build.html#6432">ndk-build</a>.
+<a href="{@docRoot}ndk/guides/ndk-build.html#6432">ndk-build</a>.
 
 <p>You may specify {@code stl=stlport} to copy {@code libstlport} instead of the default
 {@code libgnustl}. If you do so, and you wish to link against the shared library, you must
@@ -334,7 +334,7 @@
 
 <p>For more options and details, use {@code --help}.</p>
 
-<h2>Working with Clang</h2>
+<h2 id="wwc">Working with Clang</h2>
 <p>You can install Clang binaries in the standalone installation by using the
 {@code --llvm-version=&lt;version&gt;} option. {@code &lt;version&gt;} is a LLVM/Clang version
 number, such as {@code 3.4} or {@code 3.5}. For example:
@@ -413,9 +413,9 @@
 section.</p>
 
 
-<h2>ABI Compatibility</h2>
+<h2 id="abi">ABI Compatibility</h2>
 <p>The machine code that the ARM toolchain generates should be compatible with the official Android
-<a href="{docRoot}/ndk/guides/cpu-arch-abis.html">armeabi ABI</a> by default.</p>
+{@code armeabi} <a href="{@docRoot}ndk/guides/abis.html">ABI</a> by default.</p>
 
 <p>We recommend use of the {@code -mthumb} compiler flag to force the generation of 16-bit Thumb-1
 instructions (the default being 32-bit ARM instructions).</p>
@@ -467,9 +467,9 @@
 
 <p>You don't have to use any specific compiler flag when targeting the MIPS ABI.</p>
 
-<p>To learn more about ABI support, see <a href="{@docRoot}/ndk/guides/x86.html">x86</a>.</p>
+<p>To learn more about ABI support, see <a href="{@docRoot}ndk/guides/x86.html">x86</a>.</p>
 
-<h2>Warnings and Limitations</h2>
+<h2 id="war">Warnings and Limitations</h2>
 <h3>Windows support</h3>
 <p>The Windows binaries do not depend on Cygwin. This lack of dependency makes them faster. The
 cost, however, is that they do not understand Cygwin path specifications like
diff --git a/docs/html-ndk/ndk/guides/x86-64.jd b/docs/html-ndk/ndk/guides/x86-64.jd
index 22f3aaa..c2f0d28 100644
--- a/docs/html-ndk/ndk/guides/x86-64.jd
+++ b/docs/html-ndk/ndk/guides/x86-64.jd
@@ -41,7 +41,7 @@
 
 <h2 id="st">Standalone Toolchain</h2>
 
-<p>It is possible to use the 64-bit x86 toolchain in standalone mode with the NDK. For more
+<p>You can use the 64-bit x86 toolchain in standalone mode with the NDK. For more
 information about doing so, see <a href="{@docRoot}ndk/guides/standalone_toolchain.html">
 Standalone Toolchain</a>, under the "Advanced method" section.
 
@@ -49,4 +49,4 @@
 <p>The NDK provides native versions of Android APIs for 64-bit x86 machine code starting from
 Android 5.0 (Android API level 21). If your project files target an older API level, but include
 {@code x86_64} as a targeted platform, the NDK build script automatically selects the right set of
-native platform headers and libraries for you.</p>
\ No newline at end of file
+native platform headers and libraries for you.</p>
diff --git a/docs/html-ndk/ndk/guides/x86.jd b/docs/html-ndk/ndk/guides/x86.jd
index e112a56..3a01b05 100644
--- a/docs/html-ndk/ndk/guides/x86.jd
+++ b/docs/html-ndk/ndk/guides/x86.jd
@@ -28,7 +28,7 @@
 </pre
 
 <p>For more information about defining the {@code APP_ABI} variable, see
-<a href="{docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a>.</p>
+<a href="{@docRoot}ndk/guides/application_mk.html">{@code Application.mk}</a>.</p>
 
 <p>The build system places generated libraries into {@code $PROJECT/libs/x86/}, where
 {@code $PROJECT} represents your project's root directory, and embeds them in your APK under
diff --git a/docs/html-ndk/ndk/index.jd b/docs/html-ndk/ndk/index.jd
index 8d8f14d..30d68d3 100644
--- a/docs/html-ndk/ndk/index.jd
+++ b/docs/html-ndk/ndk/index.jd
@@ -13,7 +13,7 @@
       <div class="col-7of16 cdol-push-1of16">
         <h1 class="dac-hero-title">Android NDK</h1>
         <p class="dac-hero-description">
-        The Android NDK is a toolset that lets you implement parts of your app using native code languages such as C and C++. For certain types of apps, this can help you reuse existing code libraries written in those languages.
+        The Android NDK is a toolset that lets you implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can help you reuse existing code libraries written in those languages.
         </p>
 
         <a class="dac-hero-cta" href="/ndk/guides/index.html">
diff --git a/docs/html-ndk/ndk/reference/index.jd b/docs/html-ndk/ndk/reference/index.jd
index a496f19..a89c152 100644
--- a/docs/html-ndk/ndk/reference/index.jd
+++ b/docs/html-ndk/ndk/reference/index.jd
@@ -1,4 +1,12 @@
-page.title=Reference
+page.title=API Reference
 @jd:body
 
-<p>NDK reference docs
\ No newline at end of file
+<p>The API reference for the NDK currently comprises documentation for the base set of
+native headers that the NDK provides for Android. These headers, and their associated libraries,
+provide functionalities such as:</p>
+
+<ul>
+   <li>Using hardware sensors.</li>
+   <li>Accessing storage.</li>
+   <li>Handling user input.</li>
+</ul>
\ No newline at end of file
diff --git a/docs/html-ndk/ndk/reference/reference_toc.cs b/docs/html-ndk/ndk/reference/reference_toc.cs
index 3e10562..404a0a6 100644
--- a/docs/html-ndk/ndk/reference/reference_toc.cs
+++ b/docs/html-ndk/ndk/reference/reference_toc.cs
@@ -8,40 +8,66 @@
 
 <ul id="nav">
   <li class="nav-section">
-    <div class="nav-section-header"><a href="group___asset.html"><span class="en">Asset</span></a></div>
+    <div class="nav-section-header"><a href="/ndk/reference/group___asset.html"><span class="en">Asset Manager</span></a></div>
     <ul>
-      <li><a href="asset__manager_8h.html">asset_manager.h</a></li>
-      <li><a href="asset__manager__jni_8h.html">asset_manager_jni.h</a></li>
+      <li><a href="/ndk/reference/asset__manager_8h.html">asset_manager.h</a></li>
+      <li><a href="/ndk/reference/asset__manager__jni_8h.html">asset_manager_jni.h</a></li>
     </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___bitmap.html"><span class="en">
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___bitmap.html"><span class="en">
     Bitmap</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/bitmap_8h.html">bitmap.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___configuration.html"><span class="en">
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___configuration.html"><span class="en">
     Configuration</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/configuration_8h.html">configuration.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___input.html"><span class="en">
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___input.html"><span class="en">
     Input</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/input_8h.html">input.h</a></li>
+      <li><a href="/ndk/reference/keycodes_8h.html">keycodes.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___looper.html"><span class="en">
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___looper.html"><span class="en">
     Looper</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/looper_8h.html">looper.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___native_activity.html"><span class="en">
-    Native Activity</span></a></div>
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___native_activity.html"><span class="en">
+    Native Activity and Window</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/native__activity_8h.html">native_activity.h</a></li>
+      <li><a href="/ndk/reference/native__window_8h.html">native_window.h</a></li>
+      <li><a href="/ndk/reference/native__window__jni_8h.html">native_window.h</a></li>
+      <li><a href="/ndk/reference/rect_8h.html">rect.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___sensor.html"><span class="en">
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___sensor.html"><span class="en">
     Sensor</span></a></div>
+    <ul>
+      <li><a href="/ndk/reference/sensor_8h.html">sensor.h</a></li>
+    </ul>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="group___storage.html"><span class="en">
-    Storage</span></a></div>
+    <div class="nav-section-header empty"><a href="/ndk/reference/group___storage.html"><span class="en">
+    Storage Manager</span></a></div>
   </li>
+    <ul>
+      <li><a href="/ndk/reference/storage__manager_8h.html">sensor_manager.h</a></li>
+      <li><a href="/ndk/reference/obb_8h.html">obb.h</a></li>
+    </ul>
 </ul>
 
 <script type="text/javascript">
diff --git a/docs/html-ndk/ndk/samples/downloads.jd b/docs/html-ndk/ndk/samples/downloads.jd
new file mode 100644
index 0000000..3e5e3b7
--- /dev/null
+++ b/docs/html-ndk/ndk/samples/downloads.jd
@@ -0,0 +1,24 @@
+page.title=Samples: Downloads
+@jd:body
+
+<style>
+
+.landing-button {
+  min-width: 155px;
+  text-align: center;
+}
+</style>
+
+<p>From this page, you can download samples that provide a look at the NDK in action. A few of the
+topics covered are:</p>
+
+<ul>
+   <li>Managing your native app's activity lifecycle.</li>
+   <li>Using native OpenGL on an Android device.</li>
+   <li>Implementing native audio.</li>
+   <li>Exporting modules.</li>
+</ul>
+
+<p class="landing-button landing-secondary"><a href="{@docRoot}ndk/samples/samples_download.zip">Download the NDK Samples</a>
+</p>
+
diff --git a/docs/html-ndk/ndk/samples/index.jd b/docs/html-ndk/ndk/samples/index.jd
index b333aa7..ce03f1c 100644
--- a/docs/html-ndk/ndk/samples/index.jd
+++ b/docs/html-ndk/ndk/samples/index.jd
@@ -1,4 +1,13 @@
 page.title=Samples
 @jd:body
 
-<p>NDK samples
\ No newline at end of file
+<p>Welcome to the NDK samples area. Here, you can
+<a href="{@docRoot}ndk/samples/downloads.html">download</a> a variety of sample apps to help
+deepen your understanding of how to use the NDK. There are also detailed
+<a href="{@docRoot}ndk/samples/walkthroughs.html">walkthroughs</a> of several
+of the apps, providing additional insight into key topics.</p>
+
+<p>These samples are also contained in the NDK installation package. They reside in
+{@code $NDK/samples/}, where {@code $NDK} is the NDK installation root.</p>
+
+
diff --git a/docs/html-ndk/ndk/guides/sample_hellojni.jd b/docs/html-ndk/ndk/samples/sample_hellojni.jd
similarity index 98%
rename from docs/html-ndk/ndk/guides/sample_hellojni.jd
rename to docs/html-ndk/ndk/samples/sample_hellojni.jd
index fa3fb5d..8d11989 100644
--- a/docs/html-ndk/ndk/guides/sample_hellojni.jd
+++ b/docs/html-ndk/ndk/samples/sample_hellojni.jd
@@ -16,7 +16,7 @@
     </div>
   </div>
 
-<p>This sample provides a bare-bones look at HelloJNI, a minimal
+<p>This sample guides you through HelloJNI, a minimal
 application built with the NDK. This sample is in the {@code samples/hello-jni/} directory
 under the root directory of your NDK installation.</p>
 
@@ -120,4 +120,4 @@
 <pre class="no-pretty-print">
 return (*env)-&gt;NewStringUTF(env, "Hello from JNI !
 Compiled with ABI " ABI ".");
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html-ndk/ndk/guides/sample_na.jd b/docs/html-ndk/ndk/samples/sample_na.jd
similarity index 99%
rename from docs/html-ndk/ndk/guides/sample_na.jd
rename to docs/html-ndk/ndk/samples/sample_na.jd
index 55362cd..a677de5 100644
--- a/docs/html-ndk/ndk/guides/sample_na.jd
+++ b/docs/html-ndk/ndk/samples/sample_na.jd
@@ -20,7 +20,7 @@
 {@code samples/native-activity}. It is a very simple example of a purely native
 application, with no Java source code. In the absence of any Java source, the
 Java compiler still creates an executable stub for the virtual machine to run.
-The stub serves as a wrapper for the actual, native program, which lives in the {@code .so}
+The stub serves as a wrapper for the actual, native program, which is located in the {@code .so}
 file.</p>
 
 <p>The app itself simply renders a color onto the entire screen, and
@@ -256,4 +256,4 @@
         engine_draw_frame(&amp;engine);
     }
 }
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html-ndk/ndk/guides/sample_teapot.jd b/docs/html-ndk/ndk/samples/sample_teapot.jd
similarity index 99%
rename from docs/html-ndk/ndk/guides/sample_teapot.jd
rename to docs/html-ndk/ndk/samples/sample_teapot.jd
index 9542a9d..6d19de6 100644
--- a/docs/html-ndk/ndk/guides/sample_teapot.jd
+++ b/docs/html-ndk/ndk/samples/sample_teapot.jd
@@ -77,7 +77,7 @@
 {@code samples/Teapot/src/com/sample/teapot}, under the NDK installation root directory. It handles
 activity lifecycle events, and also enables the app to display text on the screen. The following
 block of code is most important from the perspective of the native-side implementation: The native
-code calls it to display a popup window for text display.</p>
+code calls it to display a popup window for displaying text.</p>
 
 <pre class="no-pretty-print">
 
@@ -357,4 +357,4 @@
     state->userData = &g_engine;
     state->onAppCmd = Engine::HandleCmd;
     state->onInputEvent = Engine::HandleInput;
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html-ndk/ndk/samples/samples_download.zip b/docs/html-ndk/ndk/samples/samples_download.zip
new file mode 100644
index 0000000..35265be
--- /dev/null
+++ b/docs/html-ndk/ndk/samples/samples_download.zip
Binary files differ
diff --git a/docs/html-ndk/ndk/samples/samples_toc.cs b/docs/html-ndk/ndk/samples/samples_toc.cs
index 9a39f04..e0dcf04 100644
--- a/docs/html-ndk/ndk/samples/samples_toc.cs
+++ b/docs/html-ndk/ndk/samples/samples_toc.cs
@@ -6,13 +6,23 @@
        localized titles are added in the language order specified below.
 ?>
 
-
 <ul id="nav">
+   <li class="nav-section">
+      <div class="nav-section-header empty"><a href="<?cs var:toroot ?>ndk/samples/downloads.html">
+      <span class="en">Downloads</span></a></div>
+   </li>
 
-  <li class="nav-section">
-    <div class="nav-section-header empty"><a href="/ndk/samples/index.html"><span class="en">
-      Samples</span></a></div>
-  </li>
+   <li class="nav-section">
+      <div class="nav-section-header">
+      <a href="<?cs var:toroot ?>ndk/samples/walkthroughs.html"><span class="en">
+      Walkthroughs</span></a></div>
+      <ul>
+      <li><a href="<?cs var:toroot ?>ndk/samples/sample_hellojni.html">hello-jni</a></li>
+      <li><a href="<?cs var:toroot ?>ndk/samples/sample_na.html">sample-na</a></li>
+      <li><a href="<?cs var:toroot ?>ndk/samples/sample_teapot.html">Teapot</a></li>
+      </ul>
+   </li>
+
 </ul>
 
 
diff --git a/docs/html-ndk/ndk/samples/walkthroughs.jd b/docs/html-ndk/ndk/samples/walkthroughs.jd
new file mode 100644
index 0000000..b214e66
--- /dev/null
+++ b/docs/html-ndk/ndk/samples/walkthroughs.jd
@@ -0,0 +1,10 @@
+page.title=Samples: Walkthroughs
+@jd:body
+
+<p>This section provides detailed walkthroughs of several key samples. The samples are as
+follows:</p>
+
+<li><a href="{@docRoot}ndk/samples/sample_hellojni.html">hello-jni</a>: A very basic app that illustrates core workings of the NDK.</li>
+<li><a href="{@docRoot}ndk/samples/sample_na.html">native-activity</a>: An app that shows the fundamentals of constructing a purely native app. It places particular emphasis on the
+{@code android_native_app_glue library}.</li>
+<li><a href="<a href="{@docRoot}ndk/samples/sample_teapot.html">Teapot</a>: A simple OpenGL demo, showcasing the <code>ndk_helper</code> class.</li>
\ No newline at end of file
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index 17db9e5..bbd2f71 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -97,7 +97,7 @@
 <section class="dac-section dac-gray"><div class="wrap">
   <h1 class="dac-section-title">Ubiquitous computing on Android</h1>
   <div class="dac-section-subtitle">
-    Opening up new stuff.
+    A great experience for your users across devices. 
   </div>
   <div class="resource-widget resource-flow-layout col-16"
        data-query="collection:develop/landing/ubicomp"
diff --git a/docs/html/distribute/engage/engage_toc.cs b/docs/html/distribute/engage/engage_toc.cs
index cf02465..91206d3 100644
--- a/docs/html/distribute/engage/engage_toc.cs
+++ b/docs/html/distribute/engage/engage_toc.cs
@@ -53,24 +53,6 @@
         <span class="en">Integrate GCM</span></a>
     </div>
   </li>
-  <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
-        var:toroot?>distribute/engage/app-updates.html">
-        <span class="en">Update Regularly</span></a>
-    </div>
-  </li>
-  <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
-        var:toroot?>distribute/engage/community.html">
-        <span class="en">Engage Your Community</span></a>
-    </div>
-  </li>
-  <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
-        var:toroot?>distribute/engage/video.html">
-        <span class="en">Delight with Videos</span></a>
-    </div>
-  </li>
 
 </ul>
 
diff --git a/docs/html/distribute/tools/open-distribution.jd b/docs/html/distribute/tools/open-distribution.jd
index e28102d..a929692 100644
--- a/docs/html/distribute/tools/open-distribution.jd
+++ b/docs/html/distribute/tools/open-distribution.jd
@@ -80,14 +80,6 @@
 </p>
 
 <p>
-  <strong>Note:</strong> The <strong>Install Now</strong> button, shown in
-  Figure 1, appears only if the user has configured their device to allow
-  installation from <a href=
-  "{@docRoot}distribute/open.html#unknown-sources">unknown sources</a> and
-  opened your email in the native Gmail app.
-</p>
-
-<p>
   Distributing apps through email is convenient if you’re sending them to a few
   trusted users, as it provides few protections from piracy and unauthorized
   distribution; that is, anyone you send your apps to can simply forward them
diff --git a/docs/html/google/index.jd b/docs/html/google/index.jd
index a4190c9..e3b2ae1 100644
--- a/docs/html/google/index.jd
+++ b/docs/html/google/index.jd
@@ -11,7 +11,7 @@
   <div class="wrap">
     <div class="cols dac-hero-content">
       <div class="col-1of2 col-push-1of2 dac-hero-figure">
-        <img class="dac-hero-image" src="/images/google/hero-play-services_2x.png" style="padding-bottom:2em">
+        <img class="dac-hero-image" src="/images/google/hero-play-services_2x.png" style="height:400px">
       </div>
       <div class="col-1of2 col-pull-1of2">
         <h1 class="dac-hero-title">Build better apps with Google</h1>
diff --git a/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png b/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
index 6bdf13c..5310c7b 100644
--- a/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
+++ b/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
Binary files differ
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index c1f37e9..46d81e5 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -349,9 +349,6 @@
       "distribute/engage/easy-signin.html",
       "distribute/analyze/build-better-apps.html",
       "distribute/engage/gcm.html",
-      "distribute/engage/app-updates.html",
-      "distribute/engage/community.html",
-      "distribute/engage/video.html"
     ]
   },
   "distribute/monetize": {
diff --git a/docs/html/preview/backup/index.jd b/docs/html/preview/backup/index.jd
index 5953e30..c7d85ae 100644
--- a/docs/html/preview/backup/index.jd
+++ b/docs/html/preview/backup/index.jd
@@ -27,8 +27,8 @@
 
 <p>
   Automatic backups are enabled for all apps installed on devices running the Android M Preview. No
-  additional app code is required. The system provides users with the ability opt out of automatic
-  data backups. You can also choose to limit what data from your app is backed up.
+  additional app code is required. The system provides users with the ability to opt out of
+  automatic data backups. You can also choose to limit what data from your app is backed up.
 </p>
 
 <p>
@@ -106,8 +106,8 @@
 &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         package="com.my.appexample"&gt;
-    &lt;uses-sdk android:minSdkVersion="9"/&gt;
-    &lt;uses-sdk android:targetSdkVersion="android-MNC"/&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
     &lt;app ...
 <strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
     &lt;/app&gt;
@@ -224,8 +224,8 @@
 &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         package="com.my.appexample"&gt;
-    &lt;uses-sdk android:minSdkVersion="9"/&gt;
-    &lt;uses-sdk android:targetSdkVersion="android-MNC"/&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
     &lt;app ...
 <strong>        android:allowBackup="false"&gt;</strong>
     &lt;/app&gt;
diff --git a/docs/html/preview/features/app-linking.jd b/docs/html/preview/features/app-linking.jd
index c516f35..a677b1c 100644
--- a/docs/html/preview/features/app-linking.jd
+++ b/docs/html/preview/features/app-linking.jd
@@ -1,4 +1,4 @@
-page.title=App Linking
+page.title=App Links
 
 @jd:body
 
@@ -22,7 +22,7 @@
 </p>
 
 <p>
-  The Android M Developer Preview introduces support for app linking, which improves upon existing
+  The Android M Developer Preview introduces support for App Links, which improves upon existing
   link handling by allowing app developers to associate an app with a web domain they own. When
   developers create this association, the platform can automatically determine the default app used
   to handle a particular web link and skip asking users.
@@ -79,10 +79,11 @@
 <h2 id="verfy-links">Request App Link Verification</h2>
 
 <p>
-  An app can indicate to the platform to verify app links against the {@code statements.json} files
-  hosted on the sites defined by the host names in the &lt;data&gt; elements of the intent filters.
-  To do this, add an {@code android:autoVerify} attribute to the appropriate intent filters in the
-  manifest, as shown in the following manifest code snippet:
+  An app can request that the platform automatically verify any app links defined by the host names
+  in the data elements of its intent filters against the {@code statements.json} files hosted on
+  the respective web domains. To request app link verification, add an {@code android:autoVerify}
+  attribute to each desired intent filter in the manifest, as shown in the following manifest code
+  snippet:
 </p>
 
 <pre>
@@ -98,11 +99,21 @@
 </pre>
 
 <p>
-  When an app is installed, the platform attempts to verify the app links. If the platform cannot
-  successfully verify app links, it falls back to prompting the user the next time they open a link
-  that the app handles, or they will need to explicitly enable the app in the App Info settings UI.
+  When the (@code android:autoVerify} attribute is present in an app manifest, the platform
+  attempts to verify app links when the app is installed. If the platform cannot successfully
+  verify the app links, the app is not set as the preferred app to handle the web links. The next
+  time a user opens one of the links, the platform falls back to presenting the user with a
+  dialog.
 </p>
 
+<p class="note">
+  <strong>Note:</strong> In testing, there is a potential for a false positive if verfication
+  fails, but the user has explicitly enabled the app to open supported links without asking, using
+  the system Settings app. In this case, no dialog is shown and the link goes directly to your
+  app, but only because of the user setting, and not because verification succeeded.
+</p>
+
+
 <h2 id="user-manage">Managing App Link Settings</h2>
 
 <p>
diff --git a/docs/html/preview/preview_toc.cs b/docs/html/preview/preview_toc.cs
index 76dfef5..0a141bb 100644
--- a/docs/html/preview/preview_toc.cs
+++ b/docs/html/preview/preview_toc.cs
@@ -31,7 +31,7 @@
         <li><a href="<?cs var:toroot ?>preview/features/runtime-permissions.html">
           Runtime Permissions</a></li>
         <li><a href="<?cs var:toroot ?>preview/features/app-linking.html">
-          App Linking</a></li>
+          App Links</a></li>
         <li><a href="<?cs var:toroot ?>preview/backup/index.html">
           Automatic Backups</a></li>
       </ul>
diff --git a/docs/html/preview/samples.jd b/docs/html/preview/samples.jd
index 29b9e2a..3974ee3 100644
--- a/docs/html/preview/samples.jd
+++ b/docs/html/preview/samples.jd
@@ -1,10 +1,10 @@
 page.title=Samples
-page.image=images/cards/card-samples_16-9_2x.png
+page.image=images/cards/samples-new_2x.png
 @jd:body
 
 <p>
-  The following code samples are provided for the M Developer Preview. You can download them in the
-  Android SDK Manager under the <b>SDK Samples</b> component for the M Developer Preview.
+  The following code samples are provided for the M Developer Preview. To download
+  the samples in Android Studio, select the <b>File > Import Samples</b> menu option.
 </p>
 
 <img src="{@docRoot}images/cards/card-google-cloud-messaging_16-9_2x" class="figure">
@@ -24,13 +24,13 @@
 
 <p><a href="https://github.com/googlesamples/android-RuntimePermissions">Get it on GitHub</a></p>
 
-<h3 id="ConfirmCredentials">Confirm Device Credentials</h3>
+<h3 id="ConfirmCredentials">Confirm Credential</h3>
 
 <p>
  This sample demonstrates how to use device credentials as an authentication method in your app.
 </p>
 
-<p><a href="https://github.com/googlesamples/android-ConfirmDeviceCredentials">Get it on
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">Get it on
 GitHub</a></p>
 
 <h3 id="FingerprintDialog">Fingerprint Dialog</h3>
@@ -42,23 +42,14 @@
 
 <p><a href="https://github.com/googlesamples/android-FingerprintDialog">Get it on GitHub</a></p>
 
-<h3 id="AutomaticBackup">Automatic Backup</h3>
+<h3 id="AutomaticBackup">Auto Backup for Apps</h3>
 
 <p>
  Android M introduces automatic backup for app settings. This sample demonstrates how to add
  filtering rules to an app in order to manage settings backup.
 </p>
 
-<p><a href="https://github.com/googlesamples/android-AutomaticBackup">Get it on GitHub</a></p>
-
-<h3 id="VoiceCamera">Voice Camera</h3>
-
-<p>
-  This sample demonstrates how to implement the "OK Google, take a selfie" voice command and confirm
-  the user intent with the <code>VoiceInteraction</code> API.
-</p>
-
-<p><a href="https://github.com/googlesamples/android-VoiceCamera">Get it on GitHub</a></p>
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">Get it on GitHub</a></p>
 
 <h3 id="CameraRaw">Camera 2 Raw</h3>
 
@@ -77,15 +68,4 @@
   can tell you how many notifications your app is currently showing.
 </p>
 
-<p><a href="https://github.com/googlesamples/android-ActiveNotification">Get it on GitHub</a></p>
-
-<h3 id="VoiceSynthesizer">Voice Synthesizer</h3>
-
-<p>
-  This sample demonstrates how to use the <code>NativeAudio</code> APIs to demonstrate low-latency
-  audio processing.
-</p>
-
-<p><a href="https://github.com/googlesamples/android-VoiceSynthesizer">Get it on GitHub</a></p>
-
-
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">Get it on GitHub</a></p>
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
index b31b104..f0def9b 100644
--- a/docs/html/preview/setup-sdk.jd
+++ b/docs/html/preview/setup-sdk.jd
@@ -72,8 +72,8 @@
 
 <ul>
   <li><code>compileSdkVersion</code> is set to <code>'android-MNC'</code></li>
-  <li><code>minSdkVersion</code> is set to <code>'android-MNC'</code></li>
-  <li><code>targetSdkVersion</code> is set to <code>'android-MNC'</code></li>
+  <li><code>minSdkVersion</code> is set to <code>'MNC'</code></li>
+  <li><code>targetSdkVersion</code> is set to <code>'MNC'</code></li>
 </ul>
 
 
diff --git a/docs/html/tools/data-binding/guide.jd b/docs/html/tools/data-binding/guide.jd
new file mode 100644
index 0000000..6a933d8
--- /dev/null
+++ b/docs/html/tools/data-binding/guide.jd
@@ -0,0 +1,1435 @@
+page.title=Data Binding Guide
+page.tags="databinding", "layouts"
+@jd:body
+
+<div class="wrap">
+<p class="caution" style="background-color:#fffdeb;">
+The <strong>Android Data Binding Library</strong> is available as a <strong>developer
+preview</strong>. Expression syntax and behaviors may change prior to the full release
+of the library, currently planned for Q3 2015. If you have feedback or want to report
+issues, please use the <a href="https://code.google.com/p/android-developer-preview/">issue
+tracker</a>. Stay tuned for more information about Data Binding and examples of how to use it. </a>
+</p>
+</div>
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>
+      In this document:
+    </h2>
+
+    <ol>
+      <li>
+        <a href="#build_environment">Build Environment</a>
+      </li>
+
+      <li>
+        <a href="#data_binding_layout_files">Data Binding Layout Files</a>
+        <ol>
+          <li>
+            <a href="writing_expressions">Writing your first data binding
+            expressions</a>
+          </li>
+
+          <li>
+            <a href="data_object">Data Object</a>
+          </li>
+
+          <li>
+            <a href="binding_data">Binding Data</a>
+          </li>
+        </ol>
+      </li>
+
+      <li>
+        <a href="#layout_details">Layout Details</a>
+        <ol>
+          <li>
+            <a href="imports">Imports</a>
+          </li>
+
+          <li>
+            <a href="variables">Variables</a>
+          </li>
+
+          <li>
+            <a href="custom_binding_class_names">Custom Binding Class Names</a>
+          </li>
+
+          <li>
+            <a href="includes">Includes</a>
+          </li>
+
+          <li>
+            <a href="expression_language">Expression Language</a>
+          </li>
+        </ol>
+      </li>
+
+      <li>
+        <a href="#data_objects">Data Objects</a>
+        <ol>
+          <li>
+            <a href="observable_objects">Observable Objects</a>
+          </li>
+
+          <li>
+            <a href="observablefields">ObservableFields</a>
+          </li>
+
+          <li>
+            <a href="observable_collections">Observable Collections</a>
+          </li>
+        </ol>
+      </li>
+
+      <li>
+        <a href="#generated_binding">Generated Binding</a>
+        <ol>
+          <li>
+            <a href="creating">Creating</a>
+          </li>
+
+          <li>
+            <a href="views_with_ids">Views With IDs</a>
+          </li>
+
+          <li>
+            <a href="variables">Variables</a>
+          </li>
+
+          <li>
+            <a href="viewstubs">ViewStubs</a>
+          </li>
+
+          <li>
+            <a href="advanced_binding">Advanced Binding</a>
+          </li>
+        </ol>
+      </li>
+
+      <li>
+        <a href="#attribute_setters">Attribute Setters</a>
+        <ol>
+          <li>
+            <a href="automatic_setters">Automatic Setters</a>
+          </li>
+
+          <li>
+            <a href="renamed_setters">Renamed Setters</a>
+          </li>
+
+          <li>
+            <a href="custom_setters">Custom Setters</a>
+          </li>
+        </ol>
+      </li>
+
+      <li>
+        <a href="#converters">Converters</a>
+        <ol>
+          <li>
+            <a href="object_conversions">Object Conversions</a>
+          </li>
+
+          <li>
+            <a href="custom_conversions">Custom Conversions</a>
+          </li>
+        </ol>
+      </li>
+    </ol>
+  </div><!-- qv -->
+</div><!-- qv-wrapper -->
+
+
+<p>
+  This document explains how to use the Data Binding Library to write
+  declarative layouts and minimize the glue code necessary to bind your
+  application logic and layouts.
+</p>
+
+<h2 id="build_environment">
+  Build Environment
+</h2>
+
+<p>
+  <strong>Setting Up Work Environment:</strong>
+</p>
+
+<p>
+  To set up your application to use data binding, add data binding to the class
+  path of your build gradle file, right below "android".
+</p>
+
+<pre>
+   dependencies {
+       classpath <strong>"com.android.tools.build:gradle:1.2.3"
+       </strong>classpath <strong>"com.android.databinding:dataBinder:</strong>1.0-rc0"
+   }
+}
+</pre>
+<p>
+  Then make sure jcenter is in the repositories list for your sub projects.
+</p>
+
+<pre>
+allprojects {
+   repositories {
+       jcenter()
+   }
+}
+</pre>
+<p>
+  In each module you want to use data binding, apply the plugin right after
+  android plugin
+</p>
+
+<pre>
+apply plugin: ‘com.android.application&apos;
+apply plugin: &apos;<strong>com.android.databinding</strong>&apos;
+</pre>
+<p>
+  The data binding plugin is going to add necessary <strong>provided</strong>
+  and <strong>compile configuration</strong> dependencies to your project.
+</p>
+
+<h2 id="data_binding_layout_files">
+  Data Binding Layout Files
+</h2>
+
+<h3 id="writing_expressions">
+  Writing your first data binding expressions
+</h3>
+
+<p>
+  Data-binding layout files are slightly different and start with a root tag of
+  <strong>layout</strong> followed by a <strong>data</strong> element and a
+  <strong>view</strong> root element. This view element is what your root would
+  be in a non-binding layout file. A sample file looks like this:
+</p>
+
+<pre>
+<em>&lt;?</em><strong>xml version="1.0" encoding="utf-8"</strong><em>?&gt;
+</em>&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"</strong>&gt;
+   &lt;<strong>data</strong>&gt;
+       &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+   &lt;/<strong>data</strong>&gt;
+   &lt;<strong>LinearLayout
+       android:orientation="vertical"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent"</strong>&gt;
+       &lt;<strong>TextView android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:text="&commat;{user.firstName}"</strong>/&gt;
+       &lt;<strong>TextView android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:text="&commat;{user.lastName}"</strong>/&gt;
+   &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+  The user <strong>variable</strong> within <strong>data</strong> describes a
+  property that may be used within this layout.
+</p>
+
+<pre>
+&lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+</pre>
+<p>
+  Expressions within the layout are written in the attribute properties using
+  the “<code>&commat;{}</code>” syntax. Here, the TextView’s text is set to the
+  firstName property of user:
+</p>
+
+<pre>
+&lt;<strong>TextView android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:text="&commat;{user.firstName}"</strong>/&gt;
+</pre>
+<h3 id="data_object">
+  Data Object
+</h3>
+
+<p>
+  Let’s assume for now that you have a plain-old Java object (POJO) for User:
+</p>
+
+<pre>
+<strong>public class </strong>User {
+   <strong>public final </strong>String <strong>firstName</strong>;
+   <strong>public final </strong>String <strong>lastName</strong>;
+   <strong>public </strong>User(String firstName, String lastName) {
+       <strong>this</strong>.<strong>firstName </strong>= firstName;
+       <strong>this</strong>.<strong>lastName </strong>= lastName;
+   }
+}
+</pre>
+<p>
+  This type of object has data that never changes. It is common in applications
+  to have data that is read once and never changes thereafter. It is also
+  possible to use a JavaBeans objects:
+</p>
+
+<pre>
+<strong>public class </strong>User {
+   <strong>private final </strong>String <strong>firstName</strong>;
+   <strong>private final </strong>String <strong>lastName</strong>;
+   <strong>public </strong>User(String firstName, String lastName) {
+       <strong>this</strong>.<strong>firstName </strong>= firstName;
+       <strong>this</strong>.<strong>lastName </strong>= lastName;
+   }
+   <strong>public </strong>String getFirstName() {
+       <strong>return this</strong>.<strong>firstName</strong>;
+   }
+   <strong>public </strong>String getLastName() {
+       <strong>return this</strong>.<strong>lastName</strong>;
+   }
+}
+</pre>
+<p>
+  From the perspective of data binding, these two classes are equivalent. The
+  expression <strong><code>&commat;{user.firstName}</code></strong> used for
+  the TextView’s <strong><code>android:text</code></strong> attribute will
+  access the <strong><code>firstName</code></strong> field in the former class
+  and the <code>getFirstName()</code> method in the latter class.
+</p>
+
+<h3 id="binding_data">
+  Binding Data
+</h3>
+
+<p>
+  By default, a Binding class will be generated based on the name of the layout
+  file, converting it to Pascal case and suffixing “Binding” to it. The above
+  layout file was <code>activity_main.xml</code> so the generate class was
+  <code>ActivityMainBinding</code>. This class holds all the bindings from the
+  layout properties (e.g. the <code>user</code> variable) to the layout’s Views
+  and knows how to assign values for the binding expressions.The easiest means
+  for creating the bindings is to do it while inflating:
+</p>
+
+<pre>
+&commat;Override
+<strong>protected void </strong>onCreate(Bundle savedInstanceState) {
+   <strong>super</strong>.onCreate(savedInstanceState);
+   ActivityMainBinding binding = DataBindingUtil.<em>setContentView</em>(<strong>this</strong>, R.layout.<em><strong>main_activity</strong></em>);
+   User user = <strong>new </strong>User(<strong>"Test"</strong>, <strong>"User"</strong>);
+   binding.setUser(user);
+}
+</pre>
+<p>
+  You’re done! Run the application and you’ll see Test User in the UI.
+  Alternatively, you can get the view via:
+</p>
+
+<pre>
+MainActivityBinding binding = MainActivityBinding.<em>inflate</em>(getLayoutInflater());
+</pre>
+<p>
+  If you are using data binding items inside a ListView or RecyclerView
+  adapter, you may prefer to use:
+</p>
+
+<pre>
+ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup,
+false);
+//or
+ListItemBinding binding = DataBindingUtil.<em>inflate</em>(layoutInflater, R.layout.<em><strong>list_item</strong></em>, viewGroup, <strong>false</strong>);
+</pre>
+<h2 id="layout_details">
+  Layout Details
+</h2>
+
+<h3 id="imports">
+  Imports
+</h3>
+
+<p>
+  Zero or more <strong><code>import</code></strong> elements may be used inside
+  the <strong><code>data</code></strong> element. These allow easy reference to
+  classes inside your layout file, just like in Java.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.view.View"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+  Now, View may be used within your binding expression:
+</p>
+
+<pre>
+&lt;<strong>TextView
+   android:text="&commat;{user.lastName}"
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"
+   android:visibility="&commat;{user.isAdult ? View.VISIBLE : View.GONE}"</strong>/&gt;
+</pre>
+<p>
+  When there are class name conflicts, one of the classes may be renamed to an
+  “alias:”
+</p>
+
+<pre>
+&lt;<strong>import type="android.view.View"</strong>/&gt;
+&lt;<strong>import type="com.example.real.estate.View"
+        alias="Vista"</strong>/&gt;
+</pre>
+<p>
+  Now, <strong><code>Vista</code></strong> may be used to reference the
+  <code>com.example.real.estate.View</code> and
+  <strong><code>View</code></strong> may be used to reference
+  <code>android.view.View</code> within the layout file. Imported types may be
+  used as type references in variables and expressions:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="com.example.User"</strong>/&gt;
+    &lt;<strong>import type="java.util.List"</strong>/&gt;
+    &lt;<strong>variable name="user" type="User"</strong>/&gt;
+    &lt;<strong>variable name="userList" type="List&amp;lt;User&gt;"</strong>/&gt;
+    &lt;/<strong>data</strong>&gt;
+</pre>
+<p class="note">
+  <strong>Note</strong>: Android Studio does not yet handle imports so the
+  autocomplete for imported variables may not work in your IDE. Your
+  application will still compile fine and you can work around the IDE issue by
+  using fully qualified names in your variable definitions.
+</p>
+
+<pre>
+&lt;<strong>TextView
+   android:text="&commat;{((User)(user.connection)).lastName}"
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+  Imported types may also be used when referencing static fields and methods in
+  expressions:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="com.example.MyStringUtils"</strong>/&gt;
+    &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+   android:text="&commat;{MyStringUtils.capitalize(user.lastName)}"
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+  Just as in Java, <code>java.lang.*</code> is imported automatically.
+</p>
+
+<h3 id="variables">
+  Variables
+</h3>
+
+<p>
+  Any number of <strong><code>variable</code></strong> elements may be used
+  inside the <strong><code>data</code></strong> element. Each
+  <strong><code>variable</code></strong> element describes a property that may
+  be set on the layout to be used in binding expressions within the layout
+  file.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.graphics.drawable.Drawable"</strong>/&gt;
+    &lt;<strong>variable name="user"  type="com.example.User"</strong>/&gt;
+    &lt;<strong>variable name="image" type="Drawable"</strong>/&gt;
+    &lt;<strong>variable name="note"  type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+  The variable types are inspected at compile time, so if a variable implements
+  <a href="#observable_objects">Observable</a> or is an <a href=
+  "#observable_collections">observable collection</a>, that should be reflected
+  in the type. If the variable is a base class or interface that does not
+  implement the Observable* interface, the variables will <strong>not
+  be</strong> observed!
+</p>
+
+<p>
+  When there are different layout files for various configurations (e.g.
+  landscape or portrait), the variables will be combined. There must not be
+  conflicting variable definitions between these layout files.
+</p>
+
+<p>
+  The generated binding class will have a setter and getter for each of the
+  described variables. The variables will take the default Java values until
+  the setter is called &mdash; <code>null</code> for reference types,
+  <code>0</code> for <code>int</code>, <code>false</code> for
+  <code>boolean</code>, etc.
+</p>
+
+<h3 id="custom_binding_class_names">
+  Custom Binding Class Names
+</h3>
+
+<p>
+  By default, a Binding class is generated based on the name of the layout
+  file, starting it with upper-case, removing underscores ( _ ) and
+  capitalizing the following letter and then suffixing “Binding”. This class
+  will be placed in a databinding package under the module package. For
+  example, the layout file <code>contact_item.xml</code> will generate
+  <code>ContactItemBinding</code>. If the module package is
+  <code>com.example.my.app</code>, then it will be placed in
+  <code>com.example.my.app.databinding</code>.
+</p>
+
+<p>
+  Binding classes may be renamed or placed in different packages by adjusting
+  the <strong><code>class</code></strong> attribute of the
+  <strong><code>data</code></strong> element. For example:
+</p>
+
+<pre>
+&lt;<strong>data class="ContactItem"</strong>&gt;
+    ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+  This generates the binding class as <code>ContactItem</code> in the
+  databinding package in the module package. If the class should be generated
+  in a different package within the module package, it may be prefixed with
+  “.”:
+</p>
+
+<pre>
+&lt;<strong>data class=".ContactItem"</strong>&gt;
+    ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+  In this case, <code>ContactItem</code> is generated in the module package
+  directly. Any package may be used if the full package is provided:
+</p>
+
+<pre>
+&lt;<strong>data class="com.example.ContactItem"</strong>&gt;
+    ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<h3 id="includes">
+  Includes
+</h3>
+
+<p>
+  Variables may be passed into an included layout&apos;s binding from the
+  containing layout by using the application namespace and the variable name in
+  an attribute:
+</p>
+
+<pre>
+<em>&lt;?</em><strong>xml version="1.0" encoding="utf-8"</strong><em>?&gt;
+</em>&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"
+</strong>       <strong> xmlns:bind="http://schemas.android.com/apk/res-auto"</strong>&gt;
+   &lt;<strong>data</strong>&gt;
+       &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+   &lt;/<strong>data</strong>&gt;
+   &lt;<strong>LinearLayout
+       android:orientation="vertical"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent"</strong>&gt;
+       &lt;<strong>include layout="&commat;layout/name"
+           bind:user="&commat;{user}"</strong>/&gt;
+       &lt;<strong>include layout="&commat;layout/contact"
+           bind:user="&commat;{user}"</strong>/&gt;
+   &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+  Here, there must be a <code>user</code> variable in both the
+  <code>name.xml</code> and <code>contact.xml</code> layout files.
+</p>
+
+<h3 id="expression_language">
+  Expression Language
+</h3>
+
+<h4 id="common_features">
+  Common Features
+</h4>
+
+<p>
+  The expression language looks a lot like a Java expression. These are the
+  same:
+</p>
+
+<ul>
+  <li>Mathematical <strong><code>+ - / * %</code></strong>
+  </li>
+
+  <li>String concatenation <strong><code>+</code></strong>
+  </li>
+
+  <li>
+    <code>L</code>ogical <strong><code>&& ||</code></strong>
+  </li>
+
+  <li>Binary <strong><code>&</code> <code>|</code> <code>^</code></strong>
+  </li>
+
+  <li>Unary <strong><code>+ - ! ~</code></strong>
+  </li>
+
+  <li>Shift <strong><code>&gt;&gt; &gt;&gt;&gt; &lt;&lt;</code></strong>
+  </li>
+
+  <li>Comparison <strong><code>== &gt; &lt; &gt;= &lt;=</code></strong>
+  </li>
+
+  <li>
+    <strong><code>instanceof</code></strong>
+  </li>
+
+  <li>Grouping <strong><code>()</code></strong>
+  </li>
+
+  <li>Literals - character, String, numeric, <strong><code>null</code></strong>
+  </li>
+
+  <li>Cast
+  </li>
+
+  <li>Method calls
+  </li>
+
+  <li>Field access
+  </li>
+
+  <li>Array access <strong><code>[]</code></strong>
+  </li>
+
+  <li>Ternary operator <strong><code>?:</code></strong>
+  </li>
+</ul>
+
+<p>
+  Examples:
+</p>
+
+<pre>
+<strong>android:text="&commat;{String.valueOf(index + 1)}"
+android:visibility="&commat;{age &amp;lt; 13 ? View.GONE : View.VISIBLE}"
+android:transitionName=&apos;&commat;{"image_" + id}&apos;</strong>
+</pre>
+<h4 id="missing_operations">
+  Missing Operations
+</h4>
+
+<p>
+  A few operations are missing from the expression syntax that you can use in
+  Java.
+</p>
+
+<ul>
+  <li>
+    <strong><code>this</code></strong>
+  </li>
+
+  <li>
+    <strong><code>super</code></strong>
+  </li>
+
+  <li>
+    <strong><code>new</code></strong>
+  </li>
+
+  <li>Explicit generic invocation
+  </li>
+</ul>
+
+<h4 id="null_coalescing_operator">
+  Null Coalescing Operator
+</h4>
+
+<p>
+  The null coalescing operator (<strong><code>??</code></strong>) chooses the
+  left operand if it is not null or the right if it is null.
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.displayName ?? user.lastName}"</strong>
+</pre>
+<p>
+  This is functionally equivalent to:
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.displayName != null ? user.displayName : user.lastName}"</strong>
+</pre>
+<h4 id="property_reference">
+  Property Reference
+</h4>
+
+<p>
+  The first was already discussed in the <a href=
+  "#writing_your_first_data_binding_expressions">Writing your first data
+  binding expressions</a> above: short form JavaBean references. When an
+  expression references a property on a class, it uses the same format for
+  fields, getters, and ObservableFields.
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.lastName}"</strong>
+</pre>
+<h4>
+  Avoiding NullPointerException
+</h4>
+
+<p>
+  Generated data binding code automatically checks for nulls and avoid null
+  pointer exceptions. For example, in the expression
+  <code>&commat;{user.name}</code>, if <code>user</code> is null,
+  <code>user.name</code> will be assigned its default value (null). If you were
+  referencing <code>user.age</code>, where age is an <code>int</code>, then it
+  would default to 0.
+</p>
+
+<h4 id="collections">
+  Collections
+</h4>
+
+<p>
+  Common collections: arrays, lists, sparse lists, and maps, may be accessed
+  using the <code>[]</code> operator for convenience.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.util.SparseArray"</strong>/&gt;
+    &lt;<strong>import type="java.util.Map"</strong>/&gt;
+    &lt;<strong>import type="java.util.List"</strong>/&gt;
+    &lt;<strong>variable name="list" type="List&lt;String&gt;"</strong>/&gt;
+    &lt;<strong>variable name="sparse" type="SparseArray&amp;lt;String&gt;"</strong>/&gt;
+    &lt;<strong>variable name="map" type="Map&amp;lt;String, String&gt;"</strong>/&gt;
+    &lt;<strong>variable name="index" type="int"</strong>/&gt;
+    &lt;<strong>variable name="key" type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+<strong>android:text="&commat;{list[index]}"
+</strong>…
+<strong>android:text="&commat;{sparse[index]}"
+</strong>…
+<strong>android:text="&commat;{map[key]}"
+</strong>
+</pre>
+<h4 id="string_literals">
+  String Literals
+</h4>
+
+<p>
+  When using single quotes around the attribute value, it is easy to use double
+  quotes in the expression:
+</p>
+
+<pre>
+<strong>android:text=&apos;&commat;{map["firstName"]}&apos;</strong>
+</pre>
+<p>
+  It is also possible to use double quotes to surround the attribute value.
+  When doing so, String literals should either use the &amp;quot; or back quote
+  (`).
+</p>
+
+<pre>
+<strong>android:text="&commat;{map[`firstName`}"
+android:text="&commat;{map[&amp;quot;firstName&amp;quot;]}"</strong>
+</pre>
+<h4 id="resources">
+  Resources
+</h4>
+
+<p>
+  It is possible to access resources as part of expressions using the normal
+  syntax:
+</p>
+
+<pre>
+<strong>android:padding="&commat;{large? &commat;dimen/largePadding : &commat;dimen/smallPadding}"</strong>
+</pre>
+<p>
+  Format strings and plurals may be evaluated by providing parameters:
+</p>
+
+<pre>
+<strong>android:text="&commat;{&commat;string/nameFormat(firstName, lastName)}"
+android:text="&commat;{&commat;plurals/banana(bananaCount)}"</strong>
+</pre>
+<p>
+  When a plural takes multiple parameters, all parameters should be passed:
+</p>
+
+<pre>
+
+  Have an orange
+  Have %d oranges
+
+android:text="<strong>&commat{&commatplurals/orange(orangeCount, orangeCount)}</strong>"
+</pre>
+<p>
+  Some resources require explicit type evaluation.
+</p>
+
+<table>
+  <tr>
+    <th>
+      Type
+    </th>
+    <th>
+      Normal Reference
+    </th>
+    <th>
+      Expression Reference
+    </th>
+  </tr>
+
+  <tr>
+    <td>
+      <pre>
+String[]
+</pre>
+    </td>
+    <td>
+      &commat;array
+    </td>
+    <td>
+      &commat;stringArray
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      int[]
+    </td>
+    <td>
+      &commat;array
+    </td>
+    <td>
+      &commat;intArray
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      TypedArray
+    </td>
+    <td>
+      &commat;array
+    </td>
+    <td>
+      &commat;typedArray
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Animator
+    </td>
+    <td>
+      &commat;animator
+    </td>
+    <td>
+      &commat;animator
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      StateListAnimator
+    </td>
+    <td>
+      &commat;animator
+    </td>
+    <td>
+      &commat;stateListAnimator
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      color <code>int</code>
+    </td>
+    <td>
+      <pre>
+&commat;color
+</pre>
+    </td>
+    <td>
+      &commat;color
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      ColorStateList
+    </td>
+    <td>
+      &commat;color
+    </td>
+    <td>
+      &commat;colorStateList
+    </td>
+  </tr>
+</table>
+
+<h2 id="data_objects">
+  Data Objects
+</h2>
+
+<p>
+  Any plain old Java object (POJO) may be used for data binding, but modifying
+  a POJO will not cause the UI to update. The real power of data binding can be
+  used by giving your data objects the ability to notify when data changes.
+  There are three different data change notification mechanisms,
+  <code>Observable</code> objects, <code>ObservableField</code>s, and
+  <code>observable collections</code>.
+</p>
+
+<p>
+  When one of these observable data object is bound to the UI and a property of
+  the data object changes, the UI will be updated automatically.
+</p>
+
+<h3 id="observable_objects">
+  Observable Objects
+</h3>
+
+<p>
+  A class implementing <code>android.databinding.Observable</code> interface
+  will allow the binding to attach a single listener to a bound object to
+  listen for changes of all properties on that object.
+</p>
+
+<p>
+  The <code>Observable</code> interface has a mechanism to add and remove
+  listeners, but notifying is up to the developer. To make development easier,
+  a base class, <code>BaseObservable,</code> was created to implement the
+  listener registration mechanism. The data class implementer is still
+  responsible for notifying when the properties change. This is done by
+  assigning a <code>Bindable</code> annotation to the getter and notifying in
+  the setter.
+</p>
+
+<pre>
+<strong>private static class </strong>User <strong>extends </strong>BaseObservable {
+   <strong>private </strong>String <strong>firstName</strong>;
+   <strong>private </strong>String <strong>lastName</strong>;
+   &commat;Bindable
+   <strong>public </strong>String getFirstName() {
+       <strong>return this</strong>.<strong>firstName</strong>;
+   }
+   &commat;Bindable
+   <strong>public </strong>String getFirstName() {
+       <strong>return this</strong>.<strong>lastName</strong>;
+   }
+   <strong>public void </strong>setFirstName(String firstName) {
+       <strong>this</strong>.<strong>firstName </strong>= firstName;
+       notifyPropertyChanged(BR.firstName);
+   }
+   <strong>public void </strong>setLastName(String lastName) {
+       <strong>this</strong>.<strong>lastName </strong>= lastName;
+       notifyPropertyChanged(BR.lastName);
+   }
+}
+</pre>
+<p>
+  The <code>Bindable</code> annotation generates an entry in the BR class file
+  during compilation. The BR class file will be generated in the module
+  package.If the base class for data classes cannot be changed, the
+  <code>Observable</code> interface may be implemented using the convenient
+  <code>PropertyChangeRegistry</code> to store and notify listeners
+  efficiently.
+</p>
+
+<h3 id="observablefields">
+  ObservableFields
+</h3>
+
+<p>
+  A little work is involved in creating Observable classes, so developers who
+  want to save time or have few properties may use ObservableFields.
+  ObservableFields are self-contained observable objects that have a single
+  field. There are versions for all primitive types and one for reference
+  types. To use, create a public final field in the data class:
+</p>
+
+<pre>
+<strong>private static class </strong>User <strong>extends </strong>BaseObservable {
+   <strong>public final </strong>ObservableField&lt;String&gt; <strong>firstName </strong>=
+       <strong>new </strong>ObservableField&lt;&gt;();
+   <strong>public final </strong>ObservableField&lt;String&gt; <strong>lastName </strong>=
+       <strong>new </strong>ObservableField&lt;&gt;();
+   <strong>public final </strong>ObservableInt <strong>age </strong>= <strong>new </strong>ObservableInt();
+}
+</pre>
+<p>
+  That&apos;s it! To access the value, use the set and get accessor methods:
+</p>
+
+<pre>
+user.<strong>firstName</strong>.set(<strong>"Google"</strong>);
+<strong>int </strong>age = user.<strong>age</strong>.get();
+</pre>
+<h3 id="observable_collections">
+  Observable Collections
+</h3>
+
+<p>
+  Some applications use more dynamic structures to hold data. Observable
+  collections allow keyed access to these data objects.ObservableArrayMap is
+  useful when the key is a reference type, such as String.
+</p>
+
+<pre>
+ObservableArrayMap&lt;String, Object&gt; user = <strong>new </strong>ObservableArrayMap&lt;&gt;();
+user.put(<strong>"firstName"</strong>, <strong>"Google"</strong>);
+user.put(<strong>"lastName"</strong>, <strong>"Inc."</strong>);
+user.put(<strong>"age"</strong>, 17);
+</pre>
+<p>
+  In the layout, the map may be accessed through the String keys:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.databinding.ObservableMap"</strong>/&gt;
+    &lt;<strong>variable name="user" type="ObservableMap&amp;lt;String, Object&gt;"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+   android:text=&apos;&commat;{user["lastName"]}&apos;
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+&lt;<strong>TextView
+   android:text=&apos;&commat;{String.valueOf(1 + (Integer)user["age"])}&apos;
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+  ObservableArrayList is useful when the key is an integer:
+</p>
+
+<pre>
+ObservableArrayList&lt;Object&gt; user = <strong>new </strong>ObservableArrayList&lt;&gt;();
+user.add(<strong>"Google"</strong>);
+user.add(<strong>"Inc."</strong>);
+user.add(17);
+</pre>
+<p>
+  In the layout, the list may be accessed through the indices:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.databinding.ObservableList"</strong>/&gt;
+    &lt;<strong>import type="com.example.my.app.Fields"</strong>/&gt;
+    &lt;<strong>variable name="user" type="ObservableList&amp;lt;Object&gt;"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+   android:text=&apos;&commat;{user[Fields.LAST_NAME]}&apos;
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+&lt;<strong>TextView
+   android:text=&apos;&commat;{String.valueOf(1 + (Integer)user[Fields.AGE])}&apos;
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<h2 id="generated_binding">
+  Generated Binding
+</h2>
+
+<p>
+  The generated binding class links the layout variables with the Views within
+  the layout. As discussed earlier, the name and package of the Binding may be
+  <a href="#custom_binding_class_names">customized</a>. The Generated binding
+  classes all extend <code>android.databinding.ViewDataBinding</code>.
+</p>
+
+<h3 id="creating">
+  Creating
+</h3>
+
+<p>
+  The binding should be created soon after inflation to ensure that the View
+  hierarchy is not disturbed prior to binding to the Views with expressions
+  within the layout. There are a few ways to bind to a layout. The most common
+  is to use the static methods on the Binding class.The inflate method inflates
+  the View hierarchy and binds to it all it one step. There is a simpler
+  version that only takes a <code>LayoutInflater</code> and one that takes a
+  <code>ViewGroup</code> as well:
+</p>
+
+<pre>
+MyLayoutBinding binding = MyLayoutBinding.<em>inflate</em>(<strong>layoutInflater</strong>);
+MyLayoutBinding binding = MyLayoutBinding.<em>inflate</em>(LayoutInflater, viewGroup, false);
+</pre>
+<p>
+  If the layout was inflated using a different mechanism, it may be bound
+  separately:
+</p>
+
+<pre>
+MyLayoutBinding binding = MyLayoutBinding.<em>bind</em>(viewRoot);
+</pre>
+<p>
+  Sometimes the binding cannot be known in advance. In such cases, the binding
+  can be created using the DataBindingUtil class:
+</p>
+
+<pre>
+ViewDataBinding binding = DataBindingUtil.<em>inflate</em>(LayoutInflater, layoutId,
+    parent, attachToParent);
+ViewDataBinding binding = DataBindingUtil.<em>bindTo</em>(viewRoot, layoutId);
+</pre>
+<h3 id="views_with_ids">
+  Views With IDs
+</h3>
+
+<p>
+  A public final field will be generated for each View with an ID in the
+  layout. The binding does a single pass on the View hierarchy, extracting the
+  Views with IDs. This mechanism can be faster than calling findViewById for
+  several Views. For example:
+</p>
+
+<pre>
+&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"</strong>&gt;
+   &lt;<strong>data</strong>&gt;
+       &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+   &lt;/<strong>data</strong>&gt;
+   &lt;<strong>LinearLayout
+       android:orientation="vertical"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent"</strong>&gt;
+       &lt;<strong>TextView android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:text="&commat;{user.firstName}"</strong>
+   <strong>android:id="&commat;+id/firstName"</strong>/&gt;
+       &lt;<strong>TextView android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:text="&commat;{user.lastName}"</strong>
+  <strong>android:id="&commat;+id/lastName"</strong>/&gt;
+   &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+  Will generate a binding class with:
+</p>
+
+<pre>
+<strong>public final </strong>TextView <strong>firstName</strong>;
+<strong>public final </strong>TextView <strong>lastName</strong>;
+</pre>
+<p>
+  IDs are not nearly as necessary as without data binding, but there are still
+  some instances where access to Views are still necessary from code.
+</p>
+
+<h3 id="variables2">
+  Variables
+</h3>
+
+<p>
+  Each variable will be given accessor methods.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+    &lt;<strong>import type="android.graphics.drawable.Drawable"</strong>/&gt;
+    &lt;<strong>variable name="user"  type="com.example.User"</strong>/&gt;
+    &lt;<strong>variable name="image" type="Drawable"</strong>/&gt;
+    &lt;<strong>variable name="note"  type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+  will generate setters and getters in the binding:
+</p>
+
+<pre>
+<strong>public abstract </strong>com.example.User getUser();
+<strong>public abstract void </strong>setUser(com.example.User user);
+<strong>public abstract </strong>Drawable getImage();
+<strong>public abstract void </strong>setImage(Drawable image);
+<strong>public abstract </strong>String getNote();
+<strong>public abstract void </strong>setNote(String note);
+</pre>
+<h3 id="viewstubs">
+  ViewStubs
+</h3>
+
+<p>
+  ViewStubs are a little different from normal Views. They start off invisible
+  and when they either are made visible or are explicitly told to inflate, they
+  replace themselves in the layout by inflating another layout.
+</p>
+
+<p>
+  Because the ViewStub essentially disappears from the View hierarchy, the View
+  in the binding object must also disappear to allow collection. Because the
+  Views are final, a ViewStubProxy object takes the place of the ViewStub,
+  giving the developer access to the ViewStub when it exists and also access to
+  the inflated View hierarchy when the ViewStub has been inflated.
+</p>
+
+<p>
+  When inflating another layout, a binding must be established for the new
+  layout. Therefore, the ViewStubProxy must listen to the ViewStub&apos;s
+  OnInflateListener and establish the binding at that time. Since only one can
+  exist, the ViewStubProxy allows the developer to set an OnInflateListener on
+  it that it will call after establishing the binding.
+</p>
+
+<h3 id="advanced_binding">
+  Advanced Binding
+</h3>
+
+<h4 id="dynamic_variables">
+  Dynamic Variables
+</h4>
+
+<p>
+  At times, the specific binding class won&apos;t be known. For example, a
+  RecyclerView Adapter operating against arbitrary layouts won&apos;t know the
+  specific binding class. It still must assign the binding value during the
+  onBindViewHolder.
+</p>
+
+<p>
+  In this example, all layouts that the RecyclerView binds to have an "item"
+  variable. The BindingHolder has a getBinding method returning the
+  <code>ViewDataBinding</code> base.
+</p>
+
+<pre>
+<strong>public void </strong>onBindViewHolder(BindingHolder holder, <strong>int </strong>position) {
+   <strong>final </strong>T item = <strong>mItems</strong>.get(position);
+   holder.getBinding().setVariable(BR.item, item);
+   holder.getBinding().executePendingBindings();
+}
+</pre>
+<h4 id="immediate_binding">
+  Immediate Binding
+</h4>
+
+<p>
+  When a variable or observable changes, the binding will be scheduled to
+  change before the next frame. There are times, however, when binding must be
+  executed immediately. To force execution, use the
+  <code>executePendingBindings()</code> method.
+</p>
+
+<h4>
+  Background Thread
+</h4>
+
+<p>
+  You can change your data model in a background thread as long as it is not a
+  collection. Data binding will localize each variable / field while evaluating
+  to avoid any concurrency issues.
+</p>
+
+<h2 id="attribute_setters">
+  Attribute Setters
+</h2>
+
+<p>
+  Whenever a bound value changes, the generated binding class must call a
+  setter method on the View with the binding expression. The data binding
+  framework has ways to customize which method to call to set the value.
+</p>
+
+<h3 id="automatic_setters">
+  Automatic Setters
+</h3>
+For an attribute, data binding tries to find the method setAttribute. The
+namespace for the attribute does not matter, only the attribute name itself.
+<p>
+  For example, an expression associated with TextView&apos;s attribute
+  <strong><code>android:text</code></strong> will look for a setText(String).
+  If the expression returns an int, data binding will search for a setText(int)
+  method. Be careful to have the expression return the correct type, casting if
+  necessary. Note that data binding will work even if no attribute exists with
+  the given name. You can then easily "create" attributes for any setter by
+  using data binding. For example, support DrawerLayout doesn&apos;t have any
+  attributes, but plenty of setters. You can use the automatic setters to use
+  one of these.
+</p>
+
+<pre>
+&lt;android.support.v4.widget.<strong>DrawerLayout
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    app:scrimColor="&commat;{&commat;color/scrim}"
+    app:drawerListener="&commat;{fragment.drawerListener}"/&gt;</strong>
+</pre>
+<h3 id="renamed_setters">
+  Renamed Setters
+</h3>
+
+<p>
+  Some attributes have setters that don&apos;t match by name. For these
+  methods, an attribute may be associated with the setter through
+  BindingMethods annotation. This must be associated with a class and contains
+  BindingMethod annotations, one for each renamed method. For example, the
+  <strong><code>android:tint</code></strong> attribute is really associated
+  with setImageTintList, not setTint.
+</p>
+
+<pre>
+&commat;BindingMethods({
+       &commat;BindingMethod(type = <strong>"android.widget.ImageView"</strong>,
+                      attribute = <strong>"android:tint"</strong>,
+                      method = <strong>"setImageTintList"</strong>),
+})
+</pre>
+<p>
+  It is unlikely that developers will need to rename setters; the android
+  framework attributes have already been implemented.
+</p>
+
+<h3 id="custom_setters">
+  Custom Setters
+</h3>
+
+<p>
+  Some attributes need custom binding logic. For example, there is no
+  associated setter for the <strong><code>android:paddingLeft</code></strong>
+  attribute. Instead, <code>setPadding(left, top, right, bottom)</code> exists.
+  A static binding adapter method with the <code>BindingAdapter</code>
+  annotation allows the developer to customize how a setter for an attribute is
+  called.
+</p>
+
+<p>
+  The android attributes have already had <code>BindingAdapter</code>s created.
+  For example, here is the one for <code>paddingLeft</code>:
+</p>
+
+<pre>
+
+&commat;BindingAdapter(<strong>"android:paddingLeft"</strong>)
+<strong>public static void </strong>setPaddingLeft(View view, <strong>int </strong>padding) {
+   view.setPadding(padding,
+                   view.getPaddingTop(),
+                   view.getPaddingRight(),
+                   view.getPaddingBottom());
+}
+</pre>
+<p>
+  Binding adapters are useful for other types of customization. For example, a
+  custom loader can be called off-thread to load an image.
+</p>
+
+<p>
+  Developer-created binding adapters will override the data binding default
+  adapters when there is a conflict.
+</p>
+
+<p>
+  You can also have adapters that receive multiple parameters.
+</p>
+
+<pre>
+&commat;BindingAdapter({<strong>"bind:imageUrl"</strong>, <strong>"bind:error"</strong>})
+<strong>public static void </strong>loadImage(ImageView view, String url, Drawable error) {
+   Picasso.<em>with</em>(view.getContext()).load(url).error(error).into(view);
+}
+</pre>
+<pre>
+&lt;ImageView app:imageUrl=“&commat;{venue.imageUrl}”
+app:error=“&commat;{&commat;drawable/venueError}”/&gt;
+</pre>
+
+<p>
+  This adapter will be called if both <strong>imageUrl</strong> and
+  <strong>error</strong> are used for an ImageView and <em>imageUrl</em> is a
+  string and <em>error</em> is a drawable.
+</p>
+
+<ul>
+  <li>Custom namespaces are ignored during matching.
+  </li>
+
+  <li>You can also write adapters for android namespace.
+  </li>
+</ul>
+
+<h2 id="converters">
+  Converters
+</h2>
+
+<h3 id="object_conversions">
+  Object Conversions
+</h3>
+
+<p>
+  When an Object is returned from a binding expression, a setter will be chosen
+  from the automatic, renamed, and custom setters. The Object will be cast to a
+  parameter type of the chosen setter.
+</p>
+
+<p>
+  This is a convenience for those using ObservableMaps to hold data. for
+  example:
+</p>
+
+<pre>
+&lt;<strong>TextView
+   android:text=&apos;&commat;{userMap["lastName"]}&apos;
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+
+<p>
+The <code>userMap</code> returns an Object and that Object will be automatically cast to
+  parameter type found in the setter <code>setText(CharSequence)</code>. When there
+  may be confusion about the parameter type, the developer will need
+  to cast in the expression.
+</p>
+
+<h3 id="custom_conversions">Custom Conversions</h3>
+
+<p>
+  Sometimes conversions should be automatic between specific types. For
+  example, when setting the background:
+</p>
+
+<pre>
+&lt;<strong>View
+   android:background="&commat;{isError ? &commat;color/red : &commat;color/white}"
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+  Here, the background takes a <code>Drawable</code>, but the color is an
+  integer. Whenever a <code>Drawable</code> is expected and an integer is
+  returned, the <code>int</code> should be converted to a
+  <code>ColorDrawable</code>. This conversion is done using a static method
+  with a BindingConversion annotation:
+</p>
+
+<pre>
+&commat;BindingConversion
+<strong>public static </strong>ColorDrawable convertColorToDrawable(<strong>int </strong>color) {
+   <strong>return new </strong>ColorDrawable(color);
+}
+</pre>
+<p>
+  Note that conversions only happen at the setter level, so it is <strong>not
+  allowed</strong> to mix types like this:
+</p>
+
+<pre>
+&lt;<strong>View
+   android:background="&commat;{isError ? &commat;drawable/error : &commat;color/white}"
+   android:layout_width="wrap_content"
+   android:layout_height="wrap_content"</strong>/&gt;
+</pre>
diff --git a/docs/html/tools/data-binding/index.jd b/docs/html/tools/data-binding/index.jd
new file mode 100644
index 0000000..4ad11b6
--- /dev/null
+++ b/docs/html/tools/data-binding/index.jd
@@ -0,0 +1,18 @@
+page.title=Android Data Binding Library
+page.metaDescription=
+
+@jd:body
+
+<p>
+  Some text here.
+</p>
+
+
+
+<!--  <h2>Related Resources</h2>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="tag:engagement"
+    data-sortOrder="random"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div> -->
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd
index ae15bc1..90116d4 100644
--- a/docs/html/tools/sdk/ndk/index.jd
+++ b/docs/html/tools/sdk/ndk/index.jd
@@ -1,4470 +1,21 @@
-ndk=true
-page.template=sdk
-
-
-ndk.mac64_download=android-ndk-r10e-darwin-x86_64.bin
-ndk.mac64_bytes=388937326
-ndk.mac64_checksum=2cb8893a5701603519d38a7e04c50e81
-
-ndk.linux64_download=android-ndk-r10e-linux-x86_64.bin
-ndk.linux64_bytes=401522849
-ndk.linux64_checksum=19af543b068bdb7f27787c2bc69aba7f
-
-ndk.linux32_download=android-ndk-r10e-linux-x86.bin
-ndk.linux32_bytes=394281908
-ndk.linux32_checksum=c3edd3273029da1cbd2f62c48249e978
-
-ndk.win64_download=android-ndk-r10e-windows-x86_64.exe
-ndk.win64_bytes=419616132
-ndk.win64_checksum=8412bb4991a95e08fda50b5a44d95df7
-
-ndk.win32_download=android-ndk-r10e-windows-x86.exe
-ndk.win32_bytes=396563176
-ndk.win32_checksum=1a82445baaf62aec3a46386ab1e5772c
-
-
-
 page.title=Android NDK
 @jd:body
 
 
 
-
-<div id="tos" style="display:none;width:760px;height:0;margin:0 auto">
-
-<div id="download" class="ndk" style="
-z-index: 99;
-width: 720px;
-position: absolute;
-margin: -70px 0;
-padding: 14px;
-background: white;
-border: 1px solid #999;
-box-shadow: -10px 10px 50px #888;
--moz-box-shadow: -10px 10px 50px #888;
--webkit-box-shadow: -10px 10px 50px #888;">
-<p>Before installing the Android NDK, you must agree to the following terms and conditions.</p>
-<div class="sdk-terms" style="width:auto" onfocus="this.blur()">
-<h2 class="norule">Terms and Conditions</h2>
-This is the Android Software Development Kit License Agreement
-
-<h3>1. Introduction</h3>
-1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and
-specifically including the Android system files, packaged APIs, and Google APIs add-ons) is
-licensed to you subject to the terms of this License Agreement. This License Agreement forms a
-legally binding contract between you and Google in relation to your use of the SDK.
-
-1.2 “Android” means the Android software stack for devices, as made available under the Android
-Open Source Project, which is located at the following URL: http://source.android.com/, as updated
-from time to time.
-
-1.3 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600
-Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-
-<h3>2. Accepting this License Agreement</h3>
-2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the
-SDK if you do not accept this License Agreement.
-
-2.2 By clicking to accept, you hereby agree to the terms of this License Agreement.
-
-2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred
-from receiving the SDK under the laws of the United States or other countries including the country
-in which you are resident or from which you use the SDK.
-
-2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other
-entity, you represent and warrant that you have full legal authority to bind your employer or such
-entity to this License Agreement. If you do not have the requisite authority, you may not accept
-the License Agreement or use the SDK on behalf of your employer or other entity.
-
-
-<h3>3. SDK License from Google</h3>
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide,
-royalty-free, non-assignable and non-exclusive license to use the SDK solely to develop
-applications to run on the Android platform.
-
-3.2 You agree that Google or third parties own all legal right, title and interest in and to the
-SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property
-Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law,
-and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.3 You may not use the SDK for any purpose not expressly permitted by this License Agreement.
-Except to the extent required by applicable third party licenses, you may not: (a) copy (except for
-backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create
-derivative works of the SDK or any part of the SDK; or (b) load any part of the SDK onto a mobile
-handset or any other hardware device except a personal computer, combine any part of the SDK with
-other software, or distribute any software or device incorporating a part of the SDK.
-
-3.4 You agree that you will not take any actions that may cause or result in the fragmentation of
-Android, including but not limited to distributing, participating in the creation of, or promoting
-in any way a software development kit derived from the SDK.
-
-3.5 Use, reproduction and distribution of components of the SDK licensed under an open source
-software license are governed solely by the terms of that open source software license and not this
-License Agreement.
-
-3.6 You agree that the form and nature of the SDK that Google provides may change without prior
-notice to you and that future versions of the SDK may be incompatible with applications developed
-on previous versions of the SDK. You agree that Google may stop (permanently or temporarily)
-providing the SDK (or any features within the SDK) to you or to users generally at Google's sole
-discretion, without prior notice to you.
-
-3.7 Nothing in this License Agreement gives you a right to use any of Google's trade names,
-trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including
-copyright and trademark notices) that may be affixed to or contained within the SDK.
-
-
-<h3>4. Use of the SDK by You</h3>
-4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under
-this License Agreement in or to any software applications that you develop using the SDK, including
-any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a)
-this License Agreement and (b) any applicable law, regulation or generally accepted practices or
-guidelines in the relevant jurisdictions (including any laws regarding the export of data or
-software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the SDK to develop applications for general public users, you will
-protect the privacy and legal rights of those users. If the users provide you with user names,
-passwords, or other login information or personal information, you must make the users aware that
-the information will be available to your application, and you must provide legally adequate
-privacy notice and protection for those users. If your application stores personal or sensitive
-information provided by users, it must do so securely. If the user provides your application with
-Google Account information, your application may only use that information to access the user's
-Google Account when, and for the limited purposes for which, the user has given you permission to
-do so.
-
-4.4 You agree that you will not engage in any activity with the SDK, including the development or
-distribution of an application, that interferes with, disrupts, damages, or accesses in an
-unauthorized manner the servers, networks, or other properties or services of any third party
-including, but not limited to, Google or any mobile communications carrier.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any data, content, or resources that you create, transmit or display
-through Android and/or applications for Android, and for the consequences of your actions
-(including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any breach of your obligations under this License Agreement, any applicable
-third party contract or Terms of Service, or any applicable law or regulation, and for the
-consequences (including any loss or damage which Google or any third party may suffer) of any such
-breach.
-
-
-<h3>5. Your Developer Credentials</h3>
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer
-credentials that may be issued to you by Google or which you may choose yourself and that you will
-be solely responsible for all applications that are developed under your developer credentials.
-
-
-<h3>6. Privacy and Information</h3>
-6.1 In order to continually innovate and improve the SDK, Google may collect certain usage
-statistics from the software including but not limited to a unique identifier, associated IP
-address, version number of the software, and information on which tools and/or services in the SDK
-are being used and how they are being used. Before any of this information is collected, the SDK
-will notify you and seek your consent. If you withhold consent, the information will not be
-collected.
-
-6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in
-accordance with Google's Privacy Policy.
-
-
-<h3>7. Third Party Applications</h3>
-7.1 If you use the SDK to run applications developed by a third party or that access data, content
-or resources provided by a third party, you agree that Google is not responsible for those
-applications, data, content, or resources. You understand that all data, content or resources which
-you may access through such third party applications are the sole responsibility of the person from
-which they originated and that Google is not liable for any loss or damage that you may experience
-as a result of the use or access of any of those third party applications, data, content, or
-resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third
-party application may be protected by intellectual property rights which are owned by the providers
-(or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell,
-distribute or create derivative works based on these data, content, or resources (either in whole
-or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may
-be subject to separate terms between you and the relevant third party. In that case, this License
-Agreement does not affect your legal relationship with these third parties.
-
-
-<h3>8. Using Android APIs</h3>
-8.1 Google Data APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be
-protected by intellectual property rights which are owned by Google or those parties that provide
-the data (or by other persons or companies on their behalf). Your use of any such API may be
-subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or
-create derivative works based on this data (either in whole or in part) unless allowed by the
-relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you
-shall retrieve data only with the user's explicit consent and only when, and for the limited
-purposes for which, the user has given you permission to do so.
-
-
-<h3>9. Terminating this License Agreement</h3>
-9.1 This License Agreement will continue to apply until terminated by either you or Google as set
-out below.
-
-9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK
-and any relevant developer credentials.
-
-9.3 Google may at any time, terminate this License Agreement with you if:
-(A) you have breached any provision of this License Agreement; or
-(B) Google is required to do so by law; or
-(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated
-its relationship with Google or ceased to offer certain parts of the SDK to you; or
-(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country
-in which you are resident or from which you use the service, or the provision of the SDK or certain
-SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.
-
-9.4 When this License Agreement comes to an end, all of the legal rights, obligations and
-liabilities that you and Google have benefited from, been subject to (or which have accrued over
-time whilst this License Agreement has been in force) or which are expressed to continue
-indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall
-continue to apply to such rights, obligations and liabilities indefinitely.
-
-
-<h3>10. DISCLAIMER OF WARRANTIES</h3>
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE
-SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE
-SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR
-COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-
-<h3>11. LIMITATION OF LIABILITY</h3>
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS
-LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY
-LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN
-AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-
-<h3>12. Indemnification</h3>
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless
-Google, its affiliates and their respective directors, officers, employees and agents from and
-against any and all claims, actions, suits or proceedings, as well as any and all losses,
-liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or
-accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes
-any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of
-any person or defames any person or violates their rights of publicity or privacy, and (c) any
-non-compliance by you with this License Agreement.
-
-
-<h3>13. Changes to the License Agreement</h3>
-13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK.
-When these changes are made, Google will make a new version of the License Agreement available on
-the website where the SDK is made available.
-
-
-<h3>14. General Legal Terms</h3>
-14.1 This License Agreement constitutes the whole legal agreement between you and Google and
-governs your use of the SDK (excluding any services which Google may provide to you under a
-separate written agreement), and completely replaces any prior agreements between you and Google in
-relation to the SDK.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is
-contained in this License Agreement (or which Google has the benefit of under any applicable law),
-this will not be taken to be a formal waiver of Google's rights and that those rights or remedies
-will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any
-provision of this License Agreement is invalid, then that provision will be removed from this
-License Agreement without affecting the rest of this License Agreement. The remaining provisions of
-this License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the
-parent shall be third party beneficiaries to this License Agreement and that such other companies
-shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that
-confers a benefit on (or rights in favor of) them. Other than this, no other person or company
-shall be third party beneficiaries to this License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST
-COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE
-LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The rights granted in this License Agreement may not be assigned or transferred by either you
-or Google without the prior written approval of the other party. Neither you nor Google shall be
-permitted to delegate their responsibilities or obligations under this License Agreement without
-the prior written approval of the other party.
-
-14.7 This License Agreement, and your relationship with Google under this License Agreement, shall
-be governed by the laws of the State of California without regard to its conflict of laws
-provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located
-within the county of Santa Clara, California to resolve any legal matter arising from this License
-Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for
-injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-
-<em>November 13, 2012</em>
-</div>
-
-
-
-<div id="sdk-terms-form">
-<p>
-<input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
-<label id="agreeLabel" for="agree">I have read and agree with the above terms and conditions</label>
-</p>
-<p><a href="" class="button disabled ndk" id="downloadForRealz" onclick="return onDownloadNdkForRealz(this);"></a></p>
-</div>
-
-
-
-</div>
-</div>
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#Downloads">Downloads</a></li>
-        <li><a href="#Revisions">Revisions</a></li>
-        <li><a href="#Reqs">System and Software Requirements</a></li>
-        <li><a href="#Installing">Installing the NDK</a></li>
-        <li><a href="#GetStarted">Getting Started with the NDK</a>
-          <ol>
-            <li><a href="#Using">Using the NDK</a></li>
-          </ol>
-        </li>
-        <li><a href="#Contents">Contents of the NDK</a>
-          <ol>
-            <li><a href="#Tools">Development tools</a></li>
-            <li><a href="#Docs">Documentation</a></li>
-            <li><a href="#Samples">Sample apps</a></li>
-          </ol>
-        </li>
-      </ol>
-    </div>
-  </div>
-
   <p>The NDK is a toolset that allows you to implement parts
-  of your app using native-code languages such as C and C++. For certain types of apps,
-  this can be helpful so you can reuse existing code libraries written in these
-  languages, but most apps do not need the Android NDK.</p>
+  of your app using native-code languages such as C and C++. Typically, good use cases for the NDK
+  are CPU-intensive applications such as game engines, signal processing, and physics simulation.
+  </p>
 
   <p>Before downloading the NDK, you should understand that <strong>the NDK
    will not benefit most apps</strong>. As a developer, you need to balance its benefits
   against its drawbacks. Notably, using native code on Android
   generally does not result in a noticable performance improvement,
   but it always increases your app complexity. In general, you should only use the NDK
-  if it is essential to your app&mdash;never because you simply prefer to program in C/C++.</p>
+  if it is essential to your app&mdash;never because you simply prefer to program in C/C++.
+  When examining whether or not you should develop in native code, think about your requirements and
+  see if the Android framework APIs provide the functionality that you need.</p>
 
-  <p>Typical good candidates for the NDK are CPU-intensive workloads such as game engines,
-  signal processing, physics simulation, and so on. When examining
-  whether or not you should develop in native code, think about your requirements and see if the
-  Android framework APIs provide the functionality that you need.</p>
-
-
-<h2 id="Downloads">Downloads</h2>
-
-
-<script>
-$('#Downloads').after($('#download-table'));
-</script>
-
-<h2 id="Revisions">Revisions</h2>
-
-<p>The following sections provide information about releases of the NDK.</p>
-
-<div class="toggle-content opened">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-opened.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 10e</a> <em>(May 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
-        <li>Integrated the workaround for Cortex-A53 Erratum 843419 into the
-        {@code aarch64-linux-android-4.9} linker. For more information on this workaround, see
-        <a href="https://sourceware.org/ml/binutils/2015-03/msg00446.html">Workaround for cortex-a53
-        erratum 843419.</a></li>
-
-         <li>Added Clang 3.6; {@code NDK_TOOLCHAIN_VERSION=clang} now picks that version
-         of Clang by default.</li>
-
-         <li>Removed Clang 3.4.</li>
-
-         <li>Removed GCC 4.6.</li>
-
-         <li>Implemented multithreading support in {@code ld.gold} for all architectures. It can
-         now link with or without support for multithreading; the default is to do it without.
-            <ul>
-            <li>To compile with multithreading, use the {@code --threads} option.</li>
-            <li>To compile without multithreading, use the {@code --no-threads} option.</li>
-            </ul>
-            </li>
-
-         <li>Upgraded GDB/gdbserver to 7.7 for all architectures.</li>
-
-         <li>Removed the NDK package for 32-bit Darwin.</li>
-      </ul>
-      </dd>
-   <dl>
-
-
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-        <li>Fixed a crash that occurred when there were OpenMP loops outside of the main thread.</li>
-
-        <li>Fixed a GCC 4.9 internal compiler error (<i>ICE</i>) that occured when the user declared
-        {@code #pragma GCC optimize ("O0")}, but had a different level of optimization specified
-        on the command line. The {@code pragma} takes precedence.</li>
-
-        <li>Fixed an error that used to produce a crash with the following error message:
-<pre>
-in add_stores, at var-tracking.c:6000
-</pre>
-        </li>
-
-        <li>Implemented a workaround for a Clang 3.5 issue in which LLVM auto-vectorization
-        generates {@code llvm.cttz.v2i64()}, an instruction with no counterpart in the ARM
-        instruction set.</li>
-     </ul>
-     </dd>
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-        <li>Made the following header and library fixes:</li>
-           <ul>
-           <li>Fixed {@code PROPERTY_*} in {@code media/NdkMediaDrm.h}.</li>
-           <li>Fixed {@code sys/ucontext.h} for {@code mips64}.</li>
-           <li>Dropped the Clang version check for {@code __builtin_isnan} and
-           {@code __builtin_isinf}.</li>
-           <li>Added {@code android-21/arch-mips/usr/include/asm/reg.h}
-           and {@code android-21/arch-mips64/usr/include/asm/reg.h}.</li>
-           </ul>
-           </li>
-
-        <li>Fixed a spurious array-bounds warning that GCC 4.9 produced for x86, and reenabled the
-        array bounds warning that GCC 4.9 had produced for ARM. The warning for ARM had
-        previously been unconditionally disabled.</li>
-
-        <li>Fixed Clang 3.5 for {@code mips} and {@code mips64} to create a writable
-            {@code .gcc_except_table} section, thus matching GCC behavior. This change allows you
-            to avoid the following linker warning:
-
-<pre>
-.../ld: warning: creating a DT_TEXTREL in a shared object
-</pre>
-            </li>
-
-        <li>Backported a fix for {@code compiler-rt} issues that were causing crashes when Clang
-        compiled for {@code mips64}. For more information, see LLVM Issue
-        <a href="http://llvm.org/bugs/show_bug.cgi?id=20098">20098</a>.</li>
-
-        <li>Fixed Clang 3.5 crashes that occurred on non-ASCII comments. (Issue
-        <a href="https://code.google.com/p/android/issues/detail?id=81440">81440</a>)</li>
-
-        <li>Fixed {@code stlport collate::compare} to return {@code -1} and {@code 1}. Previously,
-        it had returned arbitrary signed numbers.</li>
-
-        <li>Fixed {@code ndk-gdb} for 64-bit ABIs. (Issue
-        <a href="https://code.google.com/p/android/issues/detail?id=118300">118300</a>)</li>
-
-        <li>Fixed the crash that the HelloComputeNDK sample for RenderScript was producing on
-        Android 4.4 (Android API level 19). For more information, see
-        <a href="http://stackoverflow.com/questions/28057049/targeting-pre-lollipop-devices-using-renderscript-from-ndk-c">this page</a>.</li>
-
-        <li>Fixed {@code libc++ __wrap_iter} for GCC. For more information, see LLVM Issue
-        <a href="http://llvm.org/bugs/show_bug.cgi?id=22355">22355</a>.</li>
-
-        <li>Fixed {@code .asm} support for ABI {@code x86_64}.</li>
-
-        <li>Implemented a workaround for the GCC 4.8 {@code stlport} issue. (Issue
-        <a href="https://android-review.googlesource.com/#/c/127773">127773</a>)</li>
-
-        <li>Removed the trailing directory separator {@code \\} from the project path in Windows.
-        (Issue <a href="https://code.google.com/p/android/issues/detail?id=160584">160584</a>)
-        </li>
-
-        <li>Fixed a {@code no rule to make target} error that occurred when compiling a single
-        {@code .c} file by executing the {@code ndk-build.cmd} command from {@code gradle}. (Issue
-        <a href="https://code.google.com/p/android/issues/detail?id=66937">66937</a>)</li>
-
-        <li>Added the {@code libatomic.a} and {@code libgomp.a} libraries that had been missing from
-        the following host toolchains:
-        <ul>
-           <li>{@code aarch64-linux-android-4.9}</li>
-           <li>{@code mips64el-linux-android-4.9}</li>
-           <li>{@code mipsel-linux-android-4.9}</li>
-           <li>{@code x86_64-4.9}</li>
-        </ul>
-     </ul>
-     </dd>
-
-     <dt>Other changes:</dt>
-     <dd>
-       <ul>
-       <li>Added {@code ld.gold} for {@code aarch64}. The default linker remains {@code ld.bfd}.
-       To explicitly enable {@code ld.gold}, add {@code -fuse-ld=gold} to the
-       {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} variable.</li>
-
-       <li>Built the MIPS and MIPS64 toolchains with {@code binutils-2.25}, which provides improved
-       R6 support.</li>
-
-       <li>Made {@code -fstandalone-debug} (full debug info) a default option for Clang.</li>
-
-       <li>Replaced {@code -fstack-protector} with {@code -fstack-protector-strong} for
-       the ARM, AArch64, X86, and X86_64 toolchains for GCC 4.9, Clang 3.5, and
-       Clang 3.6.</li>
-
-       <li>Added the {@code --package} command-line switch to {@code ndk-gdb} to allow the build
-       system to override the package name. (Issue
-       <a href="https://code.google.com/p/android/issues/detail?id=56189">56189</a>)</li>
-
-       <li> Deprecated {@code -mno-ldc1-stc1} for MIPS.  This option may not work with the new
-       {@code -fpxx} and {@code -mno-odd-spreg} options, or with the FPXX ABI.</li>
-
-       <li>Added MIPS MSA and R6 detection to {@code cpu-features}.</li>
-
-     </ul>
-     </dd>
-
-   </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 10d</a> <em>(December 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
-        <li>Made GCC 4.8 the default for all 32-bit ABIs.  Deprecated GCC 4.6, and
-            will remove it next release. To restore previous behavior, either add
-            <code>NDK_TOOLCHAIN_VERSION=4.6</code> to ndk-build, or
-            add <code>--toolchain=arm-linux-androideabi-4.6</code> when executing
-            <code>make-standalone-toolchain.sh</code> on the command line. GCC 4.9 remains the
-            default for 64-bit ABIs.</li>
-
-         <li>Stopped all x86[_64] toolchains from adding <code>-mstackrealign</code> by default. The
-             NDK toolchain assumes a 16-byte stack alignment. The tools and options used by default
-             enforce this rule. A user writing assembly code must make sure to preserve stack
-             alignment, and ensure that other compilers also comply with this rule.
-             (GCC bug <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496">38496</a>)</li>
-
-         <li>Added Address Sanitizer functionality to Clang 3.5 support to the ARM and x86 ABIs.
-             For more information on this change, see the
-             <a href="https://code.google.com/p/address-sanitizer/wiki/Android">Address
-             Sanitizer</a> project.</li>
-
-         <li>Introduced the requirement, starting from API level 21, to use <code>-fPIE -pie
-             </code> when building. In API levels 16 and higher, ndk-build uses <code>PIE</code>
-             when building. This change has a number of implications, which are discussed in
-             <a href="https://code.google.com/p/android-developer-preview/issues/detail?id=888">
-             Developer Preview Issue 888</a>.
-             These implications do not apply to shared libraries.</li>
-      </ul>
-      </dd>
-   <dl>
-
-
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-        <li>Made more fixes related to
-            <a href="https://gcc.gnu.org/ml/gcc-patches/2014-10/msg00906.html">
-            A53 Errata #835769</a> in the aarch64-linux-android-4.9 linker. As part of this, GCC
-            passes a new option, <code>--fix-cortex-a53-835769</code>, when
-            <code>-mfix-cortex-a53-835769</code> (enabled by default) is specified.
-            For more information, see this
-            <a href="https://sourceware.org/ml/binutils/2014-10/msg00198.html">binutils message</a>
-            and this
-            <a href="https://sourceware.org/ml/binutils/2014-11/msg00287.html">binutils message</a>.
-            </li>
-
-        <li>Documented a fix to a libc++ <code>sscanf/vsscanf</code> hang that occurred in API level
-            21. The fix itself had been implemented in r10c.
-            (Issue <a href="http://b.android.com/77988">77988</a>)</li>
-
-        <li>Fixed an AutoFDO (<code>-fauto-profile</code>) crash that occurred with GCC 4.9 when
-            <code>-Os</code> was specified. (Issue <a href="http://b.android.com/77571">77571</a>)</li>
-     </ul>
-     </dd>
-
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-        <li>Made the following header and library fixes:</li>
-           <ul>
-        <li>Added <code>posix_memalign</code> to API level 16. Also, added a prototype in
-            <code>stdlib.h</code> to API levels 16 to 19.
-            (Issue <a href="http://b.android.com/77861">77861</a>)</li>
-        <li>Fixed <code>stdatomic.h</code> so that it includes <code>&lt;atomic&gt;</code> only for
-            C++11.</li>
-        <li>Modified the following headers for standalone use: <code>sys/user.h</code>, and
-            <code>gl2ext.h</code>, <code>dlext.h</code>, <code>fts.h</code>, <code>sgidefs.h</code>
-            for API level 21.</li>
-        <li>Modified <code>sys/user.h</code> to rename <code>mxcsr_mask</code> as <code>mxcr_mask</code>,
-            and to change the data type for <code>u_ar0</code></li> from <code>unsigned long</code>
-            to </code>struct user_regs_struct*</code>.
-        <li>Changed <code>sysconf()</code> return value type from <code>int</code> to
-            <code>long</code>.</li>
-           </ul>
-
-        <li>Fixed ndk-build's handling of <code>thumb</code> for <code>LOCAL_ARM_MODE</code>: In
-            r10d, ndk-build adds <code>LOCAL_LDFLAGS+=-mthumb</code> by default, unless one of the
-            following conditions applies:</li>
-          <ul>
-            <li>You have set <code>LOCAL_ARM_MODE</code> equal to <code>arm</code>.</li>
-            <li>You are doing a debug build (with settings such as <code>APP_OPTIM=debug</code> and
-            <code>AndroidManifest.xml</code> containing <code>android:debuggable="true"</code>),
-            where ARM mode is the default in order to retain compatibility with earlier toolchains.
-            (Issue <a href="http://b.android.com/74040">74040</a>)</li>
-          </ul>
-
-        <li>Fixed <code>LOCAL_SRC_FILES</code> in ndk-build to use Windows absolute paths.
-            (Issue <a href="http://b.android.com/74333">74333</a>)</li>
-
-        <li>Removed bash-specific code from ndk-gdb. (Issue <a href="http://b.android.com/73338">73338</a>)</li>
-
-        <li>Removed bash-specific code from <code>make-standalone-toolchain.sh</code>.
-            (Issue <a href="http://b.android.com/74145">74145)</a></li>
-
-        <li>Revised documentation concerning a fix for <code>System.loadLibrary()</code> transitive
-            dependencies. (Issue <a href="http://b.android.com/41790">41790</a>)</li>
-
-        <li>Fixed a problem that was preventing 64-bit packages from extracting on Ubuntu 14.04 and
-            OS X 10.10 (Yosemite). (Issue <a href="http://b.android.com/78148">78148</a>)</li>
-
-        <li>Fixed an issue with <code>LOCAL_PCH</code> to improve Clang support. (Issue
-            <a href="http://b.android.com/77575">77575</a>)</li>
-
-        <li>Clarified "requires executable stack" warning from ld.gold. (Issue
-            <a href="http://b.android.com/79115">79115</a>)</li>
-     </ul>
-     </dd>
-
-   </dl>
- </div>
-</div>
-
-
-
-
-
-
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 10c</a> <em>(October 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
- <li>Made the following changes to download structure:</li>
-       <ul>
-       <li>Each package now contains both the 32- and the 64-bit headers, libraries, and tools for
-       its respective platform.</li>
-       <li>STL libraries with debugging info no longer need be downloaded separately.</li>
-       </ul>
-  <li>Changed everything previously called <code>Android-L</code> to the official release
-  designation: <code>android-21</code>.</li>
-  <li>Updated GCC 4.9 by rebasing to the <code>google</code> branch
-  of the GCC repository. Major differences from the upstream version of GCC 4.9 include:</li>
-
-  <ul>
-  <li>The <code>-O2</code> option now turns on vectorization, without loop peeling but with more
-  aggressive unrolling.</li>
-  <li>Enhancements to FDO and <a href="https://gcc.gnu.org/wiki/LightweightIpo#LIPO_-_Profile_Feedback_Based_Lightweight_IPO">
-  LIPO</a></li>
-  <p>For more detailed information, see <em>Important bug fixes</em> below.</p>
-  </ul>
-
-  <li>Added Clang 3.5 support to all hosts: <code>NDK_TOOLCHAIN_VERSION=clang</code>
-  now picks Clang 3.5. Note that:</li>
-  <ul>
-
-  <li>ARM and x86 default to using the integrated assembler. If this causes issues, use
-  <code>-fno-integrated-as</code> as a workaround.</code>
-  <li>Clang 3.5 issues more warnings for unused flags, such as the <code>-finline-functions</code>
-  option that GCC supports.</li>
-  <p>When migrating from projects using GCC, you can use
-  <code>-Wno-invalid-command-line-argument</code> and <code>-Wno-unused-command-line-argument</code>
-  to ignore the unused flags until you're able decide on what to do with them longer-term.</p>
-
-     </ul>
-  <li>Made it possible to enter ART debugging mode, when debugging on an Android 5.0 device using
-  ART as its virtual machine, by specifying the <code>art-on</code> option. For more information,
-  see <code>prebuilt/common/gdb/common.setup</code> in the directory containing the NDK.</li>
-  <li>Removed support for Clang 3.3.</li>
-  <li>Deprecated GCC 4.6, and may remove it from future releases.</li>
-  <li>Updated mclinker to 2.8 with Identical Code Folding ("ICF") support. Specify ICF using the
-  <code>--icf</code> option.</li>
-  <li>Broadened <code>arm_neon.h</code> support in x86 and x86_64, attaining coverage of ~93% of
-  NEON intrinsics. For more information about NEON support:
-     <ul>
-     <li>Navigate to the NDK Programmer's Guide (<code>docs/Programmers_Guide/html/</code>), and see
-     Architectures and CPUs > Neon.</li>
-     <li>Examine the updated <code>hello-neon</code> sample in <code>samples/</code>.
-     <li>See Intel's guide to <a href="https://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-automatic-porting-solution-tips-and-tricks"> porting from ARM NEON to Intel SSE.</a></li>
-     </ul>
-  <li>Documented support for <code>_FORTIFY_SOURCE</code> in <code>headers/libs/android-21</code>,
-  which appeared in r10 (when <code>android-21</code> was still called <code>Android-L</code>),
-  but had no documentation.</li>
-      </ul>
-      </dd>
-   <dl>
-
-
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Fixed an internal compiler error with GCC4.9/aarch64 that was causing the following
-       error message (Issue <a href="http://b.android.com/77564">77564</a>):</li>
-<pre>
-internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
-</pre>
-       <li>Fixed incorrect code generation from GCC4.9/arm. (Issue
-       <a href="http://b.android.com/77567">77567<a>)</li>
-       <li>Fixed an internal compiler error with GCC4.9/mips involving inline-assembly. (Issue
-       <a href="http://b.android.com/77568">77568</a>)</li>
-       <li>Fixed incorrect code that GCC4.9/arm was generating for <code>x = (cond) ? y : x</code>.
-       (Issue <a href="http://b.android.com/77569">77569</a>)</li>
-       <li>Fixed GCC4.9/aarch64 and Clang3.5/aarch64 to work around the
-       <a href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141006/116322.html">
-       Cortex-A53 erratum (835769)</a>  by default.  Disable the workaround by specifying
-       <code>-mno-fix-cortex-a53-835769</code>.</li>
-     </ul>
-     </dd>
-
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-     <li>Made the following header and library fixes to <code>android-21</code>:
-        <ul>
-
-        <li>Added more TV keycodes: <code>android/keycodes.h</code></li>
-        <li>Added more constants and six new sensor functions to <code>android/sensor.h</code>:
-        <code>ASensorManager_getDefaultSensorEx</code>, <code>ASensor_getFifoMaxEventCount</code>,
-        <code>ASensor_getFifoReservedEventCount</code>, <code>ASensor_getStringType</code>,
-        <code>ASensor_getReportingMode</code>, and <code>ASensor_isWakeUpSensor</code>.</li>
-        <li>Fixed <code>stdatomic.h</code> to improve compatibility with GCC 4.6, and provide support
-        for the <code>&lt;atomic&gt;</code> header.</li>
-        <li>Added <code>sys/ucontext.h</code> and <code>sys/user.h</code> to all API levels. The
-        <code>signal.h</code> header now includes <code>&lt;sys/ucontext.h&gt;</code>.  You may
-        remove any existing definition of <code>struct ucontext</code>.</li>
-        <li>Added <code>posix_memalign</code> to API levels 17, 18, and 19.</li>
-        <li>Added the following functions to all architectures:
-        <code>android_set_abort_message</code>, <code>posix_fadvise</code>,
-        <code>posix_fadvise64</code>, <code>pthread_gettid_np</code>.</li>
-        <li>Added the required permissions to the <code>native-media/AndroidManifest.xml</code>
-        sample.
-        (Issue <a href="https://android-review.googlesource.com/#/c/106640/">106640</a>)</li>
-        <li>Added <code>clock_nanosleep</code> and <code>clock_settime</code> to API level 21. (Issue
-        <a href="http://b.android.com/77372">77372</a>)
-        <li>Removed the following symbols from all architectures:
-        <code>get_malloc_leak_info</code>, <code>free_malloc_leak_info</code>,
-        <code>__srget</code>, <code>__swbuf</code>, <code>__srefill</code>, <code>__swsetup</code>,
-        <code>__sdidinit</code>, <code>__sflags</code>, <code>__sfp</code>,
-        <code>__sinit</code>, <code>__smakebuf</code>, <code>__sflush</code>, <code>__sread</code>,
-        <code>__swrite</code>, <code>__sseek</code>, <code>__sclose</code>,
-        <code>_fwalk</code>, <code>__sglue</code>, <code>__get_thread</code>, <code>__wait4</code>,
-        <code>__futex_wake</code>, <code>__open</code>, <code>__get_tls</code>,
-        <code>__getdents64</code>, and <code>dlmalloc</code>.</li>
-        <li>Removed the following functions from the 64-bit architectures: <code>basename_r</code>,
-        <code>dirname_r</code>, <code>__isthreaded</code>, <code>_flush_cache</code> (mips64).</li>
-        <li>Removed the following function from the 32-bit architectures:
-        <code>__signalfd4</code>.</li>
-        <li>Changed the type of the third argument from <code>size_t</code> to <code>int</code> in
-        the following functions: <code>strtoll_l</code>, <code>strtoull_l</code>,
-        <code>wcstoll_l</code>, and <code>wcstoull_l</code>.</li>
-        <li>Restored the following functions to the 64-bit architecture: <code>arc4random</code>,
-        <code>arc4random_buf</code>, and <code>arc4random_uniform</code>.</li>
-        <li>Moved <code>cxa_*</code> and the <code>new</code> and <code>delete</code> operators back
-        to <code>libstdc++.so</code>. This change restores r9d behavior; previous versions of r10
-        contained dummy files.</li>
-
-        </ul>
-     <li>Restored MXU support in GCC 4.8 and 4.9 for mips. This support had been absent from
-     r10 and r10b because those versions of GCC had been compiled with binutils-2.24, which did
-     not support MXU. It now does.</li>
-     <li>Fixed <code>--toolchain=</code> in <code>make-standalone-toolchain.sh</code> so that it
-     now properly supports use of a suffix specifying a version of Clang.</li>
-     <li>Fixed the libc++/armeabi <code>strtod()</code> functions.</li>
-     <li>Made fixes to NDK documentation in <code>docs/</code>.</li>
-     </ul>
-     </dd>
-
-     <dt>Other changes:</dt>
-     <dd>
-       <ul>
-       <li>Enhanced <code>cpu-features</code> to detect ARMv8 support for the following
-       instruction sets: AES, CRC32, SHA2, SHA1, and 64-bit PMULL/PMULL2. (Issue
-       <a href="https://android-review.googlesource.com/#/c/106360/">106360</a>)</li>
-
-       <li>Modified ndk-build to use <code>*-gcc-ar</code>, which is available in GCC 4.8, GCC 4.9, and
-       Clang. Clang specifies it, instead of <code>*-ar</code>. This setting brings improved LTO
-       support.</li>
-
-       <li>Removed the <code>include-fixed/linux/a.out.h</code> and
-       <code>include-fixed/linux/compiler.h</code> headers from the GCC compiler.
-       (Issue <a href ="http://b.android.com/73728">73728</a>)</li>
-
-       <li>Fixed an issue related to <code>-flto</code> with GCC 4.8 on Mac OS X. The error message
-       read:</li>
-
-       <pre>
-.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
-Symbol not found: _environ
-</pre>
-
-       <li>Fixed a typo in <code>build-binary.mk.</code> (Issue
-       <a href="http://b.android.com/76992">76992</a>)</li>
-     </ul>
-     </dd>
-
-   <dt>Important known issues:</dt>
-     <dd>
-     <ul>
-     <li>Specifying -Os (<code>-fauto-profile</code>) in GCC4.9 may cause crashing.
-     (Issue <a href="http://b.android.com/77571">77571</a>)</li>
-     </ul>
-     </dd>
-
-   </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 10b</a> <em>(September 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
-   <dl>
-
-        <dt>Important notes:</dt>
-     <dd>
-     <ul>
-      <li>Because of the 512MB size restriction on downloadable packages, the following 32-bit items are not in the 32-bit NDK download packages. Instead, they reside in the 64-bit ones:</li>
-      <ul>
-      <li>Android-L headers</li>
-      <li>GCC 4.9</li>
-      </ul>
-     <li>Currently, the only Renderscript support provided by the NDK is for 32-bit Renderscript with Android 4.4 (API level 19). You cannot build HelloComputeNDK (the only Renderscript sample) with any other combination of Renderscript (32- or 64-bit) and Android version.</li>
-     <li>To compile native-codec, you must use a 64-bit NDK package, which is where all the Android-L headers are located. </li>
-     </ul>
-     </dd>
-
-
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-     <li>Fixed gdb 7.6 in GCC 4.8/4.9. (Issues <a href="http://b.android.com/74112">74112</a> and <a href="http://b.android.com/74371">74371</a>.)</li>
-     <li>Fixed GCC 4.8/4.9 for x86, so that they no longer enable <code>-msse4.2</code> and <code>-mpopcnt</code> by default. (Issue <a href="http://b.android.com/73843">73843</a>.)</li>
-     </ul>
-     </dd>
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-     <li>Removed <code>stdio.h</code> from the <code>include-fixed/</code> directories of all versions of GCC. (Issue <a href="http://b.android.com/73728">73728</a>.)</li>
-     <li>Removed duplicate header files from the Windows packages in the <code>platforms/android-L/arch-*/usr/include/linux/netfilter*/</code> directories. (Issue <a href="https://code.google.com/p/android/issues/detail?id=73704">73704</a>.)</li>
-     <li>Fixed a problem that prevented Clang from building HelloComputeNDK.</li>
-     <li>Fixed atexit. (Issue <a href="http://b.android.com/66595">66595</a>.)</li>
-     <li>Made various fixes to the docs in <code>docs/</code> and <code>sources/third_party/googletest/README.NDK</code>. (Issue <a href="http://b.android.com/74069">74069</a>.)</li>
-     <li>Made the following fixes to the Android-L headers:</li>
-     <ol>
-     <li>Added the following functions to <code>ctype.h</code> and <code>wchar.h</code>: <code>dn_expand()</code>, <code>grantpt()</code>, <code> inet_nsap_addr()</code>, <code>inet_nsap_ntoa()</code>, <code>insque()</code>, <code>nsdispatch()</code>, <code>posix_openpt()</code>, <code>__pthread_cleanup_pop()</code>, <code>__pthread_cleanup_push()</code>, <code>remque()</code>, <code>setfsgid()</code>, <code>setfsuid()</code>, <code>splice()</code>, <code>tee()</code>, <code>twalk()</code> (Issue <a href = "http://b.android.com/73719">73719</a>), and 42 <code>*_l()</code> functions.</li>
-
-    <li>Renamed <code>cmsg_nxthdr</code> to <code>__cmsg_nxthdr</code>.</li>
-
-    <li>Removed <code>__libc_malloc_dispatch</code>.</li>
-
-    <li>Changed the <code>ptrace()</code> prototype to <code>long ptrace(int, ...);</code>.</li>
-
-    <li>Removed <code>sha1.h</code>.</li>
-
-    <li>Extended <code>android_dlextinfo</code> in <code>android/dlext.h</code>.</li>
-
-    <li>Annotated <code>__NDK_FPABI__</code> for functions receiving or returning float- or double-type values in <code>stdlib.h</code>, <code>time.h</code>, <code>wchar.h</code>, and <code>complex.h</code>.</li>
-    </ol>
-     </ul>
-     </dd>
-
-     <dt>Other changes:</dt>
-     <dd>
-     <ul>
-        <li>Updated <code>mipsel-linux-android-4.9</code> and <code>mips64el-linux-android-4.9</code>, implementing a new multilib directory layout, and providing support for gdb-7.7</li>
-        <li>Enhanced <code>cpu-features</code> to detect more arm64 features.  (Change list <a href="https://android-review.googlesource.com/#/c/100339">100339</a>.)</li>
-     </dd>
-     </ul>
-
-   </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 10</a> <em>(July 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
-        <li>Added 3 new ABIs, all 64-bit: arm64-v8a, x86_64, mips64.</li> Note that:
-        <ul>
-           <li>GCC 4.9 is the default compiler for 64-bit ABIs. Clang is currently version 3.4.
-<code>NDK_TOOLCHAIN_VERSION=clang</code>
-      may not work for arm64-v8a and mips64.</li>
-           <li>Android-L is the first level with 64-bit support.  Note that this API
-level is a temporary one, and only for L-preview. An actual API level number will replace it at
-L-release.</li>
-           <li>This release includes now includes <code>all32</code> and <code>all64</code>
-settings for <code>APP_ABI</code>.
-              <ul>
-              <li><code>APP_ABI=all32</code> is equivalent to
-<code>APP_ABI=armeabi,armeabi-v7a,x86,mips</code>.</li>
-              <li><code>APP_ABI=all64</code> is equivalent to
-<code>APP_ABI=arm64-v8a,x86_64,mips64</code>.</li>
-              <li><code>APP_ABI=all</code> selects all ABIs.</li>
-              </ul>
-           <li>The new GNU libstdc++ in Android-L contains all <code>&lt;tr1/cmath&gt;</code>
-Before defining your own math function, check <code>_GLIBCXX_USE_C99_MATH_TR1</code> to see a
-function with that name already exists, in order to avoid "multiple definition" errors from the
-linker.</li>
-           <li>The cpu-features library has been updated for the ARMv8 kernel.  The existing
-cpu-features library may fail to detect the presence of NEON on the ARMv8 platform. Recompile your
-code with the new version.</li>
-        </ul>
-        <li>Added a new <code>platforms/android-L/</code> API directory. It includes:</li>
-        <ul>
-           <li>Updated Bionic headers, which had not changed from Android API levels 3
-(Cupcake) to 19 (KitKat). This new version, for level L, is to be synchronized with AOSP.</li>
-           <li>New media APIs and a native-codec sample.</li>
-           <li>An updated <code>Android.h</code> header for SLES/OpenSLES, enabling support for
-single-precision, floating-point audio format in AudioPlayer.</li>
-           <li>GLES 3.1 and AEP extensions to <code>libGLESv3.so.</code></li>
-           <li>GLES2 and GLES3 headers updated to the latest official Khronos versions.</li>
-        </ul>
-        <li>Added GCC 4.9 compilers to the 32-/64-bit ABIs.  GCC 4.9 is the default (only) compiler
-for 64-bit ABIs, as previously mentioned.  For 32-bit ABIs, you must explcitly enable GCC 4.9, as
-GCC 4.6 is still the default.</li>
-        <ul>
-           <li>For ndk-build, enable 32-bit, GCC 4.9 building either by adding
-<code>NDK_TOOLCHAIN_VERSION=4.9</code> to <code>Application.mk</code>, or exporting it as an
-environment variable from the command line.</li>
-           <li>For a standalone toolchain, use the <code>--toolchain=</code> option in the
-<code>make-standalone-toolchain.sh</code> script. For example: <code>--toolchain=arm-linux-androideabi-4.9.</code></li>
-        </ul>
-        <li>Upgraded GDB to version 7.6 in GCC 4.8/4.9 and x86*. Since GDB is still at version GDB-7.3.x in
-GCC 4.6 (the default for ARM and MIPS), you must set
-<code>NDK_TOOLCHAIN_VERSION=4.8</code> or <code>4.9</code> to enable ndk-gdb to select GDB 7.6.</li>
-        <li>Added the <code>-mssse3</code> build option to provide SSSE3 support, and made it the default for ABI x86
-(upgrading from SSE3). The image released by Google does not contain SSSE3 instructions.</li>
-        <li>Updated GCC 4.8 to 4.8.3.</li>
-        <li>Improved ARM libc++ EH support by switching from gabi++ to libc++abi. For details, see the "C++ Support" section of the documentation.
-  Note that:</li>
-        <ul>
-           <li>All tests except for locale now pass for Clang 3.4 and GCC 4.8. For more
-information, see the "C++ Support" section of the documentation.</li>
-           <li>The libc++ libraries for X86 and MIPS libc++ still use gabi++.</li>
-           <li>GCC 4.7 and later can now use &lt;atomic&gt;.</li>
-           <li>You must add <code>-fno-strict-aliasing</code> if you use <code> &lt;list&gt;</code>, because <code>__list_imp::_end</code>_ breaks
-      TBAA rules.  (Issue <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571">61571</a>.)</li>
-           <li>As of GCC 4.6, LIBCXX_FORCE_REBUILD:=true no longer rebuilds libc++. Rebuilding it
-requires the use of a different compiler. Note that Clang 3.3 is untested.</li>
-        </ul>
-        <li>mclinker is now version 2.7, and has aarch64 Linux support.</li>
-        <li>Added precompiled header support for headers specified by <code>LOCAL_PCH</code>.  (Issue <a href="http://b.android.com/25412">25412</a>).</li>
-      </dd>
-   <dl>
-
-
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Fixed libc++ so that it now compiles <code>std::feof</code>, etc. (Issue <a
-href="http://b.android.com/66668">66668</a>).</li>
-       <li>Fixed a Clang 3.3/3.4 atomic library call that caused crashes in some of the libc++
-tests for ABI armeabi.</li>
-       <li>Fixed Clang 3.4 crashes that were occurring on reading precompiled headers. (Issue <a
-href="http://b.android.com/66657">66657</a>).</li>
-       <li>Fixed the Clang 3.3/3.4 <code>-O3</code> assert on:</li>
-       <code>llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode*
-llvm::MDBuilder::createBranchWeights(llvm::ArrayRef<unsigned int>): Assertion Weights.size() >= 2
-&& "Need at least two branch weights!"</code> (Issue <a href="http://b.android.com/57381">57381</a>).
-       <li>Fixed the following Clang 3.3/3.4 crash:</li>
-       <code>Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file
-Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018</code>.
-(Issue <a href="http://b.android.com/66950">66950</a>).
-     </ul>
-     </dd>
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Fixed headers:</li>
-       <ul>
-          <li>Fixed 32-bit <code>ssize_t</code> to be <code>int</code> instead of <code>long
-int</code>.</li>
-          <li>Fixed <code>WCHAR_MIN</code> and <code>WCHAR_MAX</code> so that they they take
-appropriate signs according to the architecture they're running on:</li>
-          <ul>
-             <li>X86/MIPS: signed.
-             <li>ARM: unsigned.
-             <li>To force X86/MIPS to default to unsigned, use
-<code>-D__WCHAR_UNSIGNED__</code>.</li>
-             <li>To force <code>wchar_t</code> to be 16 bits, use <code>-fshort-wchar</code>.</li>
-          </ul>
-          <li>Removed non-existent symbols from 32-bit <code>libc.so</code>, and added <code>pread64</code>,
-<code>pwrite64</code>, <code>ftruncate64</code> for
-Android API level 12 and higher. (Issue <a href="http://b.android.com/69319">69319</a>). For more
-information, see the commit message accompanying AOSP change list
-     <a href="https://android-review.googlesource.com/#/c/94137">94137</a>.</li>
-       </ul>
-       <li>Fixed GCC warning about redefinition of <code>putchar</code>. Warning message reads:</li>
-       <code>include/stdio.h:236:5: warning: conflicts with previous declaration here
-[-Wattributes] int  putchar(int);</code> (Change list <a
-href="https://android-review.googlesource.com/#/c/91185">91185</a>).
-       <li>Fixed <code>make-standalone-toolchain.sh --stl=libc++</code> so that it:</li>
-       <ul>
-          <li>Copies <code>cxxabi.h</code>. (Issue <a
-href="http://b.android.com/68001">68001</a>).</li>
-          <li>Runs in directories other than the NDK install directory. (Issues <a
-href="http://b.android.com/67690">67690</a> and <a href="http://b.android.com/68647">68647</a>).</li>
-       </ul>
-       <li>Fixed GCC/Windows to quote arguments only when necessary for spawning processes in
-external programs. This change decreases the likelihood of exceeding the 32K length limit.</li>
-       <li>Fixed an issue that made it impossible to adjust the <code>APP_PLATFORM</code>
-environment variable.</li>
-       <li>Fixed the implementation of <code>IsSystemLibrary()</code> in crazy_linker so that it
-uses <code>strrchr()</code>
-  instead of <code>strchr()</code> to find the library path's true basename.</li>
-       <li>Fixed native-audio's inability to build in debug mode.</li>
-       <li>Fixed gdb's inability to print extreme floating-point numbers. (Issue <a
-href="http://b.android.com/69203">69203</a>).</li>
-       <li>Fixed Clang 3.4 inability to compile with <code>-Wl,-shared</code> (as opposed to
-<code>-shared</code>, which
-  had no compilation issues).  The problem was that Clang added <code>-pie</code> for Android
-targets if neither <code>-shared</code> nor <code>-static</code> existed. This behavior, which was
-incorrect, caused the linker to complain that <code>-shared</code> and <code>-pie</code> could not
-co-exist.</li>
-
-     </ul>
-     </dd>
-
-
-     <dt>Other changes:</dt>
-     <dd>
-     <ul>
-        <li>Added <code>arm_neon.h</code> to the x86 toolchain so that it now emulates ~47% of
-Neon. There is currently no support for 64-bit types. For more information, see the section on ARM
-Neon intrinsics support in the x86 documentation.</li>
-        <li>Ported ARM/GOT_PREL optimization (present in GCC 4.6 built from the GCC google branch) to
-ARM GCC 4.8/4.9.  This optimization sometimes reduces instruction count when accessing global
-variables.  As an example, see the build.sh script in
-<code>$NDK/tests/build/b14811006-GOT_PREL-optimization/</code>.</li>
-        <li>Added ARM version for STL gabi++, stlport, and libc++. They now have both it and Thumb
-mode.</li>
-        <li>It is now possible to call the make-standalone-toolchain.sh script with
-<code>--toolchain=x86_64-linux-android-4.9</code>, which is equivalent to
-<code>--toolchain=x86_64-4.9</code>.</li>
-     </dd>
-     </ul>
-   </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 9d</a> <em>(March 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
-        <li>Added support for the Clang 3.4 compiler. The
-<code>NDK_TOOLCHAIN_VERSION=clang</code> option now picks Clang 3.4. GCC 4.6 is
-still the default compiler.</li>
-        <li>Added <code>APP_ABI=armeabi-v7a-hard</code>, with
-additional multilib option <code>-mfloat-abi=hard</code>. These options are for
-use with ARM GCC 4.6/4.8 and Clang 3.3/3.4 (which use 4.8's assembler, linker,
-and libs). When using these options, note the following changes:</li>
-        <ul>
-           <li> When executing the <code>ndk-build</code> script, add the
-following options for armeabi-v7a target:
-<pre>TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
-TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard</pre>
-The built library is copied to <code>libs/armeabi-v7a</code>. For make to
-behave as expected, you cannot specify both <code>armeabi-v7a</code> and
-<code>armeabi-v7a-hard</code> as make targets (i.e., on the APP_ABI= line).
-Doing so causes one of them to be ignored. Note that <code>APP_ABI=all</code>
-is still equivalent to
-<code>armeabi armeabi-v7a x86 mips</code>.</li>
-           <li>The <code>make-standalone-toolchain.sh</code> script copies
-additional libaries under <code>/hard</code> directories.
-      Add the above <code>CFLAGS</code> and <code>LFLAGS</code> to your
-makefile to enable GCC or Clang to link with
-      libraries in <code>/hard</code>.</li>
-        </ul>
-        <li>Added the yasm assembler, as well as <code>LOCAL_ASMFLAGS</code>
-and <code>EXPORT_ASMFLAGS</code> flags for x86
-targets. The <code>ndk-build</code> script uses
-<code>prebuilts/*/bin/yasm*</code> to build <code>LOCAL_SRC_FILES</code> that
-have the <code>.asm</code> extension.</li>
-        <li>Updated MClinker to 2.6.0, which adds <code>-gc-sections</code>
-support.</li>
-        <li>Added experimental libc++ support (upstream r201101).  Use this new
-feature by following these steps:
-        <ul>
-           <li>Add <code>APP_STL := c++_static</code> or <code>APP_STL :=
-c++_shared</code> in <code>Application.mk</code>.
-      You may rebuild from source via <code>LIBCXX_FORCE_REBUILD :=
-true</code></li>
-           <li>Execute <code>make-standalone-toolchain.sh --stl=libc++</code>
-to create a standalone toolchain with libc++ headers/lib.</li>
-        </ul>
-        For more information, see
-<code>CPLUSPLUS-SUPPORT.html</code>.
-(Issue <a href="http://b.android.com/36496">36496</a>)</li>
-      </ul>
-      </dd>
-   <dl>
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Fixed an uncaught throw from an unexpected
-exception handler for GCC 4.6/4.8 ARM EABI. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59392">59392</a>)</li>
-       <li>Fixed GCC 4.8 so that it now correctly resolves partial
-specialization of a template with
-  a dependent, non-type template argument. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59052">59052</a>)</li>
-       <li>Added more modules to prebuilt python (Issue <a
-href="http://b.android.com/59902">59902</a>):
-               <ul>
-                 <li>Mac OS X: <code>zlib</code>, <code>bz2</code>,
-<code>_curses</code>, <code>_curses_panel</code>, <code>_hashlib</code>,
-<code>_ssl</code></li>
-                 <li>Linux: <code>zlib</code>, <code>nis</code>,
-<code>crypt</code>, <code>_curses</code>, and <code>_curses_panel</code></li>
-               </ul>
-       <li>Fixed the x86 and MIPS gdbserver
-<code>event_getmsg_helper</code>.</li>
-       <li>Fixed numerous issues in the RenderScript NDK toolchain, including
-issues with compatibility across older devices and C++ reflection.</li>
-<br>
-     </ul>
-     </dd>
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Header fixes:
-         <ul>
-           <li>Fixed a missing <code>#include &lt;sys/types.h&gt;</code> in
-<code>android/asset_manager.h</code> for Android API level 13 and higher.
-     (Issue <a href="http://b.android.com/64988">64988</a>)</li>
-           <li>Fixed a missing <code>#include <stdint.h></code> in
-<code>android/rect_manager.h</code> for Android API level 14 and higher.</li>
-           <li>Added <code>JNICALL</code> to <code>JNI_OnLoad</code> and
-<code>JNI_OnUnload</code> in <code>jni.h</code>. Note that <code>JNICALL</code>
- is defined as <code>__NDK_FPABI__</code> For more information, see
-<code>sys/cdefs.h</code>.</li>
-           <li>Updated the following headers so that they can be included
-without the need to
-manually include their dependencies (Issue <a
-href="http://b.android.com/64679">64679</a>):</li>
-<pre>
-android/tts.h
-EGL/eglext.h
-fts.h
-GLES/glext.h
-GLES2/gl2ext.h
-OMXAL/OpenMAXSL_Android.h
-SLES/OpenSLES_Android.h
-sys/prctl.h
-sys/utime.h
-</pre>
-           <li>Added <code>sys/cachectl.h</code> for all architectures. MIPS
-developers can now include this header instead of writing <code>#ifdef
-__mips__</code>.</li>
-           <li></code>Fixed <code>platforms/android-18/include/android/input.h
-</code> by adding <code>__NDK_FPABI__</code> to functions taking or returning
-float or double values.</li>
-           <li>Fixed MIPS <code>struct stat</code>, which was incorrectly set
-to its 64-bit counterpart for Android API level 12 and later. This wrong
-setting was a
-regression introduced in release r9c.</li>
-           <li>Defined <code>__PTHREAD_MUTEX_INIT_VALUE</code>,
-<code>__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE</code>,
-     and <code>__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE</code> for Android API
-level 9 and lower.</li>
-           <li>Added <code>scalbln</code>, <code>scalblnf</code>, and
-<code>scalblnl</code> to x86 <code>libm.so</code> for APIs 18 and later.</li>
-           <li>Fixed a typo in
-<code>sources/android/support/include/iconv.h</code>.
-     (Issue <a href="http://b.android.com/63806">63806</a>)</li>
-
-         </ul>
-       </li>
-       <li>Fixed gabi++ <code>std::unexpected()</code> to call
-<code>std::terminate()</code> so that
-  a user-defined <code>std::terminate()</code> handler has a chance to run.
-</li>
-       <li>Fixed gabi++ to catch <code>std::nullptr</code>.</li>
-       <li>Fixed samples Teapot and MoreTeapots:
-         <ul>
-      <li>Solved a problem with Tegra 2 and 3 chips by changing specular
-variables to use medium precision. Values for specular power can now be less
-than 1.0. </li>
-      <li>Changed the samples so that pressing the volume button restores
-immersive mode and invalidates
-<code>SYSTEM_UI_FLAG_IMMERSIVE_STICKY</code>. Screen rotation does not
-trigger <code>onSystemUiVisibilityChange</code>, and so does not restore
-immersive mode.</li>
-         </ul>
-        </li>
-        <li>Fixed the <code>ndk-build</code> script to add
-<code>-rpath-link=$SYSROOT/usr/lib</code> and
-<code>-rpath-link=$TARGET_OUT</code> in order to use <code>ld.bfd</code> to
-link executables. (Issue  <a href="http://b.android.com/64266">64266</a>)</li>
-        <li>Removed <code>-Bsymbolic</code> from all STL builds.</li>
-        <li>Fixed <code>ndk-gdb-py.cmd</code> by setting <code>SHELL</code> as
-an environment variable
-instead of passing it to
-  <code>python.exe</code>, which ignores the setting.
-  (Issue <a href="http://b.android.com/63054">63054</a>)</li>
-        <li>Fixed the <code>make-standalone-toolchain.sh</code> script so that
-the <code>--stl=stlport</code> option copies the gabi++ headers instead of
-symlinking them; the <code>cmd.exe</code> and MinGW shells do not understand
-symlinks created by cygwin.</li>
-     </ul>
-     </dd>
-
-     <dt>Other changes:</dt>
-     <dd>
-     <ul>
-        <li>Applied execution permissions to all <code>*cmd</code> scripts
-previously intended for use only in the <code>cmd.exe</code> shell, in case
-developers prefer to use <code>ndk-build.cmd</code> in cygwin instead of the
-recommended <code>ndk-build</code> script.</li>
-        <li>Improved the speed of the <code>make-standalone-toolchain.sh</code>
-script by moving instead of copying if the specified destination directory does
-not exist.</li>
-     </dd>
-     </ul>
-   </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
-   <a href="#" onclick="return toggleContent(this)"> <img
-     src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-   >Android NDK, Revision 9c</a> <em>(December 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
-<p>This is a bug-fix-only release.</p>
-   <dl>
-     <dt>Important bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Fixed a problem with GCC 4.8 ARM, in which the stack pointer is
-restored too early. This problem prevented the frame pointer from reliably
-accessing a variable in the stack frame. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854">58854</a>)</li>
-<li>Fixed a problem with GCC 4.8 libstdc++, in which a bug in
-std::nth_element was causing generation of code that produced a random
-segfault. (Issue <a
-href="https://code.google.com/p/android/issues/detail?id=62910">62910</a>)</li>
-           <li>Fixed GCC 4.8 ICE in cc1/cc1plus with
-<code>-fuse-ld=mcld</code>, so that the following error no longer occurs:
-<pre>cc1: internal compiler error: in common_handle_option, at
-opts.c:1774</pre></li>
-           <li>Fixed <code>-mhard-float</code> support for
-<code>__builtin</code> math functions. For ongoing information on fixes for
-<code>-mhard-float</code> with STL, please follow Issue <a
-href="http://b.android.com/61784">61784</a>.</li>
-     </ul>
-     </dd>
-
-     <dt>Other bug fixes:</dt>
-     <dd>
-     <ul>
-       <li>Header fixes:
-         <ul>
-           <li>Changed prototype of <code>poll</code> to <code>poll(struct
-pollfd *, nfds_t, int);</code> in <code>poll.h</code>.</li>
-           <li>Added <code>utimensat</code> to <code>libc.so</code> for Android
-API levels 12 and 19. These libraries are now included for all Android API
-levels 12 through 19.</li>
-<li>Introduced <code>futimens</code> into <code>libc.so</code>, for Android API
-level 19.</li>
-<li>Added missing <code>clock_settime()</code> and
-<code>clock_nanosleep()</code> to <code>time.h</code> for Android API level 8
-and higher.</li>
-<li>Added <code>CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE,
-CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,</code> and
-<code>CLOCK_BOOTTIME_ALARM</code> in <code>time.h.</code></li>
-<li>Removed obsolete <code>CLOCK_REALTIME_HR</code> and
-<code>CLOCK_MONOTONIC_HR.</code></li>
-         </ul>
-       </li>
-       <li>In samples Teapot, MoreTeapots, and
-<code>source/android/ndk_helper</code>:
-         <ul>
-<li>Changed them so that they now use a hard-float abi for armeabi-v7a.</li>
-<li>Updated them to use immersive mode on Android API level 19 and
-higher.</li>
-<li>Fixed a problem with <code>Check_ReleaseStringUTFChars</code> in
-<code>/system/lib/libdvm.so</code> that was causing crashes on x86 devices.</li>
-         </ul>
-        </li>
-<li>Fixed <code>ndk-build</code> fails that happen in cygwin when the NDK
-package is
-referenced via symlink.</li>
-<li>Fixed <code>ndk-build.cmd</code> fails that happen in windows
-<code>cmd.exe</code> when
-<code>LOCAL_SRC_FILES</code> contains absolute paths. (Issue <a
-href="https://android-review.googlesource.com/#/c/69992">69992</a>)</li>
-<li>Fixed the <code>ndk-stack</code> script to proceed even when it can't parse
-a frame due to inability to find a routine, filename, or line number. In any of
-these cases, it prints <code>??</code>.</li>
-<li>Fixed the <code>ndk-stack</code> stack for windows-x64_64 targets so that
-it no longer erroneously matches a frame line with a line in the
-<code>stack:</code> section that doesn't contain <code>pc</code>,
-<code>eip</code>, or <code>ip</code>. For example:
-<pre>I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
-/system/lib/libc.so</pre></li>
-<li>Fixed gabi++ so that it:
-     <ul>
-         <li>Does not use malloc() to allocate C++ thread-local
-  objects.</li>
-         <li>Avoids deadlocks in gabi++ in cases where libc.debug.malloc is
-non-zero in userdebug/eng Android platform builds.</li>
-     </ul>
-     </ul>
-     </dd>
-
-     <dt>Other changes:</dt>
-     <dd>
-     <ul>
-       <li>Added <code>LOCAL_EXPORT_LDFLAGS</code>.</li>
-<li>Introduced the <code>NDK_PROJECT_PATH=null</code> setting for use in an
-integrated build system where options are explicitly passed to
-<code>ndk-build</code>. With this setting, <code>ndk-build</code> makes no
-attempt to look for <code>NDK_PROJECT_PATH.</code> This setting also prevents
-variables from deriving default settings from NDK_PROJECT_PATH. As a result,
-the following variables must now be explicitly specified (with their default
-values if such exist): <code>NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT,
-NDK_DEBUG</code> (optional, default to 0), and other <code>APP_*</code>'s
-contained in <code>Application.mk</code>.</li>
-<li><code>APP_ABI</code> can now be enumerated in a comma-delimited list. For
-example:
-<pre>APP_ABI := "armeabi,armeabi-v7a"</pre></li>
-<li>Provided the ability to rebuild all of STL with debugging info in an
-optional, separate package called
-<code>android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip</code>, using the
-<code>-g</code> option. This option
-helps the <code>ndk-stack</code> script provide better a stack dump across STL.
-This change should not affect the code/size of the final, stripped file.</li>
-<li>Enhanced <code>hello-jni</code> samples to report <code>APP_ABI</code> at
-compilation.</li>
-<li>Used the <code>ar</code> tool in Deterministic mode (option
-<code>-D</code>) to build static libraries.  (Issue <a
-href="http://b.android.com/60705">60705</a>)</li>
-     </ul>
-     </dd>
-
-   </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
-  <p>
-    <a href="#" onclick="return toggleContent(this)"> <img
-      src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-    >Android NDK, Revision 9b</a> <em>(October 2013)</em>
-  </p>
-  <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-      <ul>
-        <li>Updated {@code include/android/*h} and {@code math.h} for all Android API levels up to
-          18, including the addition of levels 13, 15, 16 and 17.
-          For information on added APIs, see commit messages for Changes
-          <a href="https://android-review.googlesource.com/68012">68012</a> and
-          <a href="https://android-review.googlesource.com/68014">68014</a>.
-          (Issues <a href="http://b.android.com/47150">47150</a>,
-           <a href="http://b.android.com/58528">58528</a>, and
-           <a href="http://b.android.com/38423">38423</a>)</li>
-        <li>Added support for Android API level 19, including Renderscript binding.</li>
-        <li>Added support for <code>-mhard-float</code> in the existing armeabi-v7a ABI. For more
-          information and current restrictions on Clang, see
-          {@code tests/device/hard-float/jni/Android.mk}.</li>
-        <li>Migrated from GNU Compiler Collection (GCC) 4.8 to 4.8.2, and added diagnostic color
-          support. To enable diagnostic colors, set <code>-fdiagnostics-color=auto</code>,
-          <code>-fdiagnostics-color=always,</code> or export {@code GCC_COLORS} as shown below:
-<pre>
-GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
-</pre>
-          For more information, see
-          <a href="http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html">GCC
-          Language Independent Options</a>.
-        </li>
-        <li>Added two new samples to demonstrate OpenGL ES 3.0 features: Teapot and MoreTeapots.
-          These samples run on devices with Android 4.1 (API level 16) and higher.</li>
-        <li>Deprecated GCC 4.7 and Clang 3.2 support, which will be removed in the next
-          release.</li>
-      </ul>
-      </dd>
-
-      <dt>Important bug fixes:</dt>
-      <dd>
-      <ul>
-        <li>Fixed problem with ARM GCC 4.6 {@code thumb2} failing to generate 16-bit relative jump
-          tables. (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48328">GCC Issue</a>)</li>
-        <li>Fixed GCC 4.8 internal compiler error (ICE) on
-          {@code g++.dg/cpp0x/lambda/lambda-defarg3.C}.
-          (<a href="https://android-review.googlesource.com/62770">Change 62770</a>,
-          <a href="http://gcc.gnu.org/ml/gcc/2013-07/msg00424.html">GCC Issue</a>)</li>
-        <li>Fixed a problem with Windows 32-bit {@code *-gdb.exe} executables failing to launch.
-          (<a href="http://b.android.com/58975">Issue 58975</a>)</li>
-        <li>Fixed GCC 4.8 ICE when building bullet library. The error message is as follows:
-          <pre>internal compiler error: verify_flow_info failed</pre>
-          (<a href="http://b.android.com/58916">Issue 58916</a>,
-           <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58165">GCC Issue</a>)</li>
-        <li>Modified GDB/ARM build to skip {@code ARM.exidx} data for unwinding in prologue code and
-          added a command ({@code set arm exidx-unwinding}) to control exidx-based stack unwinding.
-          (<a href="http://b.android.com/55826">Issue 55826</a>)</li>
-        <li>Fixed Clang 3.3 MIPS compiler problem where HI and LO registers are incorrectly
-          reused.</li>
-        <li>Fixed issue with MIPS 4.7 ICE in {@code dbx_reg_number}. The error message is as
-follows:
-<pre>
-external/icu4c/i18n/decimfmt.cpp:1322:1:
-internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
-</pre>
-          (<a href="http://gcc.gnu.org/ml/gcc-patches/2012-12/msg00830.html">GCC Patch</a>)
-
-        </li>
-
-      </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-      <dd>
-      <ul>
-        <li>Header fixes
-          <ul>
-            <li>Fixed the ARM {@code WCHAR_MIN} and {@code WCHAR_MAX} to be unsigned according to
-              spec (the X86/MIPS versions are signed). Define {@code _WCHAR_IS_ALWAYS_SIGNED} to
-              restore old behavior. (<a href="http://b.android.com/57749">Issue 57749</a>)</li>
-            <li>Fixed {@code include/netinet/tcp.h} to contain {@code TCP_INFO} state enum.
-              (<a href="http://b.android.com/38881">Issue 38881</a>)</li>
-            <li>Fixed the {@code cdefs_elh.h} macro {@code _C_LABEL_STRING} to stop generating
-               warnings in the GCC 4.8 toolchain when using c++11 mode.
-              (<a href="http://b.android.com/58135">Issue 58135</a>,
-               <a href="http://b.android.com/58652">Issue 58652</a>)</li>
-            <li>Removed non-existent functions {@code imaxabs} and {@code imaxdiv} from header
-              {@code inttypes.h}.</li>
-            <li>Fixed issue with {@code pthread_exit()} return values and {@code pthread_self()}.
-                 (<a href="http://b.android.com/60686">Issue 60686</a>)</li>
-            <li>Added missing {@code mkdtemp()} function, which already exists in {@code bionic}
-              header {@code stdlib.h}.</li>
-          </ul>
-        </li>
-        <li>Fixed problem building {@code samples/gles3jni} with Clang on Android API level 11.</li>
-        <li>Fixed MCLinker to allow multiple occurrences of the following options:
-          {@code -gc-sections} and {@code --eh-frame-hdr}.</li>
-        <li>Fixed MCLinker to accept the {@code --no-warn-mismatch} option.</li>
-        <li>Modified {@code cpu-features} option to not assume all VFPv4 devices support IDIV.
-          Now this option only adds IDIV to white-listed devices, including Nexus 4.
-          (<a href="http://b.android.com/57637">Issue 57637</a>)</li>
-        <li>Fixed problem with {@code android_native_app_glue.c} erroneously logging errors on event
-          predispatch operations.</li>
-        <li>Fixed all operations on {@code gabi++} terminate and unexpected_handler to be
-          thread-safe.</li>
-        <li>Fixed several issues with Clang <code>-integrated-as</code> option so it can pass
-          tests for {@code ssax-instructions} and {@code fenv}.</li>
-        <li>Fixed GCC 4.6/4.7/4.8 compiler to pass the linker option {@code --eh-frame-hdr} even
-          for static executables. For more information, see the
-          <a href="http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00969.html">GCC patch</a>.</li>
-        <li>Fixed extra apostrophe in <code>CPU-ARCH-ABIS.html</code>. For more information, see
-          <code>NDK-DEPENDS.html</code>. (<a href="http://b.android.com/60142">Issue 60142</a>)</li>
-        <li>Fixed extra quotes in ndk-build output on Windows.
-          (<a href="http://b.android.com/60649">Issue 60649</a>)</li>
-        <li>Fixed Clang 3.3 to compile ARM's built-in, atomic operations such as
-          {@code __atomic_fetch_add}, {@code __atomic_fetch_sub}, and {@code __atomic_fetch_or}.
-          </li>
-        <li>Fixed Clang 3.3 ICE with customized {@code vfprintf}.
-          (<a href="http://llvm.org/bugs/show_bug.cgi?id=16344">Clang issue</a>)
-        </li>
-      </ul>
-      </dd>
-
-      <dt>Other changes:</dt>
-      <dd>
-      <ul>
-        <li>Enabled OpenMP for all GCC builds. To use this feature, add the following flags to your
-          build settings:
-<pre>
-LOCAL_CFLAGS += -fopenmp
-LOCAL_LDFLAGS += -fopenmp
-</pre>
-          For code examples, see {@code tests/device/test-openmp}</li>
-        <li>Reduced the size of {@code ld.mcld} significantly (1.5MB vs. {@code ld.bfd} 3.5MB and
-          {@code ld.gold} 7.5MB), resulting in a speed improvement of approximately 20%.</li>
-        <li>Added <code>LOCAL_CONLYFLAGS</code> and <code>APP_CONLYFLAGS</code> to specify
-          options applicable to C only but not C++. The existing <code>LOCAL_CFLAGS</code>
-          and <code>APP_CFLAGS</code> are also used for C++ compilation (to save trouble of
-          specifying most options twice), so options such as <code>-std=gnu99</code> may fail in
-          g++ builds with a warning and clang++ builds with an error.</li>
-        <li>Added {@code gabi++} array helper functions.</li>
-        <li>Modified GCC builds so that all {@code libgcc.a} files are built with
-          <code>-funwind-tables</code> to allow the stack to be unwound past previously blocked
-          points, such as <code>__aeabi_idiv0</code>.</li>
-        <li>Added Ingenic MXU support in MIPS GCC4.6/4.7/4.8 with new <code>-mmxu</code>
-option.</li>
-        <li>Extended MIPS GCC4.6/4.7/4.8 <code>-mldc1-sdc1</code> to control ldxc1/sdxc1 too</li>
-        <li>Added crazy linker. For more information, see
-          {@code sources/android/crazy_linker/README.TXT}.</li>
-        <li>Fixed {@code bitmap-plasma} to draw to full screen rather than a 200x200 pixel
-area.</li>
-        <li>Reduced linux and darwin toolchain sizes by 25% by creating symlinks to identical files.
-          </li>
-      </ul>
-      </dd>
-
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p>
-    <a href="#" onclick="return toggleContent(this)"> <img
-      src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
-    >Android NDK, Revision 9</a> <em>(July 2013)</em>
-  </p>
-  <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-        <ul>
-          <li>Added support for Android 4.3 (API level 18). For more information, see
-            {@code STABLE-APIS.html} and new code examples in {@code samples/gles3jni/README}.
-          <li>Added headers and libraries for OpenGL ES 3.0, which is supported by Android 4.3
-            (API level 18) and higher.</li>
-          <li>Added GNU Compiler Collection (GCC) 4.8 compiler to the NDK. Since GCC 4.6 is still
-            the default, you must explicitly enable this option:
-            <ul>
-              <li>For {@code ndk-build} builds, export {@code NDK_TOOLCHAIN_VERSION=4.8} or
-                add it in {@code Application.mk}.</li>
-              <li>For standalone builds, use the {@code --toolchain=} option in
-                {@code make-standalone-toolchain.sh}, for example:<br>
-                {@code --toolchain=arm-linux-androideabi-4.8}</li>
-            </ul>
-            <p class="note"><strong>Note:</strong>
-            The {@code -Wunused-local-typedefs} option is enabled by {@code -Wall}. Be
-            sure to add {@code __attribute__((unused))} if you use compile-time asserts like
-            {@code sources/cxx-stl/stlport/stlport/stl/config/features.h}, line #311. For more
-            information, see
-            <a href="https://android-review.googlesource.com/#/c/55460">Change 55460</a></p>
-            <p class="note"><strong>Note:</strong>
-            In the GCC 4.7 release and later, ARM compilers generate unaligned access code by
-            default for ARMv6 and higher build targets. You may need to add the
-            {@code -mno-unaligned-access} build option when building for kernels that do not support
-            this feature.</p>
-          </li>
-          <li>Added Clang 3.3 support. The {@code NDK_TOOLCHAIN_VERSION=clang} build option
-            now picks Clang 3.3 by default.
-            <p class="note"><strong>Note:</strong>
-             Both GCC 4.4.3 and Clang 3.1 are deprecated, and will be removed from the next NDK
-             release.</p></li>
-          <li>Updated GNU Project Debugger (GDB) to support python 2.7.5.</li>
-          <li>Added MCLinker to support Windows hosts. Since {@code ld.gold}
-            is the default where available, you must add {@code -fuse-ld=mcld} in
-            {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} to enable MCLinker.</li>
-          <li>Added {@code ndk-depends} tool which prints ELF library dependencies.
-            For more information, see {@code NDK-DEPENDS.html}.
-            (<a href="http://b.android.com/53486">Issue 53486</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Important bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>Fixed potential event handling issue in {@code android_native_app_glue}.
-            (<a href="http://b.android.com/41755">Issue 41755</a>)</li>
-          <li>Fixed ARM/GCC-4.7 build to generate sufficient alignment for NEON load and store
-            instructions VST and VLD.
-            (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271">GCC Issue 57271</a>)</li>
-          <li>Fixed a GCC 4.4.3/4.6/4.7 internal compiler error (ICE) for a constant negative index
-            value on a string literal.
-            (<a href="http://b.android.com/54623">Issue 54623</a>)</li>
-          <li>Fixed GCC 4.7 segmentation fault for constant initialization with an object address.
-            (<a href="http://b.android.com/56508">Issue 56508</a>)</li>
-          <li>Fixed GCC 4.6 ARM segmentation fault for <code>-O</code> values when using Boost
-            1.52.0. (<a href="http://b.android.com/42891">Issue 42891</a>)
-          <li>Fixed {@code libc.so} and {@code libc.a} to support the {@code wait4()} function.
-            (<a href="http://b.android.com/19854">Issue 19854</a>)</li>
-          <li>Updated the x86 libc.so and libc.a files to include the {@code clone()}
-            function.</li>
-          <li>Fixed {@code LOCAL_SHORT_COMMANDS} bug where the {@code linker.list} file is
-            empty or not used.</li>
-          <li>Fixed GCC MIPS build on Mac OS to use CFI directives, without which
-            {@code ld.mcld --eh-frame-hdr} fails frequently.</li>
-          <li>Fixed Clang 3.2 X86/MIPS internal compiler error in {@code llvm/lib/VMCore/Value.cpp}.
-            (<a href="https://android-review.googlesource.com/#/c/59021">Change 59021</a>)</li>
-          <li>Fixed GCC 4.7 64-bit Windows assembler crash. (Error: {@code out of memory allocating
-            4294967280 bytes}).</li>
-          <li>Updated {@code ndk-gdb} script so that the {@code --start} or {@code --launch} actions
-            now wait for the GNU Debug Server, so that it can more reliably hit breakpoints set
-            early in the execution path (such as breakpoints in JNI code).
-            (<a href="http://b.android.com/41278">Issue 41278</a>)
-            <p class="note"><strong>Note:</strong>
-              This feature requires jdb and produces warning about pending breakpoints.
-              Specify the {@code --nowait} option to restore previous behavior.
-            </p>
-          </li>
-          <li>Fixed GDB crash when library list is empty.</li>
-          <li>Fixed GDB crash when using a {@code stepi} command past a {@code bx pc} or
-            {@code blx pc} Thumb instruction.
-            (<a href="http://b.android.com/56962">Issue 56962</a>,
-             <a href="http://b.android.com/36149">Issue 36149</a>)</li>
-          <li>Fixed MIPS {@code gdbserver} to look for {@code DT_MIPS_RLD_MAP} instead of
-            {@code DT_DEBUG}. (<a href="http://b.android.com/56586">Issue 56586</a>)</li>
-          <li>Fixed a circular dependency in the ndk-build script, for example: If A-&gt;B and
-            B-&gt;B, then B was dropped from build.
-            (<a href="http://b.android.com/56690">Issue 56690</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>Fixed the {@code ndk-build} script to enable you to specify a version of Clang as a
-            command line option (e.g., {@code NDK_TOOLCHAIN_VERSION=clang3.2}). Previously, only
-            specifying the version as an environment variable worked.</li>
-          <li>Fixed gabi++ size of {@code _Unwind_Exception} to be 24 for MIPS build targets when
-            using the Clang compiler.
-            (<a href="https://android-review.googlesource.com/#/c/54141">Change 54141</a>)</li>
-          <li>Fixed the {@code ndk-build} script to ensure that built libraries are actually
-            removed from projects that include prebuilt static libraries when using the
-            {@code ndk-build clean} command.
-            (<a href="https://android-review.googlesource.com/#/c/54461">Change 54461</a>,
-             <a href="https://android-review.googlesource.com/#/c/54480">Change 54480</a>)</li>
-          <li>Modified the {@code NDK_ANALYZE=1} option to be less verbose.</li>
-          <li>Fixed {@code gnu-libstdc++/Android.mk} to include a {@code backward/} path for builds
-            that use backward compability.
-            (<a href="http://b.android.com/53404">Issue 53404</a>)</li>
-          <li>Fixed a problem where {@code stlport new} sometimes returned random values.</li>
-          <li>Fixed {@code ndk-gdb} to match the order of {@code CPU_ABIS}, not {@code APP_ABIS}.
-            (<a href="http://b.android.com/54033">Issue 54033</a>)</li>
-          <li>Fixed a problem where the NDK 64-bit build on MacOSX choses the wrong path for
-            compiler.
-            (<a href="http://b.android.com/53769">Issue 53769</a>)</li>
-          <li>Fixed build scripts to detect 64-bit Windows Vista.
-            (<a href="http://b.android.com/54485">Issue 54485</a>)</li>
-          <li>Fixed x86 {@code ntonl/swap32} error: {@code invalid 'asm': operand number
-            out of range}.
-            (<a href="http://b.android.com/54465">Issue 54465</a>,
-             <a href="https://android-review.googlesource.com/#/c/57242">Change 57242</a>)</li>
-          <li>Fixed {@code ld.gold} to merge string literals.</li>
-          <li>Fixed {@code ld.gold} to handle large symbol alignment.</li>
-          <li>Updated {@code ld.gold} to enable the {@code --sort-section=name} option.</li>
-          <li>Fixed GCC 4.4.3/4.6/4.7 to suppress the {@code -export-dynamic} option for
-            statically linked programs. GCC no longer adds an {@code .interp} section for statically
-            linked programs.</li>
-          <li>Fixed GCC 4.4.3 {@code stlport} compilation error about inconsistent {@code typedef}
-            of {@code _Unwind_Control_Block}.
-            (<a href="http://b.android.com/54426">Issue 54426</a>)</li>
-          <li>Fixed {@code awk} scripts to handle {@code AndroidManifest.xml} files created on
-            Windows which may contain trailing {@code \r} characters and cause build errors.
-            (<a href="http://b.android.com/42548">Issue 42548</a>)</li>
-          <li>Fixed {@code make-standalone-toolchain.sh} to probe the {@code prebuilts/}
-            directory to detect if the host is 32 bit or 64 bit.</li>
-          <li>Fixed the Clang 3.2 {@code -integrated-as} option.</li>
-          <li>Fixed the Clang 3.2 ARM EHABI compact model {@code pr1} and {@code pr2} handler data.
-            </li>
-          <li>Added Clang {@code -mllvm -arm-enable-ehabi} option to fix the following Clang error:
-            <pre>clang: for the -arm-enable-ehabi option: may only occur zero or one times!</pre>
-            </li>
-          <li>Fixed build failure when there is no {@code uses-sdk} element in application
-            manifest. (<a href="http://b.android.com/57015">Issue 57015</a>)</li>
-        </ul>
-
-      </dd>
-      <dt>Other changes:</dt>
-      <dd>
-        <ul>
-          <li>Header Fixes
-            <ul>
-              <li>Modified headers to make {@code __set_errno} an inlined function, since
-                {@code __set_errno} in {@code errno.h} is deprecated, and {@code libc.so} no longer
-                exports it.</li>
-              <li>Modified {@code elf.h} to include {@code stdint.h}.
-                (<a href="http://b.android.com/55443">Issue 55443</a>)</li>
-              <li>Fixed {@code sys/un.h} to be included independently of other headers.
-                (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
-              <li>Fixed all of the {@code MotionEvent_getHistorical} API family to take the
-                {@code const AInputEvent* motion_event}.
-                (<a href="http://b.android.com/55873">Issue 55873</a>)</li>
-              <li>Fixed {@code malloc_usable_size} to take {@code const void*}.
-                (<a href="http://b.android.com/55725">Issue 55725</a>)</li>
-              <li>Fixed stdint.h to be more compatible with C99.
-                (<a href="https://android-review.googlesource.com/#/c/46821">Change 46821</a>)</li>
-              <li>Modified {@code wchar.h} to not redefine {@code WCHAR_MAX} and
-                {@code WCHAR_MIN}</li>
-              <li>Fixed {@code &lt;inttypes.h&gt;} declaration for pointer-related {@code PRI} and
-                {@code SCN} macros. (<a href="http://b.android.com/57218">Issue 57218</a>)</li>
-              <li>Changed the {@code sys/cdefs.h} header so that {@code __WCHAR_TYPE__} is 32-bit
-                for API levels less than 9, which means that {@code wchat_t} is 32-bit for all
-                API levels. To restore the previous behavior, define the {@code _WCHAR_IS_8BIT}
-                boolean variable. (<a href="http://b.android.com/57267">Issue 57267</a>)</li>
-            </ul>
-          </li>
-          <li>Added more formatting in NDK {@code docs/} and miscellaneous documentation fixes.
-            </li>
-          <li>Added support for a thin archive technique when building static libraries.
-            (<a href="http://b.android.com/40303">Issue 40303</a>)</li>
-          <li>Updated script {@code make-standalone-toolchain.sh} to support the {@code stlport}
-            library in addition to {@code gnustl}, when you specify the option
-            {@code --stl=stlport}. For more information, see {@code STANDALONE-TOOLCHAIN.html}.</li>
-          <li>Updated the {@code make-standalone-toolchain.sh} script so that the
-            {@code --llvm-version=} option creates the {@code $TOOLCHAIN_PREFIX-clang} and
-            {@code $TOOLCHAIN_PREFIX-clang++} scripts in addition to {@code clang} and
-            {@code clang++}, to avoid using the host's clang and clang++ definitions by accident.
-            </li>
-          <li>Added two flags to re-enable two optimizations in upstream Clang but disabled in
-              NDK for better compatibility with code compiled by GCC:
-            <ul>
-              <li>Added a {@code -fcxx-missing-return-semantics} flag to re-enable <em>missing
-return
-                semantics</em> in Clang 3.2+. Normally, all paths should terminate with a return
-                statement for a value-returning function. If this is not the case, clang inserts
-                an undefined instruction (or trap in debug mode) at the path without a return
-                statement. If you are sure your code is correct, use this flag to allow the
-                optimizer to take advantage of the undefined behavior. If you are not sure, do not
-                use this flag. The caller may still receive a random incorrect value, but the
-                optimizer will not exploit it and make your code harder to debug.</li>
-              <li>Added a {@code -fglobal-ctor-const-promotion} flag to re-enable
-                promoting global variables with static constructor to be constants. With this flag,
-                the global variable optimization pass of LLVM tries to evaluate the global
-                variables with static constructors and promote them to global constants. Although
-                this optimization is correct, it may cause some incompatability with code compiled
-                by GCC. For example, code may do {@code const_cast} to cast the constant to mutable
-                and modify it. In GCC, the variable is in read-write and the code is run by
-                accident. In Clang, the const variable is in read-only memory and may cause your
-                application to crash.</li>
-            </ul>
-          </li>
-          <li>Added {@code -mldc1-sdc1} to the MIPS GCC and Clang compilers. By default, compilers
-            align 8-byte objects properly and emit the {@code ldc1} and {@code sdc1} instructions
-            to move them around. If your app uses a custom allocator that does not always align
-            with a new object's 8-byte boundary in the same way as the default allocator, your app
-            may crash due to {@code ldc1} and {@code sdc1} operations on unaligned memory. In this
-            case, use the {@code -mno-ldc1-sdc1} flag to workaround the problem.</li>
-          <li>Downgraded the event severity from warning to info if {@code APP_PLATFORM_LEVEL} is
-            larger than {@code APP_MIN_PLATFORM_LEVEL}. The {@code APP_PLATFORM_LEVEL} may be lower
-            than {@code APP_PLATFORM} in {@code jni/Application.mk} because the NDK does not have
-            headers for all levels. In this case, the actual level is shifted downwards. The
-            {@code APP_MIN_PLATFORM_LEVEL} is specified by the {@code android:minSdkVersion} in
-            your application's manifest.
-            (<a href="http://b.android.com/39752">Issue 39752</a>)</li>
-          <li>Added the {@code android_getCpuIdArm()} and {@code android_setCpuArm()} methods to
-            {@code cpu-features.c}. This addition enables easier retrieval of the ARM CPUID
-            information. (<a href="http://b.android.com/53689">Issue 53689</a>)</li>
-          <li>Modified {@code ndk-build} to use GCC 4.7's {@code as/ld} for Clang compiling.
-            <p class="note"><strong>Note:</strong>
-              In GCC 4.7, {@code monotonic_clock} and {@code is_monotonic} have been renamed to
-              {@code steady_clock} and {@code is_steady}, respectively.</p></li>
-          <li>Added the following new warnings to the {@code ndk-build} script:
-            <ul>
-              <li>Added warnings if {@code LOCAL_LDLIBS/LDFLAGS} are used in static library
-                modules.</li>
-              <li>Added a warning if a configuration has no module to build.</li>
-              <li>Added a warning for non-system libraries being used in
-                {@code LOCAL_LDLIBS/LDFLAGS} of a shared library or executable modules.</li>
-            </ul>
-          </li>
-          <li>Updated build scripts, so that if {@code APP_MODULES} is not defined and only static
-            libraries are listed in {@code Android.mk}, the script force-builds all of them.
-            (<a href="http://b.android.com/53502">Issue 53502</a>)</li>
-          <li>Updated {@code ndk-build} to support absolute paths in {@code LOCAL_SRC_FILES}.</li>
-          <li>Removed the {@code *-gdbtui} executables, which are duplicates of the {@code *-gdb}
-            executables with the {@code -tui} option enabled.</li>
-          <li>Updated the build scripts to warn you when the Edison Design Group (EDG) compiler
-            front-end turns {@code _STLP_HAS_INCLUDE_NEXT} back on.
-            (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
-          <li>Added the environment variable {@code NDK_LIBS_OUT} to allow overriding of the
-            path for {@code libraries/gdbserver} from the default {@code $PROJECT/libs}.
-            For more information, see {@code OVERVIEW.html}.</li>
-          <li>Changed ndk-build script defaults to compile code with format string protection
-            {@code -Wformat -Werror=format-security}. You may set
-            {@code LOCAL_DISABLE_FORMAT_STRING_CHECKS=true} to disable it.
-            For more information, see {@code ANDROID-MK.html}</li>
-          <li>Added STL pretty-print support in {@code ndk-gdb-py}. For more information, see
-            {@code NDK-GDB.html}.</li>
-          <li>Added tests based on the googletest frameworks.</li>
-          <li>Added a notification to the toolchain build script that warns you if the current shell
-            is not {@code bash}.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 8e</a> <em>(March 2013)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-        <ul>
-          <li>Added 64-bit host toolchain set (package name suffix {@code *-x86_64.*}). For more
-            information, see {@code CHANGES.HTML} and {@code NDK-BUILD.html}.</li>
-          <li>Added Clang 3.2 compiler. GCC 4.6 is still the default. For information on using the
-            Clang compiler, see {@code CHANGES.HTML}.</li>
-          <li>Added static code analyzer for Linux/MacOSX hosts. For information on using the
-            analyzer, see {@code CHANGES.HTML}.</li>
-          <li>Added MCLinker for Linux/MacOSX hosts as an experimental feature. The {@code ld.gold}
-            linker is the default where available, so you must explicitly enable it. For more
-            information, see {@code CHANGES.HTML}.</li>
-          <li>Updated ndk-build to use topological sort for module dependencies, which means the
-            build automatically sorts out the order of libraries specified in
-            {@code LOCAL_STATIC_LIBRARIES}, {@code LOCAL_WHOLE_STATIC_LIBRARIES} and
-            {@code LOCAL_SHARED_LIBRARIES}. For more information, see {@code CHANGES.HTML}.
-            (<a href="http://b.android.com/39378">Issue 39378</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Important bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>Fixed build script to build all toolchains in {@code -O2}. Toolchains in previous
-            releases were incorrectly built without optimization.</li>
-          <li>Fixed build script which unconditionally builds Clang/llvm for MacOSX in 64-bit.</li>
-          <li>Fixed GCC 4.6/4.7 internal compiler error:
-            {@code gen_thumb_movhi_clobber at config/arm/arm.md:5832}.
-            (<a href="http://b.android.com/52732">Issue 52732</a>)</li>
-          <li>Fixed build problem where GCC/ARM 4.6/4.7 fails to link code using 64-bit atomic
-            built-in functions.
-            (<a href="http://b.android.com/41297">Issue 41297</a>)</li>
-          <li>Fixed GCC 4.7 linker DIV usage mismatch errors.
-          (<a href="http://sourceware.org/ml/binutils/2012-12/msg00202.html">Sourceware Issue</a>)
-          <li>Fixed GCC 4.7 internal compiler error {@code build_data_member_initialization, at
-            cp/semantics.c:5790}.</li>
-          <li>Fixed GCC 4.7 internal compiler error {@code redirect_eh_edge_1, at tree-eh.c:2214}.
-            (<a href="http://b.android.com/52909">Issue 52909</a>)</li>
-          <li>Fixed a GCC 4.7 segfault.
-            (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55245">GCC Issue</a>)</li>
-          <li>Fixed {@code &lt;chrono&gt;} clock resolution and enabled {@code steady_clock}.
-            (<a href="http://b.android.com/39680">Issue 39680</a>)</li>
-          <li>Fixed toolchain to enable {@code _GLIBCXX_HAS_GTHREADS} for GCC 4.7 libstdc++.
-            (<a href="http://b.android.com/41770">Issue 41770</a>,
-             <a href="http://b.android.com/41859">Issue 41859</a>)</li>
-          <li>Fixed problem with the X86 MXX/SSE code failing to link due to missing
-            {@code posix_memalign}.
-            (<a href="https://android-review.googlesource.com/#/c/51872">Change 51872</a>)</li>
-          <li>Fixed GCC4.7/X86 segmentation fault in {@code i386.c}, function
-            {@code distance_non_agu_define_in_bb()}.
-            (<a href="https://android-review.googlesource.com/#/c/50383">Change 50383</a>)</li>
-          <li>Fixed GCC4.7/X86 to restore earlier {@code cmov} behavior.
-            (<a href="http://gcc.gnu.org/viewcvs?view=revision&revision=193554">GCC Issue</a>)</li>
-          <li>Fixed handling NULL return value of {@code setlocale()} in libstdc++/GCC4.7.
-            (<a href="http://b.android.com/46718">Issue 46718</a>)
-          <li>Fixed {@code ld.gold} runtime undefined reference to {@code __exidx_start} and
-            {@code __exidx_start_end}.
-            (<a href="https://android-review.googlesource.com/#/c/52134">Change 52134</a>)</li>
-          <li>Fixed Clang 3.1 internal compiler error when using Eigen library.
-            (<a href="http://b.android.com/41246">Issue 41246</a>)</li>
-          <li>Fixed Clang 3.1 internal compiler error including {@code &lt;chrono&gt;} in C++11
-mode.
-            (<a href="http://b.android.com/39600">Issue 39600</a>)</li>
-          <li>Fixed Clang 3.1 internal compiler error when generating object code for a method
-            call to a uniform initialized {@code rvalue}.
-            (<a href="http://b.android.com/41387">Issue 41387</a>)</li>
-          <li>Fixed Clang 3.1/X86 stack realignment.
-            (<a href="https://android-review.googlesource.com/#/c/52154">Change 52154</a>)</li>
-          <li>Fixed problem with GNU Debugger (GDB) SIGILL when debugging on Android 4.1.2.
-            (<a href="http://b.android.com/40941">Issue 40941</a>)</li>
-          <li>Fixed problem where GDB cannot set {@code source:line} breakpoints when symbols
-contain
-            long, indirect file paths.
-            (<a href="http://b.android.com/42448">Issue 42448</a>)</li>
-          <li>Fixed GDB {@code read_program_header} for MIPS PIE executables.
-            (<a href="https://android-review.googlesource.com/#/c/49592">Change 49592</a>)</li>
-          <li>Fixed {@code STLport} segmentation fault in {@code uncaught_exception()}.
-            (<a href="https://android-review.googlesource.com/#/c/50236">Change 50236</a>)</li>
-          <li>Fixed {@code STLport} bus error in exception handling due to unaligned access of
-            {@code DW_EH_PE_udata2}, {@code DW_EH_PE_udata4}, and {@code DW_EH_PE_udata8}.</li>
-          <li>Fixed Gabi++ infinite recursion problem with {@code nothrow new[]} operator.
-            (<a href="http://b.android.com/52833">Issue 52833</a>)</li>
-          <li>Fixed Gabi++ wrong offset to exception handler pointer.
-            (<a href="https://android-review.googlesource.com/#/c/53446">Change 53446</a>)</li>
-          <li>Removed Gabi++ redundant free on exception object
-            (<a href="https://android-review.googlesource.com/#/c/53447">Change 53447</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>Fixed NDK headers:
-            <ul>
-              <li>Removed redundant definitions of {@code size_t}, {@code ssize_t}, and
-                {@code ptrdiff_t}.</li>
-              <li>Fixed MIPS and ARM {@code fenv.h} header.</li>
-              <li>Fixed {@code stddef.h} to not redefine {@code offsetof} since it already exists
-                in the toolchain.</li>
-              <li>Fixed {@code elf.h} to contain {@code Elf32_auxv_t} and {@code Elf64_auxv_t}.
-                (<a href="http://b.android.com/38441">Issue 38441</a>)
-                </li>
-              <li>Fixed the {@code #ifdef} C++ definitions in the
-                {@code OpenSLES_AndroidConfiguration.h} header file.
-                (<a href="http://b.android.com/53163">Issue 53163</a>)
-                </li>
-            </ul>
-          </li>
-          <li>Fixed {@code STLport} to abort after out of memory error instead of silently exiting.
-            </li>
-          <li>Fixed system and Gabi++ headers to be able to compile with API level 8 and lower.</li>
-          <li>Fixed {@code cpufeatures} to not parse {@code /proc/self/auxv}.
-            (<a href="http://b.android.com/43055">Issue 43055</a>)</li>
-          <li>Fixed {@code ld.gold} to not depend on host libstdc++ and on Windows platforms,
-            to not depend on the {@code libgcc_sjlj_1.dll} library.</li>
-          <li>Fixed Clang 3.1 which emits inconsistent register list in {@code .vsave} and fails
-            assembler.
-            (<a href="https://android-review.googlesource.com/#/c/49930">Change 49930</a>)</li>
-          <li>Fixed Clang 3.1 to be able to compile libgabi++ and pass the {@code test-stlport}
-            tests for MIPS build targets.
-            (<a href="https://android-review.googlesource.com/#/c/51961">Change 51961</a>)</li>
-          <li>Fixed Clang 3.1 to only enable exception by default for C++, not for C.</li>
-          <li>Fixed several issues in Clang 3.1 to pass most GNU exception tests.</li>
-          <li>Fixed scripts {@code clang} and {@code clang++} in standalone NDK compiler to detect
-            {@code -cc1} and to not specify {@code -target} when found.</li>
-          <li>Fixed {@code ndk-build} to observe {@code NDK_APP_OUT} set in {@code Application.mk}.
-            </li>
-          <li>Fixed X86 {@code libc.so} and {@code lib.a} which were missing the {@code sigsetjmp}
-            and {@code siglongjmp} functions already declared in {@code setjmp.h}.
-            (<a href="http://b.android.com/19851">Issue 19851</a>)</li>
-          <li>Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++ 11.
-            (<a href="http://clang.llvm.org/cxx_status.html">Clang Issue</a>)</li>
-          <li>Fixed cygwin path in argument passed to {@code HOST_AWK}.</li>
-          <li>Fixed {@code ndk-build} script warning in windows when running from project's JNI
-            directory.
-            (<a href="http://b.android.com/40192">Issue 40192</a>)</li>
-          <li>Fixed problem where the {@code ndk-build} script does not build if makefile has
-            trailing whitespace in the {@code LOCAL_PATH} definition.
-            (<a href="http://b.android.com/42841">Issue 42841</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Other changes:</dt>
-      <dd>
-        <ul>
-          <li>Enabled threading support in GCC/MIPS toolchain.</li>
-          <li>Updated GCC exception handling helpers {@code __cxa_begin_cleanup} and
-            {@code __cxa_type_match} to have <em>default</em> visibility from the previous
-            <em>hidden</em> visibility in GNU libstdc++. For more information, see
-            {@code CHANGES.HTML}.</li>
-          <li>Updated build scripts so that Gabi++ and STLport static libraries are now built with
-            hidden visibility except for exception handling helpers.</li>
-          <li>Updated build so that {@code STLport} is built for ARM in Thumb mode.</li>
-          <li>Added support for {@code std::set_new_handler} in Gabi++.
-            (<a href="http://b.android.com/52805">Issue 52805</a>)</li>
-          <li>Enabled {@code FUTEX} system call in GNU libstdc++.</li>
-          <li>Updated {@code ndk-build} so that it  no longer copies prebuilt static library to
-            a project's {@code obj/local/&lt;abi&gt;/} directory.
-            (<a href="http://b.android.com/40302">Issue 40302</a>)</li>
-          <li>Removed {@code __ARM_ARCH_5*__} from ARM {@code toolchains/*/setup.mk} script.
-            (<a href="http://b.android.com/21132">Issue 21132</a>)</li>
-          <li>Built additional GNU libstdc++ libraries in thumb for ARM.</li>
-          <li>Enabled MIPS floating-point {@code madd/msub/nmadd/nmsub/recip/rsqrt}
-            instructions with 32-bit FPU.</li>
-          <li>Enabled graphite loop optimizer in GCC 4.6 and 4.7 to allow more optimizations:
-            {@code -fgraphite}, {@code -fgraphite-identity}, {@code -floop-block}, {@code
--floop-flatten},
-            {@code -floop-interchange}, {@code -floop-strip-mine}, {@code -floop-parallelize-all},
-            and {@code -ftree-loop-linear}.
-            (<a href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html">info</a>)</li>
-          <li>Enabled {@code polly} for Clang 3.1 on Linux and Max OS X 32-bit hosts which analyzes
-            and optimizes memory access. (<a href="http://polly.llvm.org">info</a>)</li>
-          <li>Enabled {@code -flto} in GCC 4.7, 4.6, Clang 3.2 and Clang 3.1 on linux (Clang LTO
-            via LLVMgold.so). MIPS compiler targets are not supported because {@code ld.gold}
-            is not available.</li>
-          <li>Enabled {@code --plugin} and {@code --plugin-opt} for {@code ld.gold} in GCC 4.6/4.7.
-            </li>
-          <li>Enabled {@code --text-reorder} for {@code ld.gold} in GCC 4.7.</li>
-          <li>Configured GNU libstdc++ with {@code _GLIBCXX_USE_C99_MATH} which undefines the
-            {@code isinf} script in the bionic header. For more information, see
-            {@code CHANGES.html}.</li>
-          <li>Added {@code APP_LDFLAGS} to the build scripts. For more information, see
-            {@code ANDROID-MK.html}.</li>
-          <li>Updated build scripts to allow {@code NDK_LOG=0} to disable the {@code NDK_LOG}.</li>
-          <li>Updated build scripts to allow {@code NDK_HOST_32BIT=0} to disable the host developer
-            environment 32-bit toolchain.</li>
-          <li>Changed the default GCC/X86 flags {@code -march=} and {@code -mtune=} from
-            {@code pentiumpro} and {@code generic} to {@code i686} and {@code atom}.</li>
-          <li>Enhanced toolchain build scripts:
-            <ul>
-              <li>Fixed a race condition in {@code build-gcc.sh} for the {@code mingw} build type
-                which was preventing a significant amount of parallel build processing.</li>
-              <li>Updated {@code build-gabi++.sh} and {@code build-stlport.sh} so they can now run
-                from the NDK package.
-                (<a href="http://b.android.com/52835">Issue 52835</a>)
-                </li>
-              <li>Fixed {@code run-tests.sh} in the {@code MSys} utilities collection.</li>
-              <li>Improved 64-bit host toolchain and Canadian Cross build support.</li>
-              <li>Updated {@code build-mingw64-toolchain.sh} script to more recent version.</li>
-              <li>Added option to build {@code libgnustl_static.a} and {@code stlport_static.a}
-                without hidden visibility.</li>
-            </ul>
-          </li>
-        </ul>
-
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 8d</a> <em>(December 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-      <dd>
-        <ul>
-          <li>Added the GNU Compiler Collection (GCC) 4.7 compiler to the NDK. The GCC 4.6 compiler
-            is still the default, so you must to explicitly enable the new version as follows:
-            <ul>
-              <li>For {@code ndk-build}, export the {@code NDK_TOOLCHAIN_VERSION=4.7} variable
-                <em>or</em> add it to {@code Application.mk}.</li>
-              <li>For standalone builds, add the {@code --toolchain=} option to
-                {@code make-standalone-toolchain.sh}, for example:
-                <pre>--toolchain=arm-linux-androideabi-4.7</pre></li>
-            </ul>
-            <p class="note">
-              <strong>Note:</strong> This feature is experimental. Please try it and
-              <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
-          </li>
-          <li>Added {@code stlport} exception support via gabi++.  Note that the new gabi++
-            depends on {@code dlopen} and related code, meaning that:
-            <ul>
-              <li>You can no longer build a <em>static</em> executable using the {@code -static}
-                option or include {@code libstlport_static.a} using
-                {@code APP_STL := stlport_static}. (You can still use the {@code -static} option
-                with a standalone toolchain.) Compiling a <em>dynamic</em> executable using
-                {@code include $(BUILD_EXECUTABLE)} continues to work because the compiler
-                automatically adds the {@code -ldl} option.</li>
-              <li>If your project links using {@code -nostdlib} and {-Wl,--no-undefined}, you
-                must manually include the {@code -ldl} option.</li>
-            </ul>
-              For more information, see {@code CPLUSPLUS-SUPPORT.html}.
-
-              <p class="note">
-                <strong>Note:</strong> This feature is experimental and works better with the GCC
-                4.6/4.7 compilers than with GCC 4.4.3 or Clang 3.1. Please try it and
-                <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
-          </li>
-          <li>Added a {@code -mstack-protector-guard=} option for x86 to choose between a
-            <em>global</em> default path which is compatible with older Android C library (bionic)
-            and a new <em>tls</em> path (%gs:20) for {@code -fstack-protector},
-            {@code -fstack-protector-all} and {@code -fstack-protector-strong} using the GCC 4.6
-            and higher compilers.
-
-            <p class="note">
-              <strong>Note:</strong> The {@code -mstack-protector-guard} setting itself does not
-              enable any {@code -fstack-protector*} options.</p>
-          </li>
-          <li>Added {@code android_setCpu()} function to
-            {@code sources/android/cpufeatures/cpu-features.c} for use when auto-detection via
-            {@code /proc} is not possible in Android 4.1 and higher.
-            (<a href="http://code.google.com/p/chromium/issues/detail?id=164154">Chromium Issue
-            164154</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Important bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>Fixed unnecessary rebuild of object files when using the {@code ndk-build} script.
-            (<a href="http://b.android.com/39810">Issue 39810</a>)</li>
-          <li>Fixed a linker failure with the NDK 8c release for Mac OS X 10.6.x that produced the
-            following error:
-            <pre>
-dyld: lazy symbol binding failed: Symbol not found: _memmem
-Referenced from: ...../arm-linux-androideabi/bin/ld
-Expected in: /usr/lib/libSystem.B.dylib</pre>
-            This problem was caused by building on Mac OS X 10.7, which produced binaries that were
-            not compatible with Mac OS 10.6.x and the NDK.
-          </li>
-          <li>Removed the {@code -x c++} options from the Clang++ standalone build script.
-          (<a href="http://b.android.com/39089">Issue 39089</a>)</li>
-          <li>Fixed issues using the {@code NDK_TOOLCHAIN_VERSION=clang3.1} option in Cygwin.
-           (<a href="http://b.android.com/39585">Issue 39585</a>)</li>
-          <li>Fixed the {@code make-standalone-toolchain.sh} script to allow generation of a
-            standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain
-            can be used in Cygwin, MingGW or CMD.exe environments.
-            (<a href="http://b.android.com/39915">Issue 39915</a>,
-            <a href="http://b.android.com/39585">Issue 39585</a>)</li>
-          <li>Added missing {@code SL_IID_ANDROIDBUFFERQUEUESOURCE} option in android-14 builds for
-            ARM and X86.
-            (<a href="http://b.android.com/40625">Issue 40625</a>)</li>
-          <li>Fixed x86 CPU detection for the {@code ANDROID_CPU_X86_FEATURE_MOVBE} feature.
-            (<a href="http://b.android.com/39317">Issue 39317</a>)</li>
-          <li>Fixed an issue preventing the Standard Template Library (STL) from using C++
-            sources that do not have a {@code .cpp} file extension.</li>
-          <li>Fixed GCC 4.6 ARM internal compiler error <em>at reload1.c:1061</em>.
-            (<a href="http://b.android.com/20862">Issue 20862</a>)</li>
-          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at emit-rtl.c:1954</em>.
-            (<a href="http://b.android.com/22336">Issue 22336</a>)</li>
-          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at postreload.c:396</em>.
-            (<a href="http://b.android.com/22345">Issue 22345</a>)</li>
-          <li>Fixed problem with GCC 4.6/4.7 skipping lambda functions.
-            (<a href="http://b.android.com/35933">Issue 35933</a>)</li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-      <dd>
-        <ul>
-          <li>NDK header file fixes:
-            <ul>
-              <li>Fixed {@code __WINT_TYPE__} and {@code wint_t} to be the same type.</li>
-              <li>Corrected typo in {@code android/bitmap.h}.
-                (<a href="http://b.android.com/15134">Issue 15134</a>)
-              </li>
-              <li>Corrected typo in {@code errno.h}.</li>
-              <li>Added check for the presence of {@code __STDC_VERSION__} in {@code sys/cdefs.h}.
-                (<a href="http://b.android.com/14627">Issue 14627</a>)
-              </li>
-              <li>Reorganized headers in {@code byteswap.h} and {@code dirent.h}.</li>
-              <li>Fixed {@code limits.h} to include {@code page.h} which provides {@code PAGE_SIZE}
-                settings.
-                (<a href="http://b.android.com/39983">Issue 39983</a>)
-              </li>
-              <li>Fixed return type of {@code glGetAttribLocation()} and
-                {@code glGetUniformLocation()} from {@code int} to {@code GLint}.</li>
-              <li>Fixed {@code __BYTE_ORDER} constant for x86 builds.
-                (<a href="http://b.android.com/39824">Issue 39824</a>)
-              </li>
-            </ul>
-          </li>
-          <li>Fixed {@code ndk-build} script to not overwrite {@code -Os} with {@code -O2} for ARM
-            builds.</li>
-          <li>Fixed build scripts to allow overwriting of {@code HOST_AWK}, {@code HOST_SED}, and
-            {@code HOST_MAKE} settings.</li>
-          <li>Fixed issue for {@code ld.gold} on {@code fsck_msdos} builds linking objects built by
-            the Intel C/C++ compiler (ICC).</li>
-          <li>Fixed ARM EHABI support in Clang to conform to specifications.</li>
-          <li>Fixed GNU Debugger (GDB) to shorten the time spent on walking the target's link map
-            during {@code solib} events.
-            (<a href="http://b.android.com/38402">Issue 38402</a>)</li>
-          <li>Fixed missing {@code libgcc.a} file when linking shared libraries.</li>
-        </ul>
-      </dd>
-
-      <dt>Other changes:</dt>
-      <dd>
-        <ul>
-          <li>Backported 64-bit built-in atomic functions for ARM to GCC 4.6.</li>
-          <li>Added documentation for audio output latency, along with other documentation and
-            fixes.</li>
-          <li>Fixed debug builds with Clang so that non-void functions now raise a {@code SIGILL}
-            signal for paths without a return statement.</li>
-          <li>Updated {@code make-standalone-toolchain.sh} to accept the suffix {@code -clang3.1}
-            which is equivalent to adding {@code --llvm-version=3.1} to the GCC 4.6 toolchain.</li>
-          <li>Updated GCC and Clang bug report URL to:
-            <a
-href="http://source.android.com/source/report-bugs.html">http://source.android.com/source/report-bug
-s.html</a></li>
-          <li>Added ARM ELF support to {@code llvm-objdump}.</li>
-          <li>Suppressed <em>treating c input as c++</em> warning for Clang builds.</li>
-          <li>Updated build so that only the 32-bit version of {@code libiberty.a} is built and
-            placed in {@code lib32/}.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 8c</a> <em>(November 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <dl>
-      <dt>Important changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Added the Clang 3.1 compiler to the NDK. The GNU Compiler Collection (GCC) 4.6 is
-          still the default, so you must explicitly enable the Clang compiler option as follows:
-            <ul>
-              <li>For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} <em>or</em>
-                add this environment variable setting to {@code Application.mk}.</li>
-              <li>For standalone builds, add {@code --llvm-version=3.1} to
-                {@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
-                makefile with {@code &lt;tool-path&gt;/bin/clang} and
-                {@code &lt;tool-path&gt;/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
-                details.</li>
-            </ul>
-            <p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
-            <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p></li>
-          <li>Added Gold linker {@code ld.gold} for the Windows toolchain. Gold linker is also the
-            default for ARM and X86 on all hosts. You may override it to use the {@code ld.bfd}
-            linker by adding {@code LOCAL_LDFLAGS += -fuse-ld=bfd} to {@code Android.mk}, or by
-passing
-            {@code -fuse-ld=bfd} to the g++/clang++ command line that does the linking.</li>
-          <li>Added checks for spaces in the NDK path to the {@code ndk-build[.cmd]} and
-            {@code ndk-gdb} scripts, to prevent build errors that are difficult to diagnose.</li>
-          <li>Made the following changes to API level handling:
-            <ul>
-              <li>Modified build logic so that projects that specify {@code android-10} through
-                {@code android-13} in {@code APP_PLATFORM}, {@code project.properties} or
-                {@code default.properties} link against {@code android-9} instead of
-                {@code android-14}.
-              <li>Updated build so that executables using android-16 (Jelly Bean) or higher are
-                compiled with the {@code -fPIE} option for position-independent executables (PIE).
-                A new {@code APP_PIE} option allows you to control this behavior. See {@code
-                APPLICATION-MK.html} for details.
-                <p class="note">
-                  <strong>Note:</strong> All API levels above 14 still link against {@code
-                  platforms/android-14} and no new {@code platforms/android-N} have been added.
-                </p></li>
-              <li>Modified {@code ndk-build} to provide warnings if the adjusted API level is larger
-              than {@code android:minSdkVersion} in the project's {@code AndroidManifest.xml}.</li>
-            </ul>
-          </li>
-          <li>Updated the {@code cpu-features} helper library to include more ARM-specific features.
-          See {@code sources/android/cpufeatures/cpu-features.h} for details.</li>
-          <li>Modified the long double on the X86 platform to be 8 bytes. This data type is now the
-          same size as a double, but is still treated as a distinct type.</li>
-          <li>Updated build for {@code APP_ABI=armeabi-v7a}:
-            <ul>
-              <li>Modified this build type to pass the {@code -march=armv7-a} parameter
-              to the linker. This change ensures that v7-specific libraries and {@code crt*.o} are
-              linked correctly.</li>
-              <li>Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the
-              {@code -mfpu=vfp} option used in previous releases.</li>
-            </ul>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed an issue where running {@code make-standalone-toolchain.sh} with root privileges
-            resulted in the stand alone tool chain being inaccessible to some users.
-            (<a href="http://b.android.com/35279">Issue 35279</a>)
-            <ul>
-              <li>All files and executables in the NDK release package are set to have read and
-                execute permissions for all.</li>
-              <li>The ownership/group of {@code libstdc++.a} is now preserved when copied.</li>
-            </ul>
-          </li>
-          <li>Removed redundant {@code \r} from Windows prebuilt {@code echo.exe}. The redundant
-          {@code \r} caused {@code gdb.setup} to fail in the GNU Debugger (GDB) because it
-          incorrectly became part of the path.
-          (<a href="http://b.android.com/36054">Issue 36054</a>)</li>
-          <li>Fixed Windows parallel builds that sometimes failed due to timing issues in the
-          {@code host-mkdir} implementation.
-          (<a href="http://b.android.com/25875">Issue 25875</a>)</li>
-          <li>Fixed GCC 4.4.3 GNU {@code libstdc++} to <em>not</em> merge {@code typeinfo} names by
-          default. For more details, see
-          {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}.
-          (<a href="http://b.android.com/22165">Issue 22165</a>)</li>
-          <li>Fixed problem on {@code null} context in GCC 4.6
-          {@code cp/mangle.c::write_unscoped_name}, where GCC may crash when the context is
-          {@code null} and dereferenced in {@code TREE_CODE}.</li>
-          <li>Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats.
-          (<a href="http://b.android.com/34613">Issue 34613</a>)</li>
-          <li>Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation
-          where a stale stack location holding the dereferenced value was returned and caused
-          runtime crashes.
-          (<a href="http://b.android.com/38630">Issue 38630</a>)</li>
-
-          <li>ARM-specific fixes:
-            <ul>
-              <li>Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the <em>mangling of
-              &lt;va_list&gt; was changed in GCC 4.4</em>. The workaround using the
-              {@code -Wno-psabi} switch to avoid this warning is no longer required.</li>
-              <li>Fixed an issue when a project with {@code .arm} or {@code .neon} suffixes in
-              {@code LOCAL_SRC_FILES} also used {@code APP_STL}. With {@code APP_STL}, the
-              {@code ndk-build} script searches for C++ files in {@code LOCAL_SRC_FILES} before
-              adding STL {@code header/lib} paths to compilation. Modified {@code ndk-build} to
-              filter out {@code .arm} and {@code .neon} suffixes before the search, otherwise items
-              in {@code LOCAL_SRC_FILES} like {@code myfile.cpp.arm.neon} won't be compiled as C++
-              code.</li>
-              <li>Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older
-              binutils without {@code tag_FP_arch}, which was producing <em>assertion fail</em>
-              error messages in GNU Binutils.
-              (<a href="http://b.android.com/35209">Issue 35209</a>)
-              </li>
-              <li>Removed <em>Unknown EABI object attribute 44</em> warning when
-              {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}</li>
-              <li>Fixed an issue in GNU {@code stdc++} compilation with both {@code -mthumb} and
-              {@code -march=armv7-a}, by modifying {@code make-standalone-toolchain.sh} to populate
-              {@code headers/libs} in sub-directory {@code armv7-a/thumb}.
-              (<a href="http://b.android.com/35616">Issue 35616</a>)
-              </li>
-              <li>Fixed <em>unresolvable R_ARM_THM_CALL relocation</em> error.
-              (<a href="http://b.android.com/35342">Issue 35342</a>)
-              </li>
-              <li>Fixed internal compiler error at {@code reload1.c:3633}, caused by the ARM
-              back-end expecting the wrong operand type when sign-extend from {@code char}.
-              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099">GCC Issue 50099</a>)</li>
-              <li>Fixed internal compiler error with negative shift amount.
-              (<a href="http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html">GCC Issue</a>)</li>
-            </ul>
-          </li>
-
-          <li>Fixed {@code -fstack-protector} for X86, which is also the default for the
-          {@code ndk-build} x86 ABI target.</li>
-
-          <li>MIPS-specific fixes:
-            <ul>
-              <li>Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when
-              compiling MIPS {@code libstlport_*}.</li>
-              <li>Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM.
-              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369">GCC Issue 54369</a>)</li>
-              <li>Backported fix for {@code cc1} compile process consuming 100% CPU.
-              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380">GCC Issue 50380</a>)</li>
-            </ul>
-          </li>
-
-          <li>GNU Debugger-specific fixes:
-            <ul>
-              <li>Disabled Python support in gdb-7.x at build, otherwise the gdb-7.x configure
-              function may pick up whatever Python version is available on the host and build
-              {@code gdb} with a hard-wired dependency on a specific version of Python.
-              (<a href="http://b.android.com/36120">Issue 36120</a>)
-              </li>
-              <li>Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none
-              of the known architectures.
-              (<a href="http://b.android.com/35392">Issue 35392</a>)
-              </li>
-              <li>Fixed Windows pathname support, by keeping the {@code :} character if it looks
-              like it could be part of a Windows path starting with a drive letter.
-              (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12843">GDB Issue 12843</a>)
-              </li>
-              <li>Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}.
-              (<a href="http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html">GDB Issue</a>)
-              </li>
-              <li>Added fix to only read the current {@code solibs} when the linker is consistent.
-              This change speeds up {@code solib} event handling.
-              (<a href="http://b.android.com/37677">Issue 37677</a>)
-              </li>
-              <li>Added fix to make repeated attempts to find {@code solib} breakpoints. GDB now
-              retries {@code enable_break()} during every call to {@code svr4_current_sos()} until
-              it succeeds.
-              (<a href="https://android-review.googlesource.com/#/c/43563">Change 43563</a>)</li>
-              <li>Fixed an issue where {@code gdb} would not stop on breakpoints placed in
-              {@code dlopen-ed} libraries.
-              (<a href="http://b.android.com/34856">Issue 34856</a>)
-              </li>
-              <li>Fixed {@code SIGILL} in dynamic linker when calling {@code dlopen()}, on system
-              where {@code /system/bin/linker} is stripped of symbols and
-              {@code rtld_db_dlactivity()} is implemented as {@code Thumb}, due to not preserving
-              {@code LSB} of {@code sym_addr}.
-              (<a href="http://b.android.com/37147">Issue 37147</a>)
-              </li>
-            </ul>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed NDK headers:
-            <ul>
-              <li>Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from
-              original kernel. (<a href="https://android-review.googlesource.com/#/c/43335">Change
-              43335</a>)</li>
-              <li>Replaced struct member data {@code __unused} with {@code __linux_unused} in
-              {@code linux/sysctl.h} and {@code linux/icmp.h} to avoid conflict with
-              {@code #define __unused} in {@code sys/cdefs.h}.</li>
-              <li>Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and
-              {@code __END_DECLS}.</li>
-              <li>Removed unimplemented functions in {@code malloc.h}.</li>
-              <li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
-              (<a href="http://b.android.com/1952">Issue 1952</a>)</li>
-              <li>Fixed preprocessor macros in {@code &lt;arch&gt;/include/machine/*}.</li>
-              <li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
-              <li>Removed {@code linux-unistd.h}</li>
-              <li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
-              {@code ULONG_LONG_MAX} from {@code &lt;pthread.h&gt;} to {@code
-&lt;limits.h&gt;}.</li>
-            </ul>
-          </li>
-          <li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
-          <li>Fixed {@code _STLP_USE_EXCEPTIONS}, when not defined, to omit all declarations
-          and uses of {@code __Named_exception}. Compiling and use of {@code __Named_exception}
-          settings only occurs when {@code STLport} is allowed to use exceptions.</li>
-          <li>Fixed building of Linux-only NDK packages without also building Windows code. Use the
-          following settings to perform this type of build:
-          <pre>./build/tools/make-release.sh --force --systems=linux-x86</pre></li>
-          <li>Fixed {@code libc.so} so it does not export {@code atexit()} and {@code __do_handler}.
-          These symbols are exported for ARM builds by the system version of the C library to
-          support legacy native libraries. NDK-generated should never reference them directly.
-          Instead, each shared library or executable should embed its own version of these symbols,
-          provided by {@code crtbegin_*.o}.
-          <p>If your project is linked with the {@code -nostdlib -Wl,--no-undefined} options, you
-          must provide your own {@code __dso_handle} because {@code crtbegin_so.o} is not linked in
-          this case. The content of {@code __dso_handle} does not matter, as shown in the following
-          example code:</p>
-<pre>
-extern "C" {
-  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
-  void *__dso_handle;
-}
-</pre>
-          </li>
-          <li>Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to
-          generate a more readable form {@code function@plt}.</li>
-          <li>Removed the following symbols, introduced in GCC 4.6 {@code libgcc.a}, from
-          the X86 platform {@code libc.so} library: {@code __aeabi_idiv0}, {@code __aeabi_ldiv0},
-          {@code __aeabi_unwind_cpp_pr1}, and {@code __aeabi_unwind_cpp_pr2}.</li>
-          <li>Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS
-          {@code crt*_so.S}.</li>
-          <li>Updated {@code ndk-gdb} so that it only takes the last line of output for
-          {@code ndk-build} {@code DUMP_XXXX}. This change ensures that if {@code Application.mk} or
-          {@code Android.mk} print something with {@code $(info ...)} syntax, it does not get
-          injected into the result of {@code DUMP_XXXX}.
-          (<a href="https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ">More info</a>)</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Removed {@code arch-x86} and {@code arch-mips} headers from
-          {@code platforms/android-[3,4,5,8]}. Those headers were incomplete, since both X86 and
-          MIPS ABIs are only supported at API 9 or higher.</li>
-          <li>Simplified c++ include path in standalone packages, as shown below.
-          (<a href="http://b.android.com/35279">Issue 35279</a>)
-<pre>
-&lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
-  to:
-&lt;path&gt;/include/c++/4.6/
-</pre></li>
-          <li>Fixed {@code ndk-build} to recognize more C++ file extensions by default:
-          {@code .cc .cp .cxx .cpp .CPP .c++ .C}. You may still use {@code LOCAL_CPP_EXTENSION} to
-          overwrite these extension settings.</li>
-          <li>Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze
-          frame on re-launch.</li>
-          <li>Replaced deprecated APIs in NDK samples.
-          (<a href="http://b.android.com/20017">Issue 20017</a>)
-            <ul>
-              <li>{@code hello-gl2} from android-5 to android-7</li>
-              <li>{@code native-activity} from android-9 to android-10</li>
-              <li>{@code native-audio} from android-9 to android-10</li>
-              <li>{@code native-plasma} from android-9 to android-10</li>
-            </ul>
-          </li>
-          <li>Added new branding for Android executables with a simpler scheme in section
-          {@code .note.android.ident} (defined in {@code crtbegin_static/dynamic.o}) so that
-          debugging tools can act accordingly. The structure member and values are defined as
-          follows:
-<pre>
-static const struct {
-  int32_t namesz;  /* = 8,  sizeof ("Android") */
-  int32_t descsz;  /* = 1 * sizeof(int32_t) */
-  int32_t type;    /* = 1, ABI_NOTETYPE */
-  char name[sizeof "Android"];  /* = "Android" */
-  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
-}
-</pre>
-            <p>The previous branding options in section {@code .note.ABI-tag} are deprecated.</p>
-          </li>
-          <li>Added a new script {@code run-tests-all.sh} which calls {@code run-tests.sh} and
-          {@code standalone/run.sh} with various conditions. The script {@code run-tests.sh} runs
-          without the {@code --abi} option, and is enhanced to compile most of the tests for all
-          supported ABIs and run on all attached devices</li>
-        </ul>
-      </dd>
-    </dl>
-
-  </div>
-</div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 8b</a> <em>(July 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>The main features of this release are a new GNU Compiler Collection (GCC) 4.6 toolchain and
-GNU Debugger (GDB) 7.3.x which adds debugging support for the Android 4.1 (API Level 16) system
-image.</p>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed {@code LOCAL_SHORT_COMMANDS} issues on Mac OS, Windows Cygwin environments for
-static libraries. List file generation is faster, and it is not regenerated to avoid repeated
-project rebuilds.</li>
-          <li>Fixed several issues in {@code ndk-gdb}:
-            <ul>
-              <li>Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more
-consistently.</li>
-              <li>Updated tool to accept device serial names containing spaces.</li>
-              <li>Updated tool to retrieve {@code /system/bin/link} information, so {@code gdb} on
-the host can set a breakpoint in {@code __dl_rtld_db_dlactivity} and be aware of linker activity
-(e.g., rescan {@code solib} symbols when {@code dlopen()} is called).</li>
-            </ul>
-          </li>
-          <li>Fixed {@code ndk-build clean} on Windows, which was failing to remove
-{@code ./libs/*/lib*.so}.</li>
-          <li>Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make}
-fails.</li>
-          <li>Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and
-{@code __exidx_end} symbols.</li>
-          <li>Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and
-MIPS.</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Important changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Added GCC 4.6 toolchain ({@code binutils} 2.21 with {@code gold} and GDB 7.3.x) to
-co-exist with the original GCC 4.4.3 toolchain ({@code binutils} 2.19 and GDB 6.6).
-            <ul>
-              <li>GCC 4.6 is now the default toolchain. You may set {@code
-NDK_TOOLCHAIN_VERSION=4.4.3} in {@code Application.mk} to select the original one.</li>
-              <li>Support for the {@code gold} linker is only available for ARM and x86
-architectures on Linux and Mac OS hosts. This support is disabled by default. Add {@code
-LOCAL_LDLIBS += -fuse-ld=gold} in {@code Android.mk} to enable it.</li>
-              <li>Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging,
-including binaries in Android 4.1 (API Level 16) system images.</li>
-              <li>The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from
-version 2.22:
-                <ul>
-                  <li>Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to
-external libraries. (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=13177">more
-info</a>).</li>
-                  <li>Fixed ARM {@code strip} command to preserve the original {@code p_align} and
-{@code p_flags} in {@code GNU_RELRO} section if they are valid. Without this fix, programs
-built with {@code -fPIE} could not be debugged. (<a
-href="http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553">mor
-e info</a>)</li>
-                </ul>
-              </li>
-              <li>Disabled {@code sincos()} optimization for compatibility with older
-                platforms.</li>
-            </ul>
-          </li>
-
-          <li>Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code
-bind_now} protections by default:
-            <ul>
-              <li>Added {@code --noexecstack} to assembler and {@code -z noexecstack} to linker
-that provides NX protection against buffer overflow attacks by enabling NX bit on stack and
-heap.</li>
-              <li>Added {@code -z relro} and  {@code -z now} to linker for hardening of internal
-data sections after linking to guard against security vulnerabilities caused by memory corruption.
-(more info: <a href="http://www.akkadia.org/drepper/nonselsec.pdf">1</a>,
-<a href="http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html">2</a>)</li>
-
-              <li>These features can be disabled using the following options:
-                <ol>
-                  <li>Disable NX protection by setting the {@code --execstack} option for the
-assembler and {@code -z execstack} for the linker.</li>
-                  <li>Disable hardening of internal data by setting the {@code -z norelro} and
-{@code -z lazy} options for the linker.</li>
-                  <li>Disable these protections in the NDK {@code jni/Android.mk} by setting the
-following options:
-<pre>
-LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
-DISABLE_RELRO=true             # disable "-z relro" and "-z now"
-</pre>
-                  </li>
-                </ol>
-                <p>See {@code docs/ANDROID-MK.html} for more details.</p>
-              </li>
-            </ul>
-          </li>
-
-          <li>Added branding for Android executables with the {@code .note.ABI-tag} section (in
-{@code crtbegin_static/dynamic.o}) so that debugging tools can act accordingly. The structure
-member and values are defined as follows:
-<pre>
-static const struct {
-  int32_t namesz;  /* = 4,  sizeof ("GNU") */
-  int32_t descsz;  /* = 6 * sizeof(int32_t) */
-  int32_t type;    /* = 1 */
-  char  name[sizeof "GNU"];  /* = "GNU" */
-  int32_t os;      /* = 0 */
-  int32_t major;   /* = 2 */
-  int32_t minor;   /* = 6 */
-  int32_t teeny;   /* = 15 */
-  int32_t os_variant;  /* = 1 */
-  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
-}</pre>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue.
-            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12637">more info</a>)</li>
-          <li>Fixed {@code ld} tool segfaults when using {@code --gc-sections}.
-            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12845">more info</a>)
-          </li>
-          <li>Fixed MIPS {@code GOT_PAGE} counting issue.
-            (<a href="http://sourceware.org/ml/binutils/2011-05/msg00198.html">more info</a>)</li>
-          <li>Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.</li>
-          <li>Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.</li>
-          <li>Moved MIPS {@code .dynamic} to the data segment, so that it is writable.</li>
-          <li>Replaced hard-coded values for symbols with correct segment sizes for MIPS.</li>
-          <li>Removed the {@code -mno-shared} option from the defaults in the MIPS toolchain.
-The default for Android toolchain is {@code -fPIC} (or {@code -fpic} if supported). If you do not
-explicitly specify {@code -mshared}, {@code -fpic}, {@code -fPIC}, {@code -fpie}, or {@code -fPIE},
-the MIPS compiler adds {@code -mno-shared} that turns off PIC. Fixed compiler not to add
-{@code -mno-shared} in this case.</li>
-          <li>Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that
-the {@code tests} project underneath it can compile.</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other Changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Changed locations of binaries:
-            <ul>
-              <li>Moved {@code gdbserver} from
-{@code toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver} to
-{@code prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver}.</li>
-              <li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
-{@code i686-linux-android-}.</li>
-              <li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
-{@code sources/cxx-stl/gnu-libstdc++/4.6} when compiled with GCC 4.6, or
-{@code sources/cxx-stl/gnu-libstdc++/4.4.3} when compiled with GCC 4.4.3.</li>
-              <li>Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code
-lib32/}.</li>
-            </ul>
-          </li>
-
-          <li>Added and improved various scripts in the rebuild and test NDK toolchain:
-            <ul>
-              <li>Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain
-that generates Win32 and Win64 executables.</li>
-              <li>Improved speed of {@code download-toolchain-sources.sh} by using the {@code
-clone} command and only using {@code checkout} for the directories that are needed to build the NDK
-toolchain binaries.</li>
-              <li>Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.</li>
-              <li>Added {@code tests/check-release.sh} to check the content of a given NDK
-installation directory, or an existing NDK package.</li>
-              <li>Rewrote the {@code tests/standalone/run.sh} standalone tests .</li>
-            </ul>
-          </li>
-          <li>Removed {@code if_dl.h} header from all platforms and architectures. The {@code
-AF_LINK} and {@code sockaddr_dl} elements it describes are specific to BSD (i.e., they don't exist
-in Linux).</li>
-        </ul>
-      </dd>
-    </dl>
-
-  </div>
-</div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 8</a> <em>(May 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>
-
-    <dl>
-      <dt>New features:</dt>
-
-      <dd>
-        <ul>
-          <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
-            compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
-            toolchains, system headers, libraries and debugging support. For more details regarding
-            MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.
-
-              <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
-              your {@code APP_ABI} definition in your {@code Application.mk} file to build
-              for MIPS platforms. For example, the following line instructs {@code ndk-build}
-              to build your code for three distinct ABIs:</p>
-
-              <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>
-
-              <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
-              code, you should not need to touch your {@code Android.mk} files to build MIPS
-              machine code.</p>
-          </li>
-
-          <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
-          option when calling <code>make-standalone-toolchain.sh</code>. See
-          {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
-          </li>
-        </ul>
-
-        <p class="note"><strong>Note:</strong> To ensure that your applications are available
-to users only if their devices are capable of running them, Google Play filters applications based
-on the instruction set information included in your application ? no action is needed on your part
-to enable the filtering. Additionally, the Android system itself also checks your application at
-install time and allows the installation to continue only if the application provides a library that
-is compiled for the device's CPU architecture.</p>
-      </dd>
-
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed a typo in GAbi++ implementation where the result of {@code
-          dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
-          incorrectly adjusted in the opposite direction from the base class.
-          (<a href="http://b.android.com/28721">Issue 28721</a>)
-          </li>
-          <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
-          {@code libsupc++.*}.</li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
-          if the user has redefined the {@code SHELL} environment variable, which may be changed
-          when installing a variety of development tools in Windows environments.
-          </li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 7c</a> <em>(April 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
-additional fixes and improvements:</p>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
-  devices. The files provided with NDK r7b were not configured properly,
-  resulting in crashes on Tegra2-based devices and others when trying to use
-  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
-        </ul>
-      </dd>
-
-      <dt>Important changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Added support for custom output directories through the {@code NDK_OUT}
-  environment variable. When defined, this variable is used to store all
-  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
-  also recognized by {@code ndk-gdb}. </li>
-          <li>Added support for building modules with hundreds or even thousands of source
-  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
-            <p>This change forces the NDK build system to put most linker or archiver options
-  into list files, as a work-around for command-line length limitations.
-  See {@code docs/ANDROID-MK.html} for details.</p>
-          </li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
-helper library. On certain devices, where cores are enabled dynamically by the system, the previous
-implementation would report the total number of <em>active</em> cores the first time the function
-was called, rather than the total number of <em>physically available</em> cores.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 7b</a> <em>(February 2012)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
-      improvements:</p>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Updated {@code sys/atomics.h} to avoid correctness issues
-            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
-            version of the NDK and this problem should be completely eliminated.
-            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
-          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
-            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
-          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
-            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
-          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
-            affected. The fixes include:
-            <ul>
-              <li>Removed an infinite loop / stack overflow bug that happened when trying
-                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
-                your project path (e.g., in any sub-directory of it).</li>
-              <li>Fixed a problem where the auto-generated dependency files were ignored. This
-                meant that updating a header didn't trigger recompilation of sources that included
-                it.</li>
-              <li>Fixed a problem where special characters in files or paths, other than spaces and
-                quotes, were not correctly handled.</li>
-            </ul>
-          </li>
-          <li>Fixed the standalone toolchain to generate proper binaries when using
-            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
-            should use {@code -lgnustl_shared} if you want to link against the shared library
-            version or {@code -lstdc++} for the static version.
-
-            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
-          </li>
-          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
-            {@code libsupc++.a} even though the file was at the right location.</li>
-          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
-            {@code APP_STL}.</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other changes:</dt>
-
-      <dd>
-        <ul>
-          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
-            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
-            <p>If you need these features, you must do one of the following:</p>
-            <ul>
-              <li>Enable exceptions and/or RTTI explicitly in your modules or
-                {@code Application.mk}. (recommended)</li>
-              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
-                {@code 'rtti'} or both in your {@code Application.mk}. See
-                {@code docs/APPLICATION-MK.html} for more details.</li>
-            </ul>
-          </li>
-          <li>{@code ndk-gdb} now works properly when your application has private services
-            running in independent processes. It debugs the main application process, instead of the
-            first process listed by {@code ps}, which is usually a service process.</li>
-          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
-            and always compile certain source files (but not all) to 32-bit instructions.</li>
-          <li>{@code STLport}: Refresh the sources to match the Android platform version. This
-            update fixes a few minor bugs:
-            <ul>
-               <li>Fixed instantiation of an incomplete type</li>
-               <li>Fixed minor "==" versus "=" typo</li>
-               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
-               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
-                 etc.</li>
-             </ul>
-             <p>For complete details, see the commit log.</p>
-          </li>
-          <li>{@code STLport}: Removed 5 unnecessary static initializers from the library.</li>
-          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
-            armeabi instead. This change had no impact on correctness, but using the right
-            ABI should provide slightly better performance.</li>
-          <li>The {@code cpu-features} helper library was updated to report three optional
-            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
-            {@code docs/CPU-FEATURES.html} for more details.</li>
-          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
-            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
-          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
-            directory when invoked.</li>
-          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
-            didn't work properly in the following cases:
-            <ul>
-              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
-              <li>When using drive-less mounts, for example, when Cygwin would translate
-                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
-            </ul>
-          </li>
-          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
-            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 7</a> <em>(November 2011)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
-    as many other additions and improvements:</p>
-
-    <dl>
-      <dt>New features</dt>
-
-      <dd>
-        <ul>
-          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
-          native features to the platform:
-
-            <ul>
-              <li>Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1
-              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
-              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
-              API level 14 to perform multimedia output directly from native code by using a new
-              Android-specific buffer queue interface. For more details, see
-              <code>docs/openmaxal/index.html</code> and <a href=
-              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>
-
-              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1?
-              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
-              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
-              <a href=
-              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
-            </ul>
-          </li>
-
-          <li>Added CCache support. To speed up large rebuilds, define the
-          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
-          your <code>ccache</code> binary). When declared, the NDK build system automatically
-          uses CCache when compiling any source file. For example:
-            <pre>
-export NDK_CCACHE=ccache
-</pre>
-          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
-          so you must have it installed prior to using it. For more information about CCache, see
-          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
-          </li>
-
-          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
-          you want to build your NDK modules for all the ABIs supported by your given NDK
-          release. This means that either one of the following two lines in your
-          <code>Application.mk</code> are equivalent with this release:
-            <pre>
-APP_ABI := all
-APP_ABI := armeabi armeabi-v7a x86
-</pre>
-
-            <p>This also works if you define <code>APP_ABI</code> when calling
-            <code>ndk-build</code> from the command-line, which is a quick way to check that your
-            project builds for all supported ABIs without changing the project's
-            <code>Application.mk file</code>. For example:</p>
-            <pre>
-ndk-build APP_ABI=all
-</pre>
-          </li>
-
-          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
-          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
-          ensures that the final linking works correctly if you have prebuilt modules that depend
-          on these features. See <code>docs/ANDROID-MK.html</code> and
-          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>
-
-          <li>Shortened paths to source and object files that are used in build commands. When
-          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
-          object, and binary files that are passed to the build commands are significantly
-          shorter now, because they are passed relative to the current directory. This is useful
-          when building projects with a lot of source files, to avoid limits on the maximum
-          command line length supported by your host operating system. The behavior is unchanged
-          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
-          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
-        </ul>
-      </dd>
-
-      <dt>Experimental features</dt>
-
-      <dd>
-        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
-        <code>ndk-build.cmd</code> script from the command line from your project path. The
-        script takes exactly the same arguments as the original <code>ndk-build</code> script.
-        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
-        tools required by the build. You should not need to install anything else to get a
-        working build system.
-
-        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
-        Windows, so you still need Cygwin to debug.</p>
-
-        <p>This feature is still experimental, so feel free to try it and report issues on the
-        <a href="http://b.android.com">public bug database</a> or <a href=
-        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
-        shipped with the NDK succesfully compile with this feature.</p>
-      </dd>
-
-      <dt>Important bug fixes</dt>
-
-      <dd>
-        <ul>
-          <li>Imported shared libraries are now installed by default to the target installation
-          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
-          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
-          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
-          <code>libbar.so</code> are copied to the install location. Previously, only
-          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
-          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
-          behavior is unchanged.</li>
-
-          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
-          their MAIN intent filters.</li>
-
-          <li>Static library imports are now properly transitive. For example, if a top-level
-          module <code>foo</code> imports static library <code>bar</code> that imports static
-          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
-          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
-        </ul>
-      </dd>
-
-      <dt>Other changes</dt>
-
-      <dd>
-        <ul>
-          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
-          9, not 8 for native activities.</li>
-
-          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
-          supported stable API, starting from API level 9.</li>
-
-          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
-          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
-          which is the new location for the AOSP servers.</li>
-
-          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
-          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>
-
-          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
-          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
-          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>
-
-          <li>Added support for RTTI in the STLport C++ runtimes (no support for
-          exceptions).</li>
-
-          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
-          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
-          declare the following:
-            <pre>
-LOCAL_CPP_EXTENSION := .cpp .cxx
-</pre>
-          </li>
-
-          <li>Removed many unwanted exported symbols from the link-time shared system libraries
-          provided by the NDK. This ensures that code generated with the standalone toolchain
-          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
-          symbol that changes each time the toolchain used to build the platform is changed)</li>
-
-          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
-          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
-          because each extension must be probed at runtime by the client application.
-
-            <p>The extensions that are available depend on your actual device and GPU drivers,
-            not the platform version the device runs on. The header changes simply add new
-            constants and types to make it easier to use the extensions when they have been
-            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
-            following list describes the newly supported extensions:</p>
-
-            <dl>
-              <dt>GLES 1.x</dt>
-
-              <dd>
-                <ul>
-                  <li><code>GL_OES_vertex_array_object</code></li>
-
-                  <li><code>GL_OES_EGL_image_external</code></li>
-
-                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>
-
-                  <li><code>GL_EXT_blend_minmax</code></li>
-
-                  <li><code>GL_EXT_discard_framebuffer</code></li>
-
-                  <li><code>GL_EXT_multi_draw_arrays</code></li>
-
-                  <li><code>GL_EXT_read_format_bgra</code></li>
-
-                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>
-
-                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
-                  <li><code>GL_EXT_texture_lod_bias</code></li>
-
-                  <li><code>GL_IMG_read_format</code></li>
-
-                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
-                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>
-
-                  <li><code>GL_IMG_user_clip_plane</code></li>
-
-                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
-                  <li><code>GL_NV_fence</code></li>
-
-                  <li><code>GL_QCOM_driver_control</code></li>
-
-                  <li><code>GL_QCOM_extended_get</code></li>
-
-                  <li><code>GL_QCOM_extended_get2</code></li>
-
-                  <li><code>GL_QCOM_perfmon_global_mode</code></li>
-
-                  <li><code>GL_QCOM_writeonly_rendering</code></li>
-
-                  <li><code>GL_QCOM_tiled_rendering</code></li>
-                </ul>
-              </dd>
-
-              <dt>GLES 2.0</dt>
-
-              <dd>
-                <ul>
-                  <li><code>GL_OES_element_index_uint</code></li>
-
-                  <li><code>GL_OES_get_program_binary</code></li>
-
-                  <li><code>GL_OES_mapbuffer</code></li>
-
-                  <li><code>GL_OES_packed_depth_stencil</code></li>
-
-                  <li><code>GL_OES_texture_3D</code></li>
-
-                  <li><code>GL_OES_texture_float</code></li>
-
-                  <li><code>GL_OES_texture_float_linear</code></li>
-
-                  <li><code>GL_OES_texture_half_float_linear</code></li>
-
-                  <li><code>GL_OES_texture_npot</code></li>
-
-                  <li><code>GL_OES_vertex_array_object</code></li>
-
-                  <li><code>GL_OES_EGL_image_external</code></li>
-
-                  <li><code>GL_AMD_program_binary_Z400</code></li>
-
-                  <li><code>GL_EXT_blend_minmax</code></li>
-
-                  <li><code>GL_EXT_discard_framebuffer</code></li>
-
-                  <li><code>GL_EXT_multi_draw_arrays</code></li>
-
-                  <li><code>GL_EXT_read_format_bgra</code></li>
-
-                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
-                  <li><code>GL_EXT_texture_compression_dxt1</code></li>
-
-                  <li><code>GL_IMG_program_binary</code></li>
-
-                  <li><code>GL_IMG_read_format</code></li>
-
-                  <li><code>GL_IMG_shader_binary</code></li>
-
-                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
-                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
-                  <li><code>GL_NV_coverage_sample</code></li>
-
-                  <li><code>GL_NV_depth_nonlinear</code></li>
-
-                  <li><code>GL_QCOM_extended_get</code></li>
-
-                  <li><code>GL_QCOM_extended_get2</code></li>
-
-                  <li><code>GL_QCOM_writeonly_rendering</code></li>
-
-                  <li><code>GL_QCOM_tiled_rendering</code></li>
-                </ul>
-              </dd>
-
-              <dt>EGL</dt>
-
-              <dd>
-                <ul>
-                  <li><code>EGL_ANDROID_recordable</code></li>
-
-                  <li><code>EGL_NV_system_time</code></li>
-                </ul>
-              </dd>
-            </dl>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 6b</a> <em>(August 2011)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>This release of the NDK does not include any new features compared to r6. The r6b release
-      addresses the following issues in the r6 release:</p>
-      <dl>
-        <dt>Important bug fixes</dt>
-        <dd>
-          <ul>
-            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
-            multi-architecture builds.</li>
-            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
-            A bug in the packaging script placed them in the wrong location.</li>
-            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
-            toolchain.</li>
-            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
-            to copy the proper GNU libstdc++ binaries to the right location.</li>
-            <li>Fixed the standalone toolchain linker warnings about missing the definition and
-            size for the <code>__dso_handle</code> symbol (ARM only).</li>
-            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
-            See the <a href="http://b.android.com/18540">bug</a> for
-            more information.</li>
-            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
-            x86-specific systems when they are used with the x86 standalone toolchain.</li>
-          </ul>
-        </dd>
-      </dl>
-  </div>
-</div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 6</a> <em>(July 2011)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
-      For detailed information describing the changes in this release, read the
-      <code>CHANGES.HTML</code> document included in the NDK package.
-      </p>
-      <dl>
-        <dt>General notes:</dt>
-        <dd>
-          <ul>
-            <li>Adds support for the x86 ABI, which allows you to generate machine code
-            that runs on compatible x86-based Android devices. Major features for x86
-            include x86-specific toolchains, system headers, libraries and
-            debugging support. For all of the details regarding x86 support,
-            see <code>docs/CPU-X86.html</code> in the NDK package.
-
-              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
-              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
-              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
-              to build your code for three distinct ABIs:</p>
-
-              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>
-
-              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
-              your <code>Android.mk</code> files to build x86 machine code.</p>
-
-            </li>
-
-            <li>You can build a standalone x86 toolchain using the
-<code>--toolchain=x86-4.4.3</code>
-            option when calling <code>make-standalone-toolchain.sh</code>. See
-            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
-            </li>
-            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
-            <code>logcat</code> that are generated by native code. The tool translates
-            instruction addresses into a readable format that contains things such
-            as the function, source file, and line number corresponding to each stack frame.
-            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
-            </li>
-          </ul>
-        </dd>
-        <dt>Other changes:</dt>
-        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
-        removed from the NDK distribution.</dd>
-
-      </dl>
-    </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 5c</a> <em>(June 2011)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
-    addresses the following problems in the r5b release:</p>
-    <dl>
-      <dt>Important bug fixes:</dt>
-      <dd>
-        <ul>
-          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
-          builds of debuggable projects.</li>
-
-          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
-          correctly with the new toolchain and added documentation for this in
-          <code>docs/ANDROID-MK.html</code>.</li>
-
-          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
-          platform releases older than API level 8 (Android 2.2).</li>
-
-          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging
-Android 3.0
-          or newer devices.</li>
-
-          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
-          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
-          binary interface to the system is unchanged. The incorrect functions were missing a
-          <code>history_index</code> parameter, and the correct definitions are shown below:
-<pre>
-float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
-                                           size_t pointer_index,
-                                           size_t history_index);
-
-float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
-                                           size_t pointer_index,
-                                           size_t history_index);
-</pre>
-          </li>
-
-          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
-          link time new functions that were added in that API level (for example,
-          <code>pthread_rwlock_init</code>).</li>
-
-        </ul>
-      </dd>
-
-      <dt>Minor improvements and fixes:</dt>
-      <dd>
-        <ul>
-          <li>Object files are now always linked in the order they appear in
-          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
-          grouped by source extensions instead.</li>
-
-          <li>When <code>import-module</code> fails, it now prints the list of directories that
-          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
-          used by the build system is correct.</li>
-
-          <li>When <code>import-module</code> succeeds, it now prints the directory where the
-          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>
-
-          <li>Increased the build speed of debuggable applications when there is a very large number
-          of include directories in the project.</li>
-
-          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
-          error messages.</li>
-
-          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
-          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>
-
-          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
-          GNU Make.</li>
-
-          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
-          true (typo in <code>build/core/build-binary.mk</code>).</li>
-
-          <li>Fixed a bug that prevented the compilation of <code>.s</code> assembly files
-          (<code>.S</code> files were okay).</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 5b</a> <em>(January 2011)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>This release of the NDK does not include any new features compared to r5. The r5b release
-addresses the
-      following problems in the r5 release:
-      </p>
-      <ul>
-    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
-    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on
-Ubuntu 8.04 or higher. </li>
-    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
-    The previous binary generated invalid thumb instruction sequences when
-    dealing with signed chars.</li>
-    <li>Adds missing documentation for the
-    "gnustl_static" value for APP_STL, that allows you to link against
-    a static library version of GNU libstdc++. </li> the
-    <li>Fixed the following <code>ndk-build</code> issues:
-      <ul>
-        <li>A bug that created inconsistent dependency files when a
-        compilation error occured on Windows. This prevented a proper build after
-        the error was fixed in the source code.</li>
-        <li>A Cygwin-specific bug where using very short paths for
-        the Android NDK installation or the project path led to the
-        generation of invalid dependency files. This made incremental builds
-        impossible.</li>
-        <li>A typo that prevented the cpufeatures library from working correctly
-        with the new NDK toolchain.</li>
-        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
-        from GNU Make for every source or object file, which caused problems
-        with very large source trees. In case this doesn't work properly, define
-<code>NDK_USE_CYGPATH=1</code> in your
-        environment to use <code>cygpath -m</code> again.</li>
-        <li>The Cygwin installation now notifies the user of invalid installation paths that
-contain spaces. Previously, an invalid path
-        would output an error that complained about an incorrect version of GNU Make, even if the
-right one was installed.
-      </ul>
-    </li>
-  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from
-working properly when
-  it contained multiple directories separated with a colon. </li>
-  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
-  generated machine code, instead of relying on the host tag, which
-  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts
-now also support
-  using a 32-bit host toolchain.</li>
-  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to
-<code>&lt;netinet/in.h&gt;</code>.</li>
-  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and
-<code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
-  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow
-compilation with <code>-std=c99</code>.</li>
-  </ul>
-  </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 5</a> <em>(December 2010)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>This release of the NDK includes many new APIs, most of which are introduced to
-         support the development of games and similar applications that make extensive use
-         of native code. Using the APIs, developers have direct native access to events, audio,
-         graphics and window management, assets, and storage. Developers can also implement the
-         Android application lifecycle in native code with help from the new
-         {@link android.app.NativeActivity} class. For detailed information describing the changes
-in this
-         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK
-package.
-      </p>
-      <dl>
-        <dt>General notes:</dt>
-        <dd>
-          <ul>
-            <li>Adds support for native activities, which allows you to implement the
-            Android application lifecycle in native code.</li>
-
-            <li>Adds native support for the following:
-
-              <ul>
-
-                <li>Input subsystem (such as the keyboard and touch screen)</li>
-
-                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>
-
-                <li>Event loop APIs to wait for things such as input and sensor events.</li>
-
-                <li>Window and surface subsystem</li>
-
-                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
-                as well as control over platform audio effects</li>
-
-                <li>Access to assets packaged in an <code>.apk</code> file.</li>
-
-              </ul>
-            </li>
-
-            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can
-also now
-            be used as a standalone cross-compiler, for people who want to build their stuff with
-            <code>./configure &amp;&amp; make</code>. See
-            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still
-provided,
-            but the 4.2.1 binaries were removed.</li>
-
-            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and
-module
-            exports and imports to make sharing and reuse of third-party modules much easier
-            (docs/IMPORT-MODULE.html explains why).</li>
-
-            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It
-can be used either
-            as a static or shared library (details and usage examples are in
-sources/android/stlport/README). Prebuilt
-            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also
-provided if you choose to
-            compile against those libraries instead of the default C++ STL implementation.
-            C++ Exceptions and RTTI are not supported in the default STL implementation. For more
-information, see
-            docs/CPLUSPLUS-SUPPORT.HTML.</li>
-
-            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves
-reporting
-            of the CPU type (some devices previously reported ARMv7 CPU when the device really was
-an ARMv6). We
-            recommend developers that use this library to rebuild their applications then
-            upload to Google Play to benefit from the improvements.</li>
-
-            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
-              services.</li>
-
-            <li>Adds new sample applications, <code>native-plasma</code> and
-<code>native-activity</code>,
-            to demonstrate how to write a native activity.</li>
-
-            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a
-more
-              detailed list of changes.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 4b</a> <em>(June 2010)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <dl>
-        <dt>NDK r4b notes:</dt>
-
-        <dd>
-          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
-          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
-          information describing the changes in this release, read the CHANGES.TXT document
-          included in the downloaded NDK package.</p>
-        </dd>
-      </dl>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Provides a simplified build system through the new <code>ndk-build</code> build
-            command.</li>
-
-            <li>Adds support for easy native debugging of generated machine code on production
-            devices through the new <code>ndk-gdb</code> command.</li>
-
-            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
-            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
-            include these CPU instruction set extensions:
-
-              <ul>
-                <li>Thumb-2 instructions</li>
-
-                <li>VFP hardware FPU instructions (VFPv3-D16)</li>
-
-                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
-                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
-                others.</li>
-              </ul>
-            </li>
-
-            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
-            app detect the host device's CPU features at runtime. Specifically, applications can
-            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
-            code paths as needed.</li>
-
-            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
-            <code>cpufeatures</code> library to check CPU features and then provide an optimized
-            code path using NEON instrinsics, if supported by the CPU.</li>
-
-            <li>Lets you generate machine code for either or both of the instruction sets supported
-            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
-            same time and have everything stored to your application's final
-            <code>.apk</code>.</li>
-
-            <li>To ensure that your applications are available to users only if their devices are
-            capable of running them, Google Play now filters applications based on the
-            instruction set information included in your application &mdash; no action is needed on
-            your part to enable the filtering. Additionally, the Android system itself also checks
-            your application at install time and allows the installation to continue only if the
-            application provides a library that is compiled for the device's CPU architecture.</li>
-
-            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
-            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 3</a> <em>(March 2010)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Adds OpenGL ES 2.0 native library support.</li>
-
-            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
-            OpenGL ES 2.0 vertex and fragment shaders.</li>
-
-            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
-            should generate slightly more compact and efficient machine code than the previous one
-            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
-            to build your machine code.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 2</a> <em>(September 2009)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>Originally released as "Android 1.6 NDK, Release 1".</p>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Adds OpenGL ES 1.1 native library support.</li>
-
-            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
-            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
-            android.opengl.GLSurfaceView} object.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt="">Android NDK, Revision 1</a> <em>(June 2009)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-      <p>Originally released as "Android 1.5 NDK, Release 1".</p>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
-            instructions.</li>
-
-            <li>Includes system headers for stable native APIs, documentation, and sample
-            applications.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-
-
-
-
-<!-- ####################### END OF RELEASE NOTES ####################### -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  <h2 id="Reqs">System and Software Requirements</h2>
-
-  <p>The sections below describe the system and software requirements for using the Android NDK, as
-  well as platform compatibility considerations that affect appplications using libraries produced
-  with the NDK.</p>
-
-  <h4>The Android SDK</h4>
-
-  <ul>
-    <li>A complete Android SDK installation (including all dependencies) is required.</li>
-
-    <li>Android 1.5 SDK or later version is required.</li>
-  </ul>
-
-  <h4>Supported operating systems</h4>
-
-  <ul>
-    <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
-
-    <li>Mac OS X 10.4.8 or later (x86 only)</li>
-
-    <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
-later)</li>
-  </ul>
-
-  <h4>Required development tools</h4>
-
-  <ul>
-    <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
-    Make might work but have not been tested.</li>
-
-    <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>
-
-    <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
-    will <em>not</em> work with Cygwin 1.5 installations.</li>
-  </ul>
-
-  <h4 id="platform-compat">Android platform compatibility</h4>
-
-  <ul>
-    <li>The native libraries created by the Android NDK can only be used on devices running
-      specific minimum Android platform versions. The minimum required platform version depends on
-      the CPU architecture of the devices you are targeting. The following table details which
-      Android platform versions are compatible with native code developed for specific CPU
-      architectures.
-
-    <table style="margin:1em;">
-      <tr>
-        <th>Native Code CPU Architecture Used</th>
-        <th>Compatible Android Platform(s)</th>
-      </tr>
-
-      <tr>
-        <td>ARM, ARM-NEON</td>
-        <td>Android 1.5 (API Level 3) and higher</td>
-      </tr>
-
-      <tr>
-        <td>x86</td>
-        <td>Android 2.3 (API Level 9) and higher</td>
-      </tr>
-
-      <tr>
-        <td>MIPS</td>
-        <td>Android 2.3 (API Level 9) and higher</td>
-      </tr>
-    </table>
-
-      <p>These requirements mean you can use native libraries produced with the NDK in
-      applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
-      deploying native libraries to x86 and MIPS-based devices, your application must target Android
-      2.3 or later.</p>
-    </li>
-
-    <li>To ensure compatibility, an application using a native library produced with the NDK
-    <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
-      &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
-      <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:
-
-<pre style="margin:1em;">
-&lt;manifest&gt;
-  &lt;uses-sdk android:minSdkVersion="3" /&gt;
-  ...
-&lt;/manifest&gt;
-</pre>
-    </li>
-
-    <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
-    application containing the library can be deployed only to devices running the minimum platform
-    versions described in the table below. To ensure compatibility, make sure that your application
-    declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
-    following table.</li>
-
-    <li style="list-style: none; display: inline">
-      <table style="margin:1em;">
-        <tr>
-          <th>OpenGL ES Version Used</th>
-
-          <th>Compatible Android Platform(s)</th>
-
-          <th>Required uses-sdk Attribute</th>
-        </tr>
-
-        <tr>
-          <td>OpenGL ES 1.1</td>
-
-          <td>Android 1.6 (API Level 4) and higher</td>
-
-          <td><code>android:minSdkVersion="4"</code></td>
-        </tr>
-
-        <tr>
-          <td>OpenGL ES 2.0</td>
-
-          <td>Android 2.0 (API Level 5) and higher</td>
-
-          <td><code>android:minSdkVersion="5"</code></td>
-        </tr>
-      </table>
-
-      <p>For more information about API Level and its relationship to Android platform versions,
-      see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API
-Levels</a>.</p>
-    </li>
-
-    <li>Additionally, an application using the OpenGL ES APIs should declare a
-    <code>&lt;uses-feature&gt;</code> element in its manifest, with an
-    <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
-    required by the application. This ensures that Google Play will show your application only
-    to users whose devices are capable of supporting your application. For example:
-      <pre style="margin:1em;">
-&lt;manifest&gt;
-<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
-     to run only on devices that support OpenGL ES 2.0 or higher. -->
-  &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
-  ...
-&lt;/manifest&gt;
-</pre>
-
-      <p>For more information, see the <a href=
-
-"{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
-      documentation.</p>
-    </li>
-
-    <li>If you use this NDK to create a native library that uses the API to access Android {@link
-    android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
-    containing the library can be deployed only to devices running Android 2.2 (API level 8) or
-    higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
-    android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
-  </ul>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  <h2 id="Installing">Installing the NDK</h2>
-  <p>Installing the NDK on your development computer is straightforward and involves extracting the
-  NDK from its download package.</p>
-
-  <p>Before you get started make sure that you have downloaded the latest <a href=
-  "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
-  needed. The NDK is compatible with older platform versions but not older versions of the SDK
-tools.
-  Also, take a moment to review the <a href="#Reqs">System and
-Software Requirements</a>
-  for the NDK, if you haven't already.</p>
-
-  <p>To install the NDK, first download the appropriate package from the table at the top of this
-  page. Then, follow the procedure for your development platform:</p>
-       <ul>
-       <li>On Linux and Mac OS X (Darwin):
-          <ul>
-          <ol>
-          <li>Download the appropriate package from this page.</li>
-          <li>Open a terminal window.</li>
-          <li>Go to the directory to which you downloaded the package.</li>
-          <li>Run <code>chmod a+x</code> on the downloaded package.</li>
-          <li>Execute the package. For example:</li>
-          <pre>
-ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
-ndk$ ./android-ndk-r10c-darwin-x86_64.bin
-          </pre>
-          <p>The folder containing the NDK extracts itself.</p>
-          <p>Note that you can also use a program like 7z to extract the package.</p>
-          </ol>
-          </ul>
-    <li>On Windows:</li>
-       <ul>
-       <ol>
-       <li>Download the appropriate package from this page.</li>
-       <li>Navigate to the folder to which you downloaded the package.</li>
-       <li>Double-click the downloaded file. The folder containing the NDK extracts itself.</li>
-       </ol>
-       </ul>
-     </ul>When uncompressed, the NDK files are contained in a directory called
-    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
-    can move it to any location on your computer. This documentation refers to the NDK directory as
-    <code>&lt;ndk&gt;</code>.
-
-
-  <p>You are now ready to start working with the NDK.</p>
-
-
-<h2 id="GetStarted">Getting Started with the NDK</h2>
-
-<p>Once you've installed the NDK successfully, take a few minutes to read the documentation
-included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
-directory. In particular, please read the OVERVIEW.HTML document completely, so that you
-understand the intent of the NDK and how to use it.</p>
-
-<p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
-the CHANGES.HTML document.</p>
-
-<p>Here's the general outline of how you work with the NDK tools:</p>
-
-<ol>
-  <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>
-
-  <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
-  NDK build system</li>
-
-  <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>
-
-  <li>Build your native code by running the 'ndk-build' script from your project's directory. It
-  is located in the top-level NDK directory:
-    <pre class="no-pretty-print">cd &lt;project&gt;
-&lt;ndk&gt;/ndk-build
-</pre>
-
-    <p>The build tools copy the stripped, shared libraries needed by your application to the
-    proper location in the application's project directory.</p>
-  </li>
-
-  <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
-  will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
-</ol>
-
-<p>For complete information on all of the steps listed above, please see the documentation
-included with the NDK package.</p>
-
-
-<h3 id="Using">Using the NDK</h3>
-
-<p>The Android framework provides two ways to use native code:</p>
-
-<ul>
-  <li>Write your application using the Android framework and use JNI to access the APIs provided
-  by the Android NDK. This technique allows you to take advantage of the convenience of the
-  Android framework, but still allows you to write native code when necessary. If you use this
-  approach, your application must target specific, minimum Android platform levels, see <a
-  href="#platform-compat">Android platform compatibility</a> for more information.</li>
-
-  <li>
-    <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
-    code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
-    convenience class that notifies your
-    native code of any activity lifecycle callbacks (<code>onCreate()</code>,
-<code>onPause()</code>,
-    <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
-    these events when they occur. Applications that use native activities must be run on Android
-    2.3 (API Level 9) or later.</p>
-
-    <p>You cannot access features such as Services and Content Providers natively, so if you want
-    to use them or any other framework API, you can still write JNI code to do so.</p>
-  </li>
-</ul>
-
-
-
-
-
-  <h2 id="Contents">Contents of the NDK</h2>
-
-  <p>The NDK contains the APIs, documentation, and sample
-  applications that help you write your native code. Specifically:</p>
-
-  <ul>
-    <li>A set of tools and build files used to generate native code libraries from C and C++
-    sources</li>
-
-    <li>A way to embed the corresponding native libraries into an application package file
-    (<code>.apk</code>) that can be deployed on Android devices</li>
-
-    <li>A set of native system headers and libraries that will be supported in all future versions
-    of the Android platform, starting from Android 1.5. Applications that use native activities
-    must be run on Android 2.3 or later.</li>
-
-    <li>Documentation, samples, and tutorials</li>
-  </ul>
-
-  <p>The latest release of the NDK supports the following instruction sets:</p>
-
-  <ul>
-    <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
-information)</li>
-
-    <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
-    NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>
-
-    <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>
-
-    <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
-  </ul>
-
-  <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
-  devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
-  difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
-  NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
-  default, but switching to ARMv7-A is as easy as adding a single line to the application's
-  <code>Application.mk</code> file, without needing to change anything else in the file. You can
-also build for
-  both architectures at the same time and have everything stored in the final <code>.apk</code>.
-  Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>
-
-  <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
-  (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
-  "#Tools">Development tools</a> section.</p>
-
-
-  <h3 id="Tools">Development tools</h3>
-
-  <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc.) that can generate
-  native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>
-
-  <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
-  in all later releases of the platform:</p>
-
-  <ul>
-    <li>libc (C library) headers</li>
-
-    <li>libm (math library) headers</li>
-
-    <li>JNI interface headers</li>
-
-    <li>libz (Zlib compression) headers</li>
-
-    <li>liblog (Android logging) header</li>
-
-    <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>
-
-    <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>
-
-    <li>A Minimal set of headers for C++ support</li>
-
-    <li>OpenSL ES native audio libraries</li>
-
-    <li>Android native application APIS</li>
-  </ul>
-
-  <p>The NDK also provides a build system that lets you work efficiently with your sources, without
-  having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
-  describe which sources to compile and which Android application will use them &mdash; the build
-  system compiles the sources and places the shared libraries directly in your application
-  project.</p>
-
-  <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
-  native system libraries in the Android platform are <em>not</em> stable and may change in future
-  platform versions. Your applications should <em>only</em> make use of the stable native system
-  libraries provided in this NDK.</p>
-
-
-
-  <h3 id="Docs">Documentation</h3>
-
-  <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
-  how to use it to create shared libraries for your Android applications. In this release, the
-  documentation is provided only in the downloadable NDK package. You can find the documentation in
-  the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>
-
-  <ul>
-    <li>
-    INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
-    system</li>
-
-    <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>
-
-    <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
-    sources you want to compile</li>
-
-    <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
-    the native sources required by your Android application</li>
-    <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>
-    <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
-    them.</li>
-
-    <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
-    lets your application code detect the target device's CPU family and the optional features at
-    runtime.</li>
-
-    <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>
-
-    <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for
-it</li>
-
-    <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>
-
-    <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>
-
-    <li>LICENSES.HTML  &mdash; information about the various open source licenses that govern the
-Android NDK</li>
-
-    <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>
-
-    <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>
-
-    <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>
-
-    <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>
-
-    <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
-    compiler (still in beta).</li>
-
-    <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
-    aware of, if you are developing using the NDK.</li>
-
-    <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
-    NDK.</li>
-
-  </ul>
-
-  <p>Additionally, the package includes detailed information about the "bionic" C library provided
-  with the Android platform that you should be aware of, if you are developing using the NDK. You
-  can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
-
-  <ul>
-    <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
-    offers.</li>
-  </ul>
-
-
-
-
-
-<h3 id="Samples">Sample apps</h3>
-
-<p>The NDK includes sample applications that illustrate how to use native code in your Android
-  applications:</p>
-
-  <ul>
-    <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
-    method implemented in a shared library and then displays it in the application UI.</li>
-
-    <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
-    and calls a native method provided by the library. In this case, the method is implemented in a
-    static library imported by the shared library.</li>
-
-    <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
-    native OpenGL ES APIs, while managing activity lifecycle with a {@link
-    android.opengl.GLSurfaceView} object.</li>
-
-    <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
-    2.0 vertex and fragment shaders.</li>
-
-    <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
-    <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
-    if supported by the CPU. Specifically, the application implements two versions of a tiny
-    benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
-    support it.</li>
-
-    <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
-    pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
-    this to generate an old-school "plasma" effect.</li>
-
-    <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
-    native-app-glue static library to create a native activity</li>
-
-    <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
-    activity.</li>
-  </ul>
-
-  <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
-  and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
-  and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>
-
-  <p>You can build the shared libraries for the sample apps by going into
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
-  The generated shared libraries will be located under
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>
-
-  <p>Next, build the sample Android applications that use the shared libraries:</p>
-
-  <ul>
-    <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
-    Android project for each sample, using the "Import from Existing Source" option and importing
-    the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
-    if necessary, and build/run the application in the emulator.</li>
-
-    <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
-    for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
-    Then set up an AVD, if necessary, build your project in the usual way, and run it in the
-    emulator.</li>
-
-  </ul>
-
-  <p>For more information about developing with the Android SDK tools and what
-  you need to do to create, build, and run your applications, see
-  the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
-  section for developing on Android.</p>
-
-
-
-  <h4 id="hello-jni">Exploring the hello-jni Sample</h4>
-
-  <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
-  The HelloJni activity receives a string from a simple C function and displays it in a
-  TextView.</p>
-
-  <p>The main components of the sample include:</p>
-
-  <ul>
-    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
-    file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>
-
-    <li>A <code>jni/</code> directory that includes the implemented source file for the native code
-    as well as the Android.mk file</li>
-
-    <li>A <code>tests/</code> directory that contains unit test code.</li>
-  </ul>
-
-  <ol>
-    <li>Create a new project in Eclipse from the existing sample source or use the
-    <code>android</code> tool to update the project so it generates a build.xml file that you can
-    use to build the sample.
-
-      <ul>
-        <li>In Eclipse:
-
-          <ol type="a">
-            <li>Click <strong>File &gt; New Android Project...</strong></li>
-
-            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
-            <li>Select any API level above Android 1.5.</li>
-
-            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
-            the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
-            <li>Click <strong>Finish</strong>.</li>
-          </ol>
-        </li>
-
-        <li>On the command line:
-
-          <ol type="a">
-            <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
-            <li>Run the following command to generate a build.xml file:
-              <pre class="no-pretty-print">android update project -p . -s</pre>
-            </li>
-          </ol>
-        </li>
-      </ul>
-    </li>
-
-    <li>Compile the native code using the <code>ndk-build</code> command.
-      <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/samples/hello-jni
-&lt;ndk_root&gt;/ndk-build
-</pre>
-    </li>
-
-    <li>Build and install the application as you would a normal Android application. If you are
-    using Eclipse, run the application to build and install it on a device. If you are using Ant,
-    run the following commands from the project directory:
-      <pre class="no-pretty-print">
-ant debug
-adb install bin/HelloJni-debug.apk
-</pre>
-    </li>
-  </ol>
-
-  <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
-  your device. You can explore the rest of the samples that are located in the
-  <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>
-
-
-
-  <h4 id="native-activity">Exploring the native-activity Sample Application</h4>
-
-  <p>The native-activity sample provided with the Android NDK demonstrates how to use the
-  android_native_app_glue static library. This static library makes creating a native activity
-  easier by providing you with an implementation that handles your callbacks in another thread, so
-  you do not have to worry about them blocking your main UI thread. The main parts of the sample
-  are described below:</p>
-
-  <ul>
-    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
-    file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
-    that the application is native and specifies the .so file of the native activity. See {@link
-    android.app.NativeActivity} for the source or see the
-    <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>
-
-    <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
-    <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
-    describes the native module to the build system also exists here.</li>
-  </ul>
-
-  <p>To build this sample application:</p>
-
-  <ol>
-    <li>Create a new project in Eclipse from the existing sample source or use the
-    <code>android</code> tool to update the project so it generates a build.xml file that you can
-    use to build the sample.
-
-      <ul>
-        <li>In Eclipse:
-
-          <ol type="a">
-            <li>Click <strong>File &gt; New Android Project...</strong></li>
-
-            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
-            <li>Select any API level above Android 2.3.</li>
-
-            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
-            the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
-            <li>Click <strong>Finish</strong>.</li>
-          </ol>
-        </li>
-
-        <li>On the command line:
-
-          <ol type="a">
-            <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
-            <li>Run the following command to generate a build.xml file:
-              <pre class="no-pretty-print">
-android update project -p . -s
-</pre>
-            </li>
-          </ol>
-        </li>
-      </ul>
-    </li>
-
-    <li>Compile the native code using the <code>ndk-build</code> command.
-      <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
-&lt;ndk_root&gt;/ndk-build
-</pre>
-    </li>
-
-    <li>Build and install the application as you would a normal Android application. If you are
-    using Eclipse, run the application to build and install it on a device. If you are using Ant,
-    run the following commands in the project directory, then run the application on the device:
-      <pre class="no-pretty-print">
-ant debug
-adb install bin/NativeActivity-debug.apk
-</pre>
-    </li>
-  </ol>
+  <a class="dac-hero-cta" href="{@docRoot}ndk/index.html">
+     <span class="dac-sprite dac-auto-chevron"></span> NDK Documentation and Downloads</a>
diff --git a/docs/html/tools/support-library/index.jd b/docs/html/tools/support-library/index.jd
index 1dad6b8..5688d8a 100644
--- a/docs/html/tools/support-library/index.jd
+++ b/docs/html/tools/support-library/index.jd
@@ -59,9 +59,9 @@
 <p>This section provides details about the Support Library package releases.</p>
 
 
-<div class="toggle-content open">
+<div class="toggle-content opened">
   <p id="rev21"><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-open.png" class="toggle-content-img" alt=""
+    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt=""
 />Android Support Library, revision 22.2.0</a> <em>(May 2015)</em>
   </p>
   <div class="toggle-content-toggleme">
@@ -138,7 +138,6 @@
           </li>
           <li>Added the
 {@link android.support.v4.media.session.PlaybackStateCompat.Builder#addCustomAction addCustomAction()},
-{@link android.support.v4.media.session.PlaybackStateCompat.Builder#addCustomAction addCustomAction()},
 {@link android.support.v4.media.session.PlaybackStateCompat.Builder#setActiveQueueItemId setActiveQueueItemId()},
             and
             {@link android.support.v4.media.session.PlaybackStateCompat.Builder#setExtras setExtras()}
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index f90d30e..f46dcaa 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -1,12 +1,10 @@
 <ul id="nav">
 
-
-<!-- Downloads menu-->
-
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot?>sdk/index.html"><span class="en">Download</span></a></div>
+    <div class="nav-section-header"><a href="<?cs var:toroot
+?>sdk/index.html"><span class="en">Download</span></a></div>
     <ul>
-            <li><a href="<?cs var:toroot ?>sdk/installing/index.html">
+      <li><a href="<?cs var:toroot ?>sdk/installing/index.html">
           <span class="en">Installing the SDK</span></a></li>
 
       <li><a href="<?cs var:toroot ?>sdk/installing/adding-packages.html">
@@ -18,13 +16,15 @@
 <!-- Android Studio menu-->
 
  <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot?>tools/studio/index.html"><span class="en">Android Studio</span></a></div>
-       <ul>
-         <li><a href="<?cs var:toroot ?>sdk/installing/studio-tips.html">Tips and Tricks</a> </li>
-       </ul>
+    <div class="nav-section-header">
+      <a href="<?cs var:toroot?>tools/studio/index.html">Android Studio</a>
+    </div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>sdk/installing/studio-tips.html">
+          Tips and Tricks</a></li>
+    </ul>
 
- </li><!-- End of Android Studio Basics -->
-
+ </li><!-- End of Android Studio menu -->
 
 
 <!-- Workflow menu-->
@@ -70,6 +70,7 @@
           <li><a href="<?cs var:toroot ?>tools/building/building-cmdline.html">
             <span class="en">From the Command Line</span></a></li>
         </ul>
+      </li>
 
 
   <li class="nav-section">
@@ -81,8 +82,8 @@
             <a href="<?cs var:toroot?>tools/testing/testing_android.html">
             <span class="en">Fundamentals</span></a>
           </li>
-          <li><a href="<?cs var:toroot ?>tools/testing/testing_studio.html">
-            <span class="en">From Android Studio</span></a>
+          <li><a href="<?cs var:toroot ?>tools/testing/testing_eclipse.html">
+            <span class="en">From Eclipse</span></a>
           </li>
           <li><a href="<?cs var:toroot ?>tools/testing/testing_otheride.html">
             <span class="en">From Other IDEs</span></a>
@@ -143,14 +144,12 @@
         </ul>
       </li>
     </ul>
-  </li><!-- end of debugging -->
+  </li>
 
 
-
-<!-- Tool Help menu-->
-
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/help/index.html"><span class="en">Tools Help</span></a></div>
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/help/index.html"><span
+class="en">Tools Help</span></a></div>
     <ul>
       <li><a href="<?cs var:toroot ?>tools/help/adb.html">adb</a></li>
       <li><a href="<?cs var:toroot ?>tools/help/android.html">android</a></li>
@@ -175,6 +174,7 @@
        <li><a href="<?cs var:toroot ?>tools/help/zipalign.html">zipalign</a></li>
     </ul>
   </li>
+
   </li><!-- end of tools help -->
 
 
@@ -294,6 +294,13 @@
     </ul>
   </li><!-- end of support library -->
 
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/data-binding/index.html"><span
+class="en">Data Binding Library</span></a></div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/data-binding/guide.html">Guide</a></li>
+    </ul>
+  </li><!-- end of support library -->
 
 
 <!-- Revision menu-->
@@ -305,10 +312,9 @@
       <li><a href="<?cs var:toroot ?>tools/revisions/studio.html">
         <span class="en">Android Studio</span>
       </a></li>
-      <li><a href="<?cs var:toroot ?>tools/revisions/sdk/tools-notes.html">
+      <li><a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">
         <span class="en">SDK Tools</span>
       </a></li>
-      </a></li>
       <li><a href="<?cs var:toroot ?>tools/revisions/build-tools.html">
         <span class="en">SDK Build Tools</span>
       </a></li>
@@ -320,23 +326,15 @@
       <li><a href="<?cs var:toroot ?>tools/sdk/eclipse-adt.html">
         <span class="en">ADT Plugin</span></a></li>
     </ul>
-  </li><!-- end of revision -->
-
-
-
-<!-- NDK menu-->
+  </li>
 
   <li class="nav-section">
     <div class="nav-section-header empty">
-      <a href="<?cs var:toroot ?>tools/ndk/index.html">NDK</a>
+      <a href="<?cs var:toroot ?>tools/sdk/ndk/index.html">NDK</a>
     </div>
-  </li><!-- end of NDK -->
+  </li>
 
-
-
-<!-- ADK menu-->
-
-  <li class="nav-section">
+<!--  <li class="nav-section">
     <div class="nav-section-header">
     <a href="<?cs var:toroot ?>tools/adk/index.html">
       <span class="en">ADK</span></a>
@@ -345,8 +343,7 @@
       <li><a href="<?cs var:toroot ?>tools/adk/adk2.html">ADK 2012 Guide</a></li>
       <li><a href="<?cs var:toroot ?>tools/adk/adk.html">ADK 2011 Guide</a></li>
     </ul>
-  </li><!-- end of ADK -->
-
+  </li> -->
 
 
 <!-- Eclipse ADT menu-->
diff --git a/docs/html/training/run-background-service/create-service.jd b/docs/html/training/run-background-service/create-service.jd
index 5f4799c..9b9fcd2 100644
--- a/docs/html/training/run-background-service/create-service.jd
+++ b/docs/html/training/run-background-service/create-service.jd
@@ -55,8 +55,8 @@
     </li>
 </ul>
 <p>
-    However, in most cases an {@link android.app.IntentService} is the preferred way to simple
-    background operations.
+    However, in most cases an {@link android.app.IntentService} is the preferred way to perform
+    simple background operations.
 </p>
 <p>
     This lesson shows you how to create your own subclass of {@link android.app.IntentService}.
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index 28c26ff..b8f64a4 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -31,6 +31,7 @@
 import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.view.View;
 
 import com.android.internal.R;
 
@@ -200,7 +201,7 @@
     }
 
     @Override
-    public boolean onLayoutDirectionChange(int layoutDirection) {
+    public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection) {
         return mAnimatedVectorState.mVectorDrawable.setLayoutDirection(layoutDirection);
     }
 
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 22ff3e74..e8e4664 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -276,7 +276,7 @@
     public void setDither(boolean dither) {}
 
     /**
-     * @return whether this drawable dither its colors
+     * @return whether this drawable dithers its colors
      * @see #setDither(boolean)
      */
     public boolean getDither() {
@@ -295,7 +295,7 @@
      * @return whether this drawable filters its bitmap
      * @see #setFilterBitmap(boolean)
      */
-    public boolean getFilterBitmap() {
+    public boolean isFilterBitmap() {
         return false;
     }
 
@@ -444,7 +444,7 @@
     public final boolean setLayoutDirection(@View.ResolvedLayoutDir int layoutDirection) {
         if (mLayoutDirection != layoutDirection) {
             mLayoutDirection = layoutDirection;
-            return onLayoutDirectionChange(layoutDirection);
+            return onLayoutDirectionChanged(layoutDirection);
         }
         return false;
     }
@@ -457,7 +457,7 @@
      *         the drawable to change and it needs to be re-drawn
      * @see #setLayoutDirection(int)
      */
-    public boolean onLayoutDirectionChange(@View.ResolvedLayoutDir int layoutDirection) {
+    public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection) {
         return false;
     }
 
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index 4a06805..8b801c3 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -31,6 +31,7 @@
 import android.os.SystemClock;
 import android.util.LayoutDirection;
 import android.util.SparseArray;
+import android.view.View;
 
 import java.util.Collection;
 
@@ -337,7 +338,7 @@
     }
 
     @Override
-    public boolean onLayoutDirectionChange(int layoutDirection) {
+    public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection) {
         // Let the container handle setting its own layout direction. Otherwise,
         // we're accessing potentially unused states.
         return mDrawableContainerState.setLayoutDirection(layoutDirection, getCurrentIndex());
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
index bd8eae0..58d43f9 100644
--- a/graphics/java/android/graphics/drawable/DrawableWrapper.java
+++ b/graphics/java/android/graphics/drawable/DrawableWrapper.java
@@ -258,7 +258,7 @@
     }
 
     @Override
-    public boolean onLayoutDirectionChange(@View.ResolvedLayoutDir int layoutDirection) {
+    public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection) {
         return mDrawable != null && mDrawable.setLayoutDirection(layoutDirection);
     }
 
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index e5b4612..5c00a23 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -1662,7 +1662,7 @@
     }
 
     @Override
-    public boolean onLayoutDirectionChange(int layoutDirection) {
+    public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection) {
         boolean changed = false;
 
         final ChildDrawable[] array = mLayerState.mChildren;
diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
index 1d4c188..d861302 100644
--- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
@@ -743,7 +743,7 @@
          * <p>This restriction applies only to private key operations. Public key operations are not
          * restricted.
          *
-         * <p><b>NOTE: This has currently no effect.</b>
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.</b>
          *
          * @see #setUserAuthenticationValidityDurationSeconds(int)
          */
@@ -759,7 +759,7 @@
          *
          * <p>By default, the user needs to authenticate for every use of the key.
          *
-         * <p><b>NOTE: This has currently no effect.</b>
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.</b>
          *
          * @param seconds duration in seconds or {@code -1} if the user needs to authenticate for
          *        every use of the key.
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 723a177..7dbe3b7 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -29,7 +29,7 @@
 bool Properties::debugOverdraw = false;
 bool Properties::showDirtyRegions = false;
 bool Properties::skipEmptyFrames = true;
-bool Properties::swapBuffersWithDamage = false;
+bool Properties::swapBuffersWithDamage = true;
 
 DebugLevel Properties::debugLevel = kDebugDisabled;
 OverdrawColorSet Properties::overdrawColorSet = OverdrawColorSet::Default;
@@ -104,7 +104,7 @@
     }
 
     skipEmptyFrames = property_get_bool(PROPERTY_SKIP_EMPTY_DAMAGE, true);
-    swapBuffersWithDamage = property_get_bool(PROPERTY_SWAP_WITH_DAMAGE, false);
+    swapBuffersWithDamage = property_get_bool(PROPERTY_SWAP_WITH_DAMAGE, true);
 
     return (prevDebugLayersUpdates != debugLayersUpdates)
             || (prevDebugOverdraw != debugOverdraw)
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 9146b68..9e5ec28 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -83,8 +83,9 @@
  * display list. This function should remain in sync with the replay() function.
  */
 void RenderNode::output(uint32_t level) {
-    ALOGD("%*sStart display list (%p, %s%s%s%s)", (level - 1) * 2, "", this,
+    ALOGD("%*sStart display list (%p, %s%s%s%s%s)", (level - 1) * 2, "", this,
             getName(),
+            (MathUtils::isZero(properties().getAlpha()) ? ", zero alpha" : ""),
             (properties().hasShadow() ? ", casting shadow" : ""),
             (isRenderable() ? "" : ", empty"),
             (mLayer != nullptr ? ", on HW Layer" : ""));
diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp
index 7b75690..07b8ce6 100644
--- a/libs/hwui/RenderProperties.cpp
+++ b/libs/hwui/RenderProperties.cpp
@@ -146,12 +146,12 @@
 
     const bool isLayer = effectiveLayerType() != LayerType::None;
     int clipFlags = getClippingFlags();
-    if (mPrimitiveFields.mAlpha < 1) {
+    if (mPrimitiveFields.mAlpha < 1
+            && !MathUtils::isZero(mPrimitiveFields.mAlpha)) {
         if (isLayer) {
             clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer
         }
 
-        LOG_ALWAYS_FATAL_IF(!isLayer && mPrimitiveFields.mHasOverlappingRendering);
         ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
     }
     if (clipFlags) {
diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp
index d7c8316..df12e63 100644
--- a/libs/hwui/renderstate/RenderState.cpp
+++ b/libs/hwui/renderstate/RenderState.cpp
@@ -266,10 +266,10 @@
         mCaches->textureState().activateTexture(0);
 
         if (texture.clamp != GL_INVALID_ENUM) {
-            texture.texture->setWrap(texture.clamp, true);
+            texture.texture->setWrap(texture.clamp, true, false, texture.target);
         }
         if (texture.filter != GL_INVALID_ENUM) {
-            texture.texture->setFilter(texture.filter, true);
+            texture.texture->setFilter(texture.filter, true, false, texture.target);
         }
 
         mCaches->textureState().bindTexture(texture.target, texture.texture->id);
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index c0e7c73..cb34e00 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -256,7 +256,7 @@
 #endif
 
 #ifdef EGL_KHR_swap_buffers_with_damage
-    if (CC_UNLIKELY(Properties::swapBuffersWithDamage)) {
+    if (CC_LIKELY(Properties::swapBuffersWithDamage)) {
         SkIRect idirty;
         dirty.roundOut(&idirty);
         /*
@@ -273,11 +273,6 @@
         // layout: {x, y, width, height}
         EGLint rects[4] = { idirty.x(), y, idirty.width(), idirty.height() };
         EGLint numrects = dirty.isEmpty() ? 0 : 1;
-        // TODO: Remove prior to enabling this path by default
-        ALOGD("Swap buffers with damage %d: %d, %d, %d, %d (src="
-                RECT_STRING ")",
-                dirty.isEmpty() ? 0 : 1, rects[0], rects[1], rects[2], rects[3],
-                SK_RECT_ARGS(dirty));
         eglSwapBuffersWithDamageKHR(mEglDisplay, surface, rects, numrects);
     } else {
         eglSwapBuffers(mEglDisplay, surface);
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index 0e67daa..b2fa0ac 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -106,9 +106,6 @@
     public static final String MIMETYPE_AUDIO_FLAC = "audio/flac";
     public static final String MIMETYPE_AUDIO_MSGSM = "audio/gsm";
     public static final String MIMETYPE_AUDIO_AC3 = "audio/ac3";
-    /**
-     * @hide
-     */
     public static final String MIMETYPE_AUDIO_EAC3 = "audio/eac3";
 
     /**
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CopyService.java b/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
index 6e050c6..506ec5833 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
@@ -173,8 +173,6 @@
                         .setAutoCancel(true);
                 mNotificationManager.notify(mJobId, 0, errorBuilder.build());
             }
-
-            // TODO: Display a toast if the copy was cancelled.
         }
     }
 
@@ -306,13 +304,15 @@
     private void handleCancel(Intent intent) {
         final String cancelledId = intent.getStringExtra(EXTRA_CANCEL);
         // Do nothing if the cancelled ID doesn't match the current job ID. This prevents racey
-        // cancellation requests from affecting unrelated copy jobs.
-        if (Objects.equals(mJobId, cancelledId)) {
+        // cancellation requests from affecting unrelated copy jobs.  However, if the current job ID
+        // is null, the service most likely crashed and was revived by the incoming cancel intent.
+        // In that case, always allow the cancellation to proceed.
+        if (Objects.equals(mJobId, cancelledId) || mJobId == null) {
             // Set the cancel flag. This causes the copy loops to exit.
             mIsCancelled = true;
             // Dismiss the progress notification here rather than in the copy loop. This preserves
             // interactivity for the user in case the copy loop is stalled.
-            mNotificationManager.cancel(mJobId, 0);
+            mNotificationManager.cancel(cancelledId, 0);
         }
     }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
index 6295de4..4edc1c9 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
@@ -114,35 +114,40 @@
         if (mPendingLockCheck != null) {
             mPendingLockCheck.cancel(false);
         }
+
+        if (entry.length() < MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT) {
+            // to avoid accidental lockout, only count attempts that are long enough to be a
+            // real password. This may require some tweaking.
+            setPasswordEntryInputEnabled(true);
+            onPasswordChecked(entry, false, 0);
+            return;
+        }
+
         mPendingLockCheck = LockPatternChecker.checkPassword(
                 mLockPatternUtils,
                 entry,
                 KeyguardUpdateMonitor.getCurrentUser(),
                 new LockPatternChecker.OnCheckCallback() {
                     @Override
-                    public void onChecked(boolean matched) {
+                    public void onChecked(boolean matched, int timeoutMs) {
                         setPasswordEntryInputEnabled(true);
                         mPendingLockCheck = null;
-                        onPasswordChecked(entry, matched);
+                        onPasswordChecked(entry, matched, timeoutMs);
                     }
                 });
     }
 
-    private void onPasswordChecked(String entry, boolean matched) {
+    private void onPasswordChecked(String entry, boolean matched, int timeoutMs) {
         if (matched) {
-            mCallback.reportUnlockAttempt(true);
+            mCallback.reportUnlockAttempt(true, 0);
             mCallback.dismiss(true);
         } else {
-            if (entry.length() > MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT ) {
-                // to avoid accidental lockout, only count attempts that are long enough to be a
-                // real password. This may require some tweaking.
-                mCallback.reportUnlockAttempt(false);
-                int attempts = KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts();
-                if (0 == (attempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
-                    long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
-                            KeyguardUpdateMonitor.getCurrentUser());
-                    handleAttemptLockout(deadline);
-                }
+            mCallback.reportUnlockAttempt(false, timeoutMs);
+            int attempts = KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts();
+            if (timeoutMs > 0) {
+                long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), timeoutMs);
+                handleAttemptLockout(deadline);
             }
             mSecurityMessageDisplay.setMessage(getWrongPasswordStringId(), true);
         }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
index 35c6873..ed595c0 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
@@ -224,23 +224,30 @@
                 mPendingLockCheck.cancel(false);
             }
 
+            if (pattern.size() < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) {
+                mLockPatternView.enableInput();
+                onPatternChecked(pattern, false, 0);
+                return;
+            }
+
             mPendingLockCheck = LockPatternChecker.checkPattern(
                     mLockPatternUtils,
                     pattern,
                     KeyguardUpdateMonitor.getCurrentUser(),
                     new LockPatternChecker.OnCheckCallback() {
                         @Override
-                        public void onChecked(boolean matched) {
+                        public void onChecked(boolean matched, int timeoutMs) {
                             mLockPatternView.enableInput();
                             mPendingLockCheck = null;
-                            onPatternChecked(pattern, matched);
+                            onPatternChecked(pattern, matched, timeoutMs);
                         }
                     });
         }
 
-        private void onPatternChecked(List<LockPatternView.Cell> pattern, boolean matched) {
+        private void onPatternChecked(List<LockPatternView.Cell> pattern, boolean matched,
+                int timeoutMs) {
             if (matched) {
-                mCallback.reportUnlockAttempt(true);
+                mCallback.reportUnlockAttempt(true, 0);
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct);
                 mCallback.dismiss(true);
             } else {
@@ -248,16 +255,11 @@
                     mCallback.userActivity();
                 }
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
-                boolean registeredAttempt =
-                        pattern.size() >= LockPatternUtils.MIN_PATTERN_REGISTER_FAIL;
-                if (registeredAttempt) {
-                    mCallback.reportUnlockAttempt(false);
-                }
+                mCallback.reportUnlockAttempt(false, timeoutMs);
                 int attempts = mKeyguardUpdateMonitor.getFailedUnlockAttempts();
-                if (registeredAttempt &&
-                        0 == (attempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
+                if (timeoutMs > 0) {
                     long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
-                            KeyguardUpdateMonitor.getCurrentUser());
+                            KeyguardUpdateMonitor.getCurrentUser(), timeoutMs);
                     handleAttemptLockout(deadline);
                 } else {
                     mSecurityMessageDisplay.setMessage(R.string.kg_wrong_pattern, true);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
index 5877bc8..836c195 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
@@ -37,8 +37,10 @@
     /**
      * Call to report an unlock attempt.
      * @param success set to 'true' if user correctly entered security credentials.
+     * @param timeoutMs timeout in milliseconds to wait before reattempting an unlock.
+     *                  Only nonzero if 'success' is false
      */
-    void reportUnlockAttempt(boolean success);
+    void reportUnlockAttempt(boolean success, int timeoutMs);
 
     /**
      * Resets the keyguard view.
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index 4d89a8d..d17b25a 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -176,8 +176,8 @@
         dialog.show();
     }
 
-    private void showTimeoutDialog() {
-        int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
+    private void showTimeoutDialog(int timeoutMs) {
+        int timeoutInSeconds = (int) timeoutMs / 1000;
         int messageId = 0;
 
         switch (mSecurityModel.getSecurityMode()) {
@@ -244,16 +244,7 @@
         showDialog(null, message);
     }
 
-    private void showAlmostAtAccountLoginDialog() {
-        final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
-        final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
-                - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
-        String message = mContext.getString(R.string.kg_failed_attempts_almost_at_login,
-                count, LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT, timeoutInSeconds);
-        showDialog(null, message);
-    }
-
-    private void reportFailedUnlockAttempt() {
+    private void reportFailedUnlockAttempt(int timeoutMs) {
         final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
         final int failedAttempts = monitor.getFailedUnlockAttempts() + 1; // +1 for this time
 
@@ -290,14 +281,11 @@
                 Slog.i(TAG, "Too many unlock attempts; user " + expiringUser + " will be wiped!");
                 showWipeDialog(failedAttempts, userType);
             }
-        } else {
-            showTimeout =
-                (failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
         }
         monitor.reportFailedUnlockAttempt();
         mLockPatternUtils.reportFailedPasswordAttempt(KeyguardUpdateMonitor.getCurrentUser());
-        if (showTimeout) {
-            showTimeoutDialog();
+        if (timeoutMs > 0) {
+            showTimeoutDialog(timeoutMs);
         }
     }
 
@@ -425,14 +413,14 @@
             return mIsVerifyUnlockOnly;
         }
 
-        public void reportUnlockAttempt(boolean success) {
+        public void reportUnlockAttempt(boolean success, int timeoutMs) {
             KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
             if (success) {
                 monitor.clearFailedUnlockAttempts();
                 mLockPatternUtils.reportSuccessfulPasswordAttempt(
                         KeyguardUpdateMonitor.getCurrentUser());
             } else {
-                KeyguardSecurityContainer.this.reportFailedUnlockAttempt();
+                KeyguardSecurityContainer.this.reportFailedUnlockAttempt(timeoutMs);
             }
         }
 
@@ -448,7 +436,7 @@
         @Override
         public void userActivity() { }
         @Override
-        public void reportUnlockAttempt(boolean success) { }
+        public void reportUnlockAttempt(boolean success, int timeoutMs) { }
         @Override
         public boolean isVerifyUnlockOnly() { return false; }
         @Override
diff --git a/packages/PrintSpooler/res/values/themes.xml b/packages/PrintSpooler/res/values/themes.xml
index db319e9..05de5b7 100644
--- a/packages/PrintSpooler/res/values/themes.xml
+++ b/packages/PrintSpooler/res/values/themes.xml
@@ -16,7 +16,7 @@
 
 <resources>
 
-    <style name="PrintActivity" parent="@android:style/Theme.Material.Settings">
+    <style name="PrintActivity" parent="@android:style/Theme.DeviceDefault">
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:windowContentOverlay">@null</item>
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index 4b65dec..c01d816 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -66,13 +66,13 @@
 # when notifications are newly displayed on screen, or disappear from screen
 27510 notification_visibility_changed (newlyVisibleKeys|3),(noLongerVisibleKeys|3)
 # when notifications are expanded, or contracted
-27511 notification_expansion (key|3),(user_action|1),(expanded|1)
+27511 notification_expansion (key|3),(user_action|1),(expanded|1),(lifespan|1),(freshness|1),(exposure|1)
 # when a notification has been clicked
-27520 notification_clicked (key|3)
+27520 notification_clicked (key|3),(lifespan|1),(freshness|1),(exposure|1)
 # when a notification action button has been clicked
-27521 notification_action_clicked (key|3),(action_index|1)
+27521 notification_action_clicked (key|3),(action_index|1),(lifespan|1),(freshness|1),(exposure|1)
 # when a notification has been canceled
-27530 notification_canceled (key|3),(reason|1),(lifespan|1),(exposure|1)
+27530 notification_canceled (key|3),(reason|1),(lifespan|1),(freshness|1),(exposure|1)
 # replaces 27510 with a row per notification
 27531 notification_visibility (key|3),(visibile|1),(lifespan|1),(freshness|1)
 
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 2df7f79..f6ca0d7 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -25,11 +25,9 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
-
 import static android.Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE;
 import static android.content.Context.USER_SERVICE;
 import static android.Manifest.permission.READ_PROFILE;
-
 import android.database.sqlite.SQLiteDatabase;
 import android.os.Binder;
 import android.os.IBinder;
@@ -44,6 +42,7 @@
 import android.provider.Settings.Secure;
 import android.provider.Settings.SettingNotFoundException;
 import android.security.KeyStore;
+import android.service.gatekeeper.GateKeeperResponse;
 import android.service.gatekeeper.IGateKeeperService;
 import android.text.TextUtils;
 import android.util.Slog;
@@ -51,6 +50,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.widget.ILockSettings;
 import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.VerifyCredentialResponse;
 import com.android.server.LockSettingsStorage.CredentialHash;
 
 import java.util.Arrays;
@@ -76,6 +76,12 @@
     private boolean mFirstCallToVold;
     private IGateKeeperService mGateKeeperService;
 
+    private interface CredentialUtil {
+        void setCredential(String credential, String savedCredential, int userId)
+                throws RemoteException;
+        byte[] toHash(String credential, int userId);
+    }
+
     public LockSettingsService(Context context) {
         mContext = context;
         // Open the database
@@ -468,155 +474,163 @@
         byte[] toEnrollBytes = toEnroll == null
                 ? null
                 : toEnroll.getBytes();
-        byte[] hash = getGateKeeperService().enroll(userId, enrolledHandle, enrolledCredentialBytes,
-                toEnrollBytes);
+        GateKeeperResponse response = getGateKeeperService().enroll(userId, enrolledHandle,
+                enrolledCredentialBytes, toEnrollBytes);
 
-        if (hash != null) {
-            setKeystorePassword(toEnroll, userId);
+        if (response == null) {
+            return null;
         }
 
+        byte[] hash = response.getPayload();
+        if (hash != null) {
+            setKeystorePassword(toEnroll, userId);
+        } else {
+            // Should not happen
+            Slog.e(TAG, "Throttled while enrolling a password");
+        }
         return hash;
     }
 
     @Override
-    public boolean checkPattern(String pattern, int userId) throws RemoteException {
-        try {
-            doVerifyPattern(pattern, false, 0, userId);
-        } catch (VerificationFailedException ex) {
-            return false;
-        }
-
-        return true;
+    public VerifyCredentialResponse checkPattern(String pattern, int userId) throws RemoteException {
+        return doVerifyPattern(pattern, false, 0, userId);
     }
 
     @Override
-    public byte[] verifyPattern(String pattern, long challenge, int userId)
+    public VerifyCredentialResponse verifyPattern(String pattern, long challenge, int userId)
             throws RemoteException {
-        try {
-            return doVerifyPattern(pattern, true, challenge, userId);
-        } catch (VerificationFailedException ex) {
-            return null;
-        }
+        return doVerifyPattern(pattern, true, challenge, userId);
     }
 
-    private byte[] doVerifyPattern(String pattern, boolean hasChallenge, long challenge,
-            int userId) throws VerificationFailedException, RemoteException {
+    private VerifyCredentialResponse doVerifyPattern(String pattern, boolean hasChallenge, long challenge,
+            int userId) throws RemoteException {
        checkPasswordReadPermission(userId);
-
        CredentialHash storedHash = mStorage.readPatternHash(userId);
+       return verifyCredential(userId, storedHash, pattern, hasChallenge,
+               challenge,
+               new CredentialUtil() {
+                   @Override
+                   public void setCredential(String pattern, String oldPattern, int userId)
+                           throws RemoteException {
+                       setLockPattern(pattern, oldPattern, userId);
+                   }
 
-        if ((storedHash == null || storedHash.hash.length == 0) && TextUtils.isEmpty(pattern)) {
-            // don't need to pass empty passwords to GateKeeper
-            return null;
-        }
-
-        if (TextUtils.isEmpty(pattern)) {
-            throw new VerificationFailedException();
-        }
-
-        if (storedHash.version == CredentialHash.VERSION_LEGACY) {
-            byte[] hash = mLockPatternUtils.patternToHash(
-                    mLockPatternUtils.stringToPattern(pattern));
-            if (Arrays.equals(hash, storedHash.hash)) {
-                unlockKeystore(pattern, userId);
-                // migrate password to GateKeeper
-                setLockPattern(pattern, null, userId);
-                if (!hasChallenge) {
-                    return null;
-                }
-                // Fall through to get the auth token. Technically this should never happen,
-                // as a user that had a legacy pattern would have to unlock their device
-                // before getting to a flow with a challenge, but supporting for consistency.
-            } else {
-                throw new VerificationFailedException();
-            }
-        }
-
-        byte[] token = null;
-        if (hasChallenge) {
-            token = getGateKeeperService()
-                    .verifyChallenge(userId, challenge, storedHash.hash, pattern.getBytes());
-            if (token == null) {
-                throw new VerificationFailedException();
-            }
-        } else if (!getGateKeeperService().verify(userId, storedHash.hash, pattern.getBytes())) {
-            throw new VerificationFailedException();
-        }
-
-        // pattern has matched
-        unlockKeystore(pattern, userId);
-        return token;
-
+                   @Override
+                   public byte[] toHash(String pattern, int userId) {
+                       return mLockPatternUtils.patternToHash(
+                               mLockPatternUtils.stringToPattern(pattern));
+                   }
+               }
+       );
     }
 
     @Override
-    public boolean checkPassword(String password, int userId) throws RemoteException {
-        try {
-            doVerifyPassword(password, false, 0, userId);
-        } catch (VerificationFailedException ex) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public byte[] verifyPassword(String password, long challenge, int userId)
+    public VerifyCredentialResponse checkPassword(String password, int userId)
             throws RemoteException {
-        try {
-            return doVerifyPassword(password, true, challenge, userId);
-        } catch (VerificationFailedException ex) {
-            return null;
-        }
+        return doVerifyPassword(password, false, 0, userId);
     }
 
-    private byte[] doVerifyPassword(String password, boolean hasChallenge, long challenge,
-            int userId) throws VerificationFailedException, RemoteException {
+    @Override
+    public VerifyCredentialResponse verifyPassword(String password, long challenge, int userId)
+            throws RemoteException {
+        return doVerifyPassword(password, true, challenge, userId);
+    }
+
+    private VerifyCredentialResponse doVerifyPassword(String password, boolean hasChallenge,
+            long challenge, int userId) throws RemoteException {
        checkPasswordReadPermission(userId);
-
        CredentialHash storedHash = mStorage.readPasswordHash(userId);
+       return verifyCredential(userId, storedHash, password, hasChallenge, challenge,
+               new CredentialUtil() {
+                   @Override
+                   public void setCredential(String password, String oldPassword, int userId)
+                           throws RemoteException {
+                       setLockPassword(password, oldPassword, userId);
+                   }
 
-        if ((storedHash == null || storedHash.hash.length == 0) && TextUtils.isEmpty(password)) {
-            // don't need to pass empty passwords to GateKeeper
-            return null;
+                   @Override
+                   public byte[] toHash(String password, int userId) {
+                       return mLockPatternUtils.passwordToHash(password, userId);
+                   }
+               }
+       );
+    }
+
+    private VerifyCredentialResponse verifyCredential(int userId, CredentialHash storedHash,
+            String credential, boolean hasChallenge, long challenge, CredentialUtil credentialUtil)
+                throws RemoteException {
+        if ((storedHash == null || storedHash.hash.length == 0) && TextUtils.isEmpty(credential)) {
+            // don't need to pass empty credentials to GateKeeper
+            return VerifyCredentialResponse.OK;
         }
 
-        if (TextUtils.isEmpty(password)) {
-            throw new VerificationFailedException();
+        if (TextUtils.isEmpty(credential)) {
+            return VerifyCredentialResponse.ERROR;
         }
 
         if (storedHash.version == CredentialHash.VERSION_LEGACY) {
-            byte[] hash = mLockPatternUtils.passwordToHash(password, userId);
+            byte[] hash = credentialUtil.toHash(credential, userId);
             if (Arrays.equals(hash, storedHash.hash)) {
-                unlockKeystore(password, userId);
-                // migrate password to GateKeeper
-                setLockPassword(password, null, userId);
+                unlockKeystore(credential, userId);
+                // migrate credential to GateKeeper
+                credentialUtil.setCredential(credential, null, userId);
                 if (!hasChallenge) {
-                    return null;
+                    return VerifyCredentialResponse.OK;
                 }
                 // Fall through to get the auth token. Technically this should never happen,
-                // as a user that had a legacy password would have to unlock their device
+                // as a user that had a legacy credential would have to unlock their device
                 // before getting to a flow with a challenge, but supporting for consistency.
             } else {
-                throw new VerificationFailedException();
+                return VerifyCredentialResponse.ERROR;
             }
         }
 
-        byte[] token = null;
+        VerifyCredentialResponse response;
+        boolean shouldReEnroll = false;;
         if (hasChallenge) {
-            token = getGateKeeperService()
-                    .verifyChallenge(userId, challenge, storedHash.hash, password.getBytes());
-            if (token == null) {
-                throw new VerificationFailedException();
+            byte[] token = null;
+            GateKeeperResponse gateKeeperResponse = getGateKeeperService()
+                    .verifyChallenge(userId, challenge, storedHash.hash, credential.getBytes());
+            int responseCode = gateKeeperResponse.getResponseCode();
+            if (responseCode == GateKeeperResponse.RESPONSE_RETRY) {
+                 response = new VerifyCredentialResponse(gateKeeperResponse.getTimeout());
+            } else if (responseCode == GateKeeperResponse.RESPONSE_OK) {
+                token = gateKeeperResponse.getPayload();
+                if (token == null) {
+                    // something's wrong if there's no payload with a challenge
+                    Slog.e(TAG, "verifyChallenge response had no associated payload");
+                    response = VerifyCredentialResponse.ERROR;
+                } else {
+                    shouldReEnroll = gateKeeperResponse.getShouldReEnroll();
+                    response = new VerifyCredentialResponse(token);
+                }
+            } else {
+                response = VerifyCredentialResponse.ERROR;
             }
-        } else if (!getGateKeeperService().verify(userId, storedHash.hash, password.getBytes())) {
-            throw new VerificationFailedException();
+        } else {
+            GateKeeperResponse gateKeeperResponse = getGateKeeperService().verify(
+                    userId, storedHash.hash, credential.getBytes());
+            int responseCode = gateKeeperResponse.getResponseCode();
+            if (responseCode == GateKeeperResponse.RESPONSE_RETRY) {
+                response = new VerifyCredentialResponse(gateKeeperResponse.getTimeout());
+            } else if (responseCode == GateKeeperResponse.RESPONSE_OK) {
+                shouldReEnroll = gateKeeperResponse.getShouldReEnroll();
+                response = VerifyCredentialResponse.OK;
+            } else {
+                response = VerifyCredentialResponse.ERROR;
+            }
         }
 
-        // password has matched
-        unlockKeystore(password, userId);
-        return token;
-    }
+        if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
+            // credential has matched
+            unlockKeystore(credential, userId);
+            if (shouldReEnroll) {
+                credentialUtil.setCredential(credential, credential, userId);
+            }
+        }
 
+        return response;
+    }
 
     @Override
     public boolean checkVoldPassword(int userId) throws RemoteException {
@@ -644,7 +658,8 @@
 
         try {
             if (mLockPatternUtils.isLockPatternEnabled(userId)) {
-                if (checkPattern(password, userId)) {
+                if (checkPattern(password, userId).getResponseCode()
+                        == GateKeeperResponse.RESPONSE_OK) {
                     return true;
                 }
             }
@@ -653,7 +668,8 @@
 
         try {
             if (mLockPatternUtils.isLockPasswordEnabled(userId)) {
-                if (checkPassword(password, userId)) {
+                if (checkPassword(password, userId).getResponseCode()
+                        == GateKeeperResponse.RESPONSE_OK) {
                     return true;
                 }
             }
@@ -741,6 +757,4 @@
         return null;
     }
 
-    private class VerificationFailedException extends Exception {}
-
 }
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index e63be92..2b6f8e1 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3427,7 +3427,8 @@
                 if (preferredComponent != null) {
                     ai = AppGlobals.getPackageManager().getActivityInfo(
                             preferredComponent, flags, userId);
-                } else {
+                }
+                if (ai == null) {
                     ResolveInfo info = AppGlobals.getPackageManager().resolveIntent(
                             intent,
                             intent.resolveTypeIfNeeded(mContext.getContentResolver()),
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 2be409a..c8ab10a 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -555,12 +555,15 @@
         @Override
         public void onNotificationClick(int callingUid, int callingPid, String key) {
             synchronized (mNotificationList) {
-                EventLogTags.writeNotificationClicked(key);
                 NotificationRecord r = mNotificationsByKey.get(key);
                 if (r == null) {
                     Log.w(TAG, "No notification with key: " + key);
                     return;
                 }
+                final long now = System.currentTimeMillis();
+                EventLogTags.writeNotificationClicked(key,
+                        r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
+
                 StatusBarNotification sbn = r.sbn;
                 cancelNotification(callingUid, callingPid, sbn.getPackageName(), sbn.getTag(),
                         sbn.getId(), Notification.FLAG_AUTO_CANCEL,
@@ -573,12 +576,14 @@
         public void onNotificationActionClick(int callingUid, int callingPid, String key,
                 int actionIndex) {
             synchronized (mNotificationList) {
-                EventLogTags.writeNotificationActionClicked(key, actionIndex);
                 NotificationRecord r = mNotificationsByKey.get(key);
                 if (r == null) {
                     Log.w(TAG, "No notification with key: " + key);
                     return;
                 }
+                final long now = System.currentTimeMillis();
+                EventLogTags.writeNotificationActionClicked(key, actionIndex,
+                        r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
                 // TODO: Log action click via UsageStats.
             }
         }
@@ -685,11 +690,14 @@
         @Override
         public void onNotificationExpansionChanged(String key,
                 boolean userAction, boolean expanded) {
-            EventLogTags.writeNotificationExpansion(key, userAction ? 1 : 0, expanded ? 1 : 0);
             synchronized (mNotificationList) {
                 NotificationRecord r = mNotificationsByKey.get(key);
                 if (r != null) {
                     r.stats.onExpansionChanged(userAction, expanded);
+                    final long now = System.currentTimeMillis();
+                    EventLogTags.writeNotificationExpansion(key,
+                            userAction ? 1 : 0, expanded ? 1 : 0,
+                            r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
                 }
             }
         }
@@ -2787,10 +2795,8 @@
         mArchive.record(r.sbn);
 
         final long now = System.currentTimeMillis();
-        final int lifespan = (int) (now - r.getCreationTimeMs());
-        final long visibleSinceMs = r.getVisibleSinceMs();
-        final int exposure = visibleSinceMs == 0L ? 0 : (int) (now - visibleSinceMs);
-        EventLogTags.writeNotificationCanceled(canceledKey, reason, lifespan, exposure);
+        EventLogTags.writeNotificationCanceled(canceledKey, reason,
+                r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
     }
 
     /**
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index b8478c1..c4773ca 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -288,24 +288,27 @@
     }
 
     /**
-     * Returns the timestamp of the most recent updates, or the post time if none.
+     * @param now this current time in milliseconds.
+     * @returns the number of milliseconds since the most recent update, or the post time if none.
      */
-    public long getUpdateTimeMs() {
-        return mUpdateTimeMs;
+    public int getFreshnessMs(long now) {
+        return (int) (now - mUpdateTimeMs);
     }
 
     /**
-     * Returns the timestamp of the first post, ignoring updates.
+     * @param now this current time in milliseconds.
+     * @returns the number of milliseconds since the the first post, ignoring updates.
      */
-    public long getCreationTimeMs() {
-        return mCreationTimeMs;
+    public int getLifespanMs(long now) {
+        return (int) (now - mCreationTimeMs);
     }
 
     /**
-     * Returns the timestamp of the most recent visibility event, or 0L if hidden.
+     * @param now this current time in milliseconds.
+     * @returns the number of milliseconds since the most recent visibility event, or 0 if never.
      */
-    public long getVisibleSinceMs() {
-        return mVisibleSinceMs;
+    public int getExposureMs(long now) {
+        return mVisibleSinceMs == 0 ? 0 : (int) (now - mVisibleSinceMs);
     }
 
     /**
@@ -313,7 +316,7 @@
      */
     public void setVisibility(boolean visible) {
         final long now = System.currentTimeMillis();
-        mVisibleSinceMs = visible ? now : 0L;
+        mVisibleSinceMs = visible ? now : mVisibleSinceMs;
         stats.onVisibilityChanged(visible);
         EventLogTags.writeNotificationVisibility(getKey(), visible ? 1 : 0,
                 (int) (now - mCreationTimeMs),
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index fc09db3..d807b0b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -5381,20 +5381,14 @@
                         ServiceManager.getService(Context.AUDIO_SERVICE));
             }
 
-            if (enabled && !alreadyRestricted) {
-                try {
-                    if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
-                        iAudioService.setMicrophoneMute(true, who.getPackageName());
-                    } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
-                        iAudioService.setMasterMute(true, 0, who.getPackageName());
-                    }
-                } catch (RemoteException re) {
-                    Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
-                }
-            }
             long id = Binder.clearCallingIdentity();
             try {
                 if (enabled && !alreadyRestricted) {
+                    if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
+                        iAudioService.setMicrophoneMute(true, mContext.getPackageName());
+                    } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
+                        iAudioService.setMasterMute(true, 0, mContext.getPackageName());
+                    }
                     if (UserManager.DISALLOW_CONFIG_WIFI.equals(key)) {
                         Settings.Secure.putIntForUser(mContext.getContentResolver(),
                                 Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0,
@@ -5443,20 +5437,18 @@
                         mContext.getContentResolver().notifyChange(url, null, true, userHandle);
                     }
                 }
+                if (!enabled && alreadyRestricted) {
+                    if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
+                        iAudioService.setMicrophoneMute(false, mContext.getPackageName());
+                    } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
+                        iAudioService.setMasterMute(false, 0, mContext.getPackageName());
+                    }
+                }
+            } catch (RemoteException re) {
+                Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
             } finally {
                 restoreCallingIdentity(id);
             }
-            if (!enabled && alreadyRestricted) {
-                try {
-                    if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
-                        iAudioService.setMicrophoneMute(false, who.getPackageName());
-                    } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
-                        iAudioService.setMasterMute(false, 0, who.getPackageName());
-                    }
-                } catch (RemoteException re) {
-                    Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
-                }
-            }
             sendChangedNotification(userHandle);
         }
     }
diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
index f703903..eaff6c7 100644
--- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
+++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
@@ -17,6 +17,7 @@
 package com.android.compatibilitytest;
 
 import android.app.ActivityManager;
+import android.app.UiModeManager;
 import android.app.ActivityManager.ProcessErrorStateInfo;
 import android.app.ActivityManager.RunningTaskInfo;
 import android.content.Context;
@@ -24,6 +25,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
 import android.os.Bundle;
 import android.test.InstrumentationTestCase;
 import android.util.Log;
@@ -97,7 +99,12 @@
         String packageName = mArgs.getString(PACKAGE_TO_LAUNCH);
         if (packageName != null) {
             Log.d(TAG, "Launching app " + packageName);
-            ProcessErrorStateInfo err = launchActivity(packageName);
+            Intent intent = getLaunchIntentForPackage(packageName);
+            if (intent == null) {
+                Log.w(TAG, String.format("Skipping %s; no launch intent", packageName));
+                return;
+            }
+            ProcessErrorStateInfo err = launchActivity(packageName, intent);
             // Make sure there are no errors when launching the application,
             // otherwise raise an
             // exception with the first error encountered.
@@ -155,6 +162,19 @@
         }
     }
 
+    private Intent getLaunchIntentForPackage(String packageName) {
+        UiModeManager umm = (UiModeManager)
+                getInstrumentation().getContext().getSystemService(Context.UI_MODE_SERVICE);
+        boolean isLeanback = umm.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
+        Intent intent = null;
+        if (isLeanback) {
+            intent = mPackageManager.getLeanbackLaunchIntentForPackage(packageName);
+        } else {
+            intent = mPackageManager.getLaunchIntentForPackage(packageName);
+        }
+        return intent;
+    }
+
     /**
      * Launches and activity and queries for errors.
      *
@@ -163,18 +183,9 @@
      * @return {@link Collection} of {@link ProcessErrorStateInfo} detected
      *         during the app launch.
      */
-    private ProcessErrorStateInfo launchActivity(String packageName) {
-        // the recommended way to see if this is a tv or not.
-        boolean isleanback = !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
-            && !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
-        Intent intent;
-        if (isleanback) {
-            Log.d(TAG, "Leanback and relax! " + packageName);
-            intent = mPackageManager.getLeanbackLaunchIntentForPackage(packageName);
-        } else {
-            intent = mPackageManager.getLaunchIntentForPackage(packageName);
-        }
-        assertNotNull("Skipping " + packageName + "; missing launch intent", intent);
+    private ProcessErrorStateInfo launchActivity(String packageName, Intent intent) {
+        Log.d(TAG, String.format("launching package \"%s\" with intent: %s",
+                packageName, intent.toString()));
 
         String processName = getProcessName(packageName);
 
diff --git a/tests/VectorDrawableTest/AndroidManifest.xml b/tests/VectorDrawableTest/AndroidManifest.xml
index 991ec57..e648897 100644
--- a/tests/VectorDrawableTest/AndroidManifest.xml
+++ b/tests/VectorDrawableTest/AndroidManifest.xml
@@ -144,6 +144,15 @@
             </intent-filter>
         </activity>
         <activity
+            android:name="AnimatedVectorDrawableAttr"
+            android:label="AnimatedVectorDrawable Attr Test" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+        </activity>
+        <activity
             android:name="BoundsCheckTest"
             android:label="SetBound check" >
             <intent-filter>
@@ -154,4 +163,4 @@
         </activity>
     </application>
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/tests/VectorDrawableTest/res/anim/blink.xml b/tests/VectorDrawableTest/res/anim/blink.xml
new file mode 100644
index 0000000..2af0b48
--- /dev/null
+++ b/tests/VectorDrawableTest/res/anim/blink.xml
@@ -0,0 +1,28 @@
+<!--
+    Copyright (C) 2015 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:anim/linear_interpolator"
+    android:duration="@android:integer/config_longAnimTime"
+    android:repeatCount="-1"
+    android:repeatMode="reverse" >
+
+    <propertyValuesHolder
+        android:propertyName="fillColor"
+        android:valueType="colorType"
+        android:valueFrom="#ff3838"
+        android:valueTo="?attr/color1" />
+
+</objectAnimator>
diff --git a/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon.xml b/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon.xml
new file mode 100644
index 0000000..10a0970
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon.xml
@@ -0,0 +1,93 @@
+<!--
+Copyright (C) 2015 The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="250dp"
+        android:height="250dp"
+        android:viewportWidth="200"
+        android:viewportHeight="200">
+
+    <path
+        android:pathData="M-3.476563,-21.275826l34.441406,18.748753 0.000000,37.497501 -34.441406,18.748756 -34.441406,-18.718758 0.000000,-37.527500z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M65.5,-21.497507l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748756 -34.441406,-18.718754 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M202.75,-21.497507l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748760 -34.441406,-18.718758 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M134.125,-21.497505l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748756 -34.441406,-18.718758 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:name="hex"
+        android:pathData="M99.8125,34.752495l34.441406,18.748753 0.000000,37.497501 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527500z"
+        android:strokeWidth="2.5"
+        android:fillColor="?attr/color1"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M30.6875,34.689995l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M168.3125,35.002495l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M203.0,91.002495l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M133.8125,91.314995l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color3"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M65.0625,91.127495l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color2"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M-3.25,91.189995l34.441406,18.748756 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M31.0625,147.81499l34.441406,18.748764 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M99.625,147.37749l34.441406,18.748764 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+    <path
+        android:pathData="M168.8125,147.50249l34.441406,18.748764 0.000000,37.497498 -34.441406,18.748749 -34.441406,-18.718750 0.000000,-37.527496z"
+        android:strokeWidth="2.5"
+        android:fillColor="@color/color0"
+        android:strokeColor="@android:color/white"/>
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon_animated.xml b/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon_animated.xml
new file mode 100644
index 0000000..7e65229
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/animated_vector_drawable_attr_icon_animated.xml
@@ -0,0 +1,21 @@
+<!--
+Copyright (C) 2015 The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/animated_vector_drawable_attr_icon" >
+    <target
+        android:name="hex"
+        android:animation="@anim/blink" />
+</animated-vector>
diff --git a/tests/VectorDrawableTest/res/layout/activity_animated_vector_drawable_attr.xml b/tests/VectorDrawableTest/res/layout/activity_animated_vector_drawable_attr.xml
new file mode 100644
index 0000000..92680d5
--- /dev/null
+++ b/tests/VectorDrawableTest/res/layout/activity_animated_vector_drawable_attr.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="50dp"
+        android:src="@drawable/animated_vector_drawable_attr_icon"
+        android:theme="@style/ColorTheme" />
+
+    <ImageView
+        android:id="@+id/avd"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/animated_vector_drawable_attr_icon_animated"
+        android:theme="@style/ColorTheme" />
+
+</LinearLayout>
+
diff --git a/core/res/res/drawable/dialog_background_shadow_material.xml b/tests/VectorDrawableTest/res/values/attrs.xml
similarity index 65%
copy from core/res/res/drawable/dialog_background_shadow_material.xml
copy to tests/VectorDrawableTest/res/values/attrs.xml
index 0554920..98bf992 100644
--- a/core/res/res/drawable/dialog_background_shadow_material.xml
+++ b/tests/VectorDrawableTest/res/values/attrs.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
@@ -13,8 +12,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/dialog_background_mtrl_mult"
-    android:tint="?attr/colorBackground"
-    android:tintMode="multiply" />
+<resources>
+    <attr name="color1" format="color" />
+</resources>
diff --git a/core/res/res/drawable/dialog_background_shadow_material.xml b/tests/VectorDrawableTest/res/values/colors.xml
similarity index 65%
rename from core/res/res/drawable/dialog_background_shadow_material.xml
rename to tests/VectorDrawableTest/res/values/colors.xml
index 0554920..6eb3036 100644
--- a/core/res/res/drawable/dialog_background_shadow_material.xml
+++ b/tests/VectorDrawableTest/res/values/colors.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
@@ -13,8 +12,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/dialog_background_mtrl_mult"
-    android:tint="?attr/colorBackground"
-    android:tintMode="multiply" />
+<resources>
+    <color name="color0">#a6e4ea</color>
+    <color name="color1">#ff3838</color>
+    <color name="color2">#ffff51</color>
+    <color name="color3">#0ed300</color>
+</resources>
diff --git a/tests/VectorDrawableTest/res/values/styles.xml b/tests/VectorDrawableTest/res/values/styles.xml
index 460c0db..8adc034 100644
--- a/tests/VectorDrawableTest/res/values/styles.xml
+++ b/tests/VectorDrawableTest/res/values/styles.xml
@@ -13,4 +13,7 @@
      limitations under the License.
 -->
 <resources>
+    <style name="ColorTheme">
+        <item name="color1">@color/color1</item>
+    </style>
 </resources>
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/AnimatedVectorDrawableAttr.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/AnimatedVectorDrawableAttr.java
new file mode 100644
index 0000000..8de2f6b
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/AnimatedVectorDrawableAttr.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.test.dynamic;
+
+import android.app.Activity;
+import android.graphics.drawable.AnimatedVectorDrawable;
+import android.os.Bundle;
+import android.widget.ImageView;
+
+public class AnimatedVectorDrawableAttr extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_animated_vector_drawable_attr);
+
+        ImageView avdIv = (ImageView) findViewById(R.id.avd);
+        AnimatedVectorDrawable avd = (AnimatedVectorDrawable) avdIv.getDrawable();
+        avd.start();
+    }
+}
