Даже я использую MenuItemCompat.setOnActionExpandListener, с которым работает приложение, советуем использовать MenuItemCompat.setOnActionExpandListener

Сегодня Android Studio (установленная на Stable channel updates) предложила загрузить обновление в Android Support Repository 46.0.0, поэтому я сделал это. Затем неожиданно наше приложение начало вылетать каждый раз из-за MenuItemCompat.setOnActionExpandListener .

Да, я должен был еще отметить отметки о выпуске, но я этого не сделал – это факт.

Теперь в чем проблема. Даже мы используем рекомендуемую нотацию MenuItemCompat.setOnActionExpandListener, наше приложение разбилось, и нам рекомендуется использовать MenuItemCompat.setOnActionExpandListener. Это чепуха.

Есть ли кто-то, кто сталкивается с тем же вопросом или это только вопрос нашего кода? Может ли кто-нибудь дать совет, как это исправить или как заставить использовать более раннюю версию библиотеки поддержки? Скажем, 25.1.0. Проблема, похоже, в 26.0.0-alpha1, которая, скорее всего, включена в репозиторий поддержки 46 (см. Примечания к выпуску для этого репозитория – https://developer.android.com/topic/libraries/support-library/revisions.html# 26-0-0-альфа1 )

Btw. Наш build.gradle уже утверждает версию исправления для поддержки libs до 25.1.0. Кажется, новая поддержка библиотеки каким-то образом вынуждает использовать другие версии внутри, когда она построена с помощью градиента.

compile 'com.android.support:appcompat-v7:25.1.0' compile 'com.android.support:design:25.1.0' compile 'com.android.support:support-v4:25.1.0' 

Большое спасибо.

Код

 MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem menuItem) { ... } 

Часть StackTrace

  E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.dev, PID: 4835 java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener() at android.support.v7.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:745) at android.support.v4.view.MenuItemCompat.setOnActionExpandListener(MenuItemCompat.java:363) at com.example.fragments.DevicesFragment.onCreateOptionsMenu(DevicesFragment.java:455) at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:2338) at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:3070) at android.support.v4.app.FragmentController.dispatchCreateOptionsMenu(FragmentController.java:328) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:321) at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:95) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:333) at android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java:1372) at android.support.v7.app.AppCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1652) at android.support.v7.app.AppCompatDelegateImplV9$1.run(AppCompatDelegateImplV9.java:134) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) 

ОБНОВЛЕНИЕ : похоже, это связано с этой проблемой, так как я пробовал это, и то же самое произошло со мной. Я не хочу обновлять API 26 в любом случае – Поддержка Android Repo 46.0.0 с Android Studio 2.3

Это всего лишь ошибка в выпуске 26.0.0-alpha1. Вернитесь к 25.3.0, обновив файл build.gradle .

ОБНОВЛЕНИЕ 23.3.2017: Основываясь на комментариях и дальнейших исследованиях, правильный способ заключается в том, чтобы заставить gradle использовать явную версию, когда разрешение зависимостей Gradle позволяет использовать любую другую версию, чем хотелось бы.

Благодаря @Eugen и @ianhanniballake вы можете использовать следующие шаги, чтобы решить, требуется ли какое-либо действие и принудительная явная версия.

  1. Запустите gradlew androidDependencies чтобы проверить, какие версии разрешены и используются Gradle
  2. Если он не соответствует вашей требуемой явной версии, заставьте его, как указано @Eugen в этом разделе – https://stackoverflow.com/a/42957234/816216 (фрагмент, опубликованный ниже)

_

 configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.3.0' } } } }