Нужны ли нам support-v4 и appcompat-v7, когда у нас есть support-design?

Существует много дискуссий по этому поводу. Некоторые говорят, что если у меня appcompat-v7, мне не нужна support-v4, так как appcompat-v7 уже имеет все классы support-v4. Кроме того, этот дизайн поддержки уже имеет все классы из appcompat-v7, поэтому нам это даже не нужно. Есть некоторые ответы, которым уже много лет, поэтому, возможно, все уже изменилось. Я сделал тест, в моем проекте у меня есть support-design, support-v4 и appcompatv7, после удаления support-v4 и appcompatv7 я все еще могу использовать все классы из support-v4 и appcompatv7, просто имея support-design. Кто-нибудь может уточнить это?

Все, что я пытаюсь сделать, это удалить support-v4 из моего проекта и включить в него только независимые модули из support-v4, такие как support-compat, support-coreui и т. Д. Однако, если support-design автоматически добавляет support-v4, это не кажется возможным. Я удалил support-v4 из gradle и appcompat-v7, и все классы из support-v4 все еще находятся в моем проекте, просто сохранив support-design.

1 ответ

Нужны ли нам support-v4 и appcompat-v7, когда у нас есть support-design?

Технически это зависит от вашей точки зрения.

Вам не нужно указывать их в ваших зависимостях, но design все еще нужны все эти классы во время компиляции и во время выполнения. Gradle + maven позаботится об автоматическом извлечении этих переходных зависимостей.

Вот график зависимости недавней версии design поддержка библиотеки:

  • дизайн
    • Поддержка-v4
      • опорно-Compat
        • Опорно-аннотаций
        • android.arch.lifecycle: во время выполнения
          • android.arch.lifecycle: общий
          • android.arch.core: общий
          • Опорно-аннотаций
      • Поддержка СМИ-Compat
        • поддержка-аннотации (*)
        • support-compat (*)
      • Опорно-CORE-Utils
        • поддержка-аннотации (*)
        • support-compat (*)
      • Поддержка процессоров-интерфейс
        • поддержка-аннотации (*)
        • support-compat (*)
      • поддержка-фрагмент
        • поддержка-аннотации (*)
        • support-compat (*)
        • support-core-ui (*)
        • support-core-utils (*)
    • AppCompat-v7
      • поддержка-аннотации (*)
      • support-core-utils (*)
      • опорный фрагмент (*)
      • Поддержка вектор-вытяжка
        • поддержка-аннотации (*)
        • support-compat (*)
      • анимированный вектор-вытяжка
        • support-vector-drawable (*)
        • support-core-ui (*)
    • recyclerview-v7
      • поддержка-аннотации (*)
      • support-compat (*)
      • support-core-ui (*)
    • переход
      • поддержка-аннотации (*)
      • support-compat (*)

(*) обозначает зависимость, уже упомянутую ранее.

Однако, если support-design добавляет support-v4 автоматически, это не представляется возможным.

Исследуя вышеуказанное дерево, я, к своему удивлению, могу это подтвердить.

А пока вы можете попробовать явно удалить support-v4 от design зависимости и посмотрите, к чему это приведет (т.е. вы можете потерпеть крах из-за отсутствия классов).

implementation ('com.android.support:design:27.0.2') {
    exclude group: 'com.android.support', module: 'support-v4'
}

Если вы потерпите крах, импортируйте отсутствующие библиотеки, пока вы этого не сделаете.

Очевидно, команда Android исправила это и будет добавлена ​​в следующей библиотеке поддержки.

Другие вопросы по тегам