Подтвердить что ты не робот

Недоступен DialogStyle

После обновления библиотеки android-support до 22.2.0 проект прекратил компиляцию.

error: cannot access DialogStyle
  class file for android.support.v4.app.DialogFragment$DialogStyle not found
  Consult the following stack trace for details.
  com.sun.tools.javac.code.Symbol$CompletionFailure: class file for android.support.v4.app.DialogFragment$DialogStyle not found

Не удается найти, как обойти эту проблему.

Ранее использовавшаяся версия была 22.1.1

4b9b3361

Ответ 1

Попробуйте, это решило мою проблему:

compile ('com.android.support:appcompat-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:recyclerview-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:cardview-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:design:22.2.0') {
        exclude module: 'support-v4' }
// and exclude support-v4 from other dependencies as well that might include it
// finally add it, but avoid version 22.2.0...
compile ('com.android.support:support-v4:22.1.1')

Нет необходимости вручную добавлять библиотеку поддержки-v4 в ваш каталог libs, последний импорт гарантирует, что правильная версия включена в ваш проект.

Кстати, все это обходное решение не ваша вина, обвините других:)

Ответ 2

Ответ @takoli работает в большинстве случаев, но если у вас есть другие зависимости, которые молча включают поддержку-v4, или если вы слишком ленивы, чтобы явно исключить поддержку-v4, то здесь есть другое решение.

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:mediarouter-v7:22.2.0'
// Force stable version of support-v4
compile ('com.android.support:support-v4:22.1.1') {
    force = true
}

Update:

AndroidAnnotations выпустила новую версию 3.3.2, которая устраняет эту проблему. Если вы используете обновление AndroidAnnotations до 3.3.2 и используете библиотеки поддержки 22.2.0, не форсируя старую версию поддержки-v4. Для получения дополнительной информации см. этот поток

Ответ 3

Вот несколько обходных решений, которые работали для нас:

Обходной путь 1 (некоторые люди видят NPE с этим, некоторые - нет)

Я только что нашел ВРЕМЕННОЕ обходное решение... до приложения appcompat устраняет эту проблему:

  • Создайте в своем проекте следующий пакет src/main/java

android.support.v4.app

  1. Создайте следующий новый файл:

DialogFragment $DialogStyle.java

  1. Содержание

    пакет android.support.v4.app;

    //todo удалить этот файл, если он установлен в appcompat (https://code.google.com/p/android/issues/detail?id=175086)

public @interface DialogFragment $DialogStyle {   }

Обходной путь 2 (бит более уродливый, но меньший потенциал для проблемы с сборкой)

Я нашел еще одну проблему... немного более уродливую... но привлек нас к этой проблеме (в том числе NPE по описанной выше работе) до тех пор, пока не будет исправлено приложение app.2.2.2.

  • Создайте в своем проекте следующий пакет src/main/java

android.support.v4.app

  1. Скопируйте код Google v4 FragmentDialog.java

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/DialogFragment.java

  1. Переименуйте класс (например, TempFragmentDialog). Вы получите ошибку класса "Дубликат", если вы не переименуете класс.

  2. Любой FragmentDialog, в вашем проекте, который имеет @Inject, должен будет расширить вашу копию FragmentDialog (пример: public class MyFragmentDialog расширяет TempFragmentDialog)

Ответ 4

Я использую найденную здесь работу https://code.google.com/p/android/issues/detail?id=175086#c9

Я изменил файл build.gradle, чтобы сказать следующее в разделе зависимостей:

compile fileTree(include: ['*.jar'], dir: 'libs')
compile ('com.android.support:appcompat-v7:22.2.0') {
    exclude module: 'support-v4'
}
compile ('com.android.support:gridlayout-v7:22.2.0') {
    exclude module: 'support-v4'
}
compile ('com.android.support:cardview-v7:22.2.0') {
    exclude module: 'support-v4'
}
compile ('com.android.support:design:22.2.0') {
    exclude module: 'support-v4'
}

Вам также придется исключить его из любых других зависимостей, которые используют библиотеку поддержки, такую ​​как кинжал или фейсбук.

Затем я добавил файл android-support-v4.jar, найденный в $ANDROID_HOME/extras/android/support/v4, в мой каталог libs, так как этот файл, похоже, имеет DialogFragment $DialogStyle.

Теперь моя сборка полностью работает снова, но я все еще надеюсь, что это может быть исправлено в ближайшее время.

Ответ 5

Проще говоря, это ошибка в библиотеке поддержки версии 22.2.0

Просто обновите до следующего обновления 22.2.1, работайте как шарм.

Ответ 6

На всякий случай, чтобы не пропустить ответ: здесь также обсуждается эта проблема https://github.com/excilys/androidannotations/issues/1435

Кстати, вы используете аннотации Android в проекте, где эта проблема существует?

Ответ 7

Это происходит, если вы используете android.support.v4.app.DialogFragment. Попробуйте вместо этого использовать android.app.DialogFragment.