diff --git a/media-compat/api26/android/support/v4/media/MediaBrowserCompatApi26.java b/media-compat/api26/android/support/v4/media/MediaBrowserCompatApi26.java
new file mode 100644
index 0000000..9c3b99d
--- /dev/null
+++ b/media-compat/api26/android/support/v4/media/MediaBrowserCompatApi26.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 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.support.v4.media;
+
+import android.media.browse.MediaBrowser;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+
+import java.util.List;
+
+@RequiresApi(26)
+class MediaBrowserCompatApi26 {
+    public static Object createSearchCallback(SearchCallback callback) {
+        return new SearchCallbackProxy<>(callback);
+    }
+
+    public static void search(Object browserObj, String query, Bundle extras, Object callback) {
+        ((MediaBrowser) browserObj).search(query, extras,
+                (MediaBrowser.SearchCallback) callback);
+    }
+
+    interface SearchCallback {
+        void onSearchResult(@NonNull String query, Bundle extras, @NonNull List<?> items);
+        void onError(@NonNull String query, Bundle extras);
+    }
+
+    static class SearchCallbackProxy<T extends SearchCallback> extends MediaBrowser.SearchCallback {
+        protected final T mSearchCallback;
+
+        SearchCallbackProxy(T callback) {
+            mSearchCallback = callback;
+        }
+
+        @Override
+        public void onSearchResult(String query, Bundle extras,
+                List<MediaBrowser.MediaItem> items) {
+            mSearchCallback.onSearchResult(query, extras, items);
+        }
+
+        @Override
+        public void onError(String query, Bundle extras) {
+            mSearchCallback.onError(query, extras);
+        }
+    }
+}
diff --git a/media-compat/api26/android/support/v4/media/MediaBrowserServiceCompatApi26.java b/media-compat/api26/android/support/v4/media/MediaBrowserServiceCompatApi26.java
new file mode 100644
index 0000000..d427531
--- /dev/null
+++ b/media-compat/api26/android/support/v4/media/MediaBrowserServiceCompatApi26.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2017 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.support.v4.media;
+
+import android.content.Context;
+import android.media.browse.MediaBrowser;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+
+import java.util.List;
+
+@RequiresApi(26)
+class MediaBrowserServiceCompatApi26 {
+
+    public static Object createService(Context context, ServiceCompatProxy serviceProxy) {
+        return new MediaBrowserServiceAdaptor(context, serviceProxy);
+    }
+
+    public interface ServiceCompatProxy extends MediaBrowserServiceCompatApi24.ServiceCompatProxy {
+        void onSearch(@NonNull String query, Bundle extras,
+                MediaBrowserServiceCompatApi24.ResultWrapper result);
+    }
+
+    static class MediaBrowserServiceAdaptor extends
+            MediaBrowserServiceCompatApi24.MediaBrowserServiceAdaptor {
+        MediaBrowserServiceAdaptor(Context context, ServiceCompatProxy serviceWrapper) {
+            super(context, serviceWrapper);
+        }
+
+        @Override
+        public void onSearch(@NonNull String query, Bundle extras,
+                @NonNull Result<List<MediaBrowser.MediaItem>> result) {
+            ((ServiceCompatProxy) mServiceProxy).onSearch(query, extras,
+                    new MediaBrowserServiceCompatApi24.ResultWrapper(result));
+        }
+    }
+}
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
index 414662a..5580f5a 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
@@ -800,6 +800,16 @@
      * Callback for receiving the result of {@link #search}.
      */
     public abstract static class SearchCallback {
+        final Object mSearchCallbackObj;
+
+        public SearchCallback() {
+            if (Build.VERSION.SDK_INT >= 26 || BuildCompat.isAtLeastO()) {
+                mSearchCallbackObj = MediaBrowserCompatApi26.createSearchCallback(new StubApi26());
+            } else {
+                mSearchCallbackObj = null;
+            }
+        }
+
         /**
          * Called when the {@link #search} finished successfully.
          *
@@ -820,6 +830,23 @@
          */
         public void onError(@NonNull String query, Bundle extras) {
         }
+
+        private class StubApi26 implements MediaBrowserCompatApi26.SearchCallback {
+            StubApi26() {
+            }
+
+            @Override
+            public void onSearchResult(@NonNull String query, Bundle extras,
+                    @NonNull List<?> items) {
+                SearchCallback.this.onSearchResult(
+                        query, extras, MediaItem.fromMediaItemList(items));
+            }
+
+            @Override
+            public void onError(@NonNull String query, Bundle extras) {
+                SearchCallback.this.onError(query, extras);
+            }
+        }
     }
 
     interface MediaBrowserImpl {
@@ -1782,6 +1809,12 @@
                         callback.mSubscriptionCallbackObj);
             }
         }
+
+        @Override
+        public void search(@NonNull final String query, final Bundle extras,
+                @NonNull final SearchCallback callback) {
+            MediaBrowserCompatApi26.search(mBrowserObj, query, extras, callback.mSearchCallbackObj);
+        }
     }
 
     private static class Subscription {
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
index 9c65ce6..f8eb260 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
@@ -372,10 +372,10 @@
 
     // TODO: Rename to MediaBrowserServiceImplApi26 once O is released
     class MediaBrowserServiceImplApi24 extends MediaBrowserServiceImplApi23 implements
-            MediaBrowserServiceCompatApi24.ServiceCompatProxy {
+            MediaBrowserServiceCompatApi26.ServiceCompatProxy {
         @Override
         public void onCreate() {
-            mServiceObj = MediaBrowserServiceCompatApi24.createService(
+            mServiceObj = MediaBrowserServiceCompatApi26.createService(
                     MediaBrowserServiceCompat.this, this);
             MediaBrowserServiceCompatApi21.onCreate(mServiceObj);
         }
@@ -426,6 +426,29 @@
             }
             return MediaBrowserServiceCompatApi24.getBrowserRootHints(mServiceObj);
         }
+
+        @Override
+        public void onSearch(@NonNull String query, Bundle extras,
+                final MediaBrowserServiceCompatApi24.ResultWrapper resultWrapper) {
+            final Result<List<MediaBrowserCompat.MediaItem>> result =
+                    new Result<List<MediaBrowserCompat.MediaItem>>(query) {
+                        @Override
+                        void onResultSent(List<MediaBrowserCompat.MediaItem> list,
+                                @ResultFlags int flags) {
+                            List<Parcel> parcelList = null;
+                            if (list != null) {
+                                parcelList = new ArrayList<>();
+                                for (MediaBrowserCompat.MediaItem item : list) {
+                                    Parcel parcel = Parcel.obtain();
+                                    item.writeToParcel(parcel, 0);
+                                    parcelList.add(parcel);
+                                }
+                            }
+                            resultWrapper.sendResult(parcelList, flags);
+                        }
+            };
+            MediaBrowserServiceCompat.this.onSearch(query, extras, result);
+        }
     }
 
     private final class ServiceHandler extends Handler {
diff --git a/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java b/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
index b943594..d93af38 100644
--- a/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
+++ b/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
@@ -45,7 +45,7 @@
             MEDIA_ID_CHILDREN_DELAYED
     };
 
-    static final String SEARCH_QUERY = "test_media_children";
+    static final String SEARCH_QUERY = "children_2";
     static final String SEARCH_QUERY_FOR_NO_RESULT = "query no result";
     static final String SEARCH_QUERY_FOR_ERROR = "query for error";
 
