Недоступен 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
Ответы
Ответ 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
- Создайте следующий новый файл:
DialogFragment $DialogStyle.java
-
Содержание
пакет 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
- Скопируйте код Google v4 FragmentDialog.java
https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/DialogFragment.java
-
Переименуйте класс (например, TempFragmentDialog). Вы получите ошибку класса "Дубликат", если вы не переименуете класс.
-
Любой 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.