English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Проблемы несовместимости версий после добавления fragment в Android

Происхождение и описание Fragment

Android работает на различных устройствах, от маленьких телефонов до超大屏幕的平板 и даже телевизоров. В связи с различиями в размерах экранов, в多くе случаев сначала разрабатывается приложение для телефона, а затем копируется и изменяется макет, чтобы адаптировать его к экранам планшетов и других больших устройств. Неужели не возможно сделать приложение, которое может одновременно адаптироваться к телефонам и планшетам?当然了, это возможно. Появление Fragmentов именно для решения таких проблем. Вы можете рассматривать Fragment как составную часть интерфейса Activity, даже интерфейс Activity может состоять из различных Fragmentов. Самое впечатляющее в Fragmentах - это их собственный жизненный цикл и способность принимать и обрабатывать события пользователей, что позволяет избежать написания большого количества кода для обработки событий控件 в Activity. Еще важнее то, что вы можете динамически добавлять, заменять и удалять определенные Fragment.

Вчера изучал Android Fragment. Согласно руководству на официальном сайте, создал класс BlankFragment, наследующийся от Fragment. Затем при компиляции появилась ошибка: }}

Ошибка: Выполнение задачи ':app:processDebugManifest'失败.
Не удалось объединить манифест: атрибут meta-data#android.support.VERSION@value value=(26.0.0-beta1) из [com.android.support:design:26.0.0-beta1] AndroidManifest.xml:28:13-41
  тоже присутствует в [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
  Совет: добавьте 'tools:replace="android:value"' к элементу <meta-data> в AndroidManifest.xml на 26 строке 9-28 строка 44 для замены.

Прочесал информацию, и везде говорят разное. Самый неуверенный способ — это когда говорят, что нужно изменить тег в файле manifest с android:name на class. По логам очевидно, что это зависит от версии! В конце концов, нашел решение, совместимое с версией, и нужно добавить следующий код в build.gradle в директории app:

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

Попробовал и действительно стало лучше. Но этого недостаточно.

Обратите внимание, что именно над этим добавленным кодом описывается библиотеки, необходимые для проекта:

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implement 'com.android.support:appcompat-v7:26.0.0-beta1'
  implementation 'com.android.support.constraint:constraint-layout:1.0.2'
  implementation 'com.android.support:design:26.0.0-beta1'
  implementation 'com.android.support:support-v4:26.1.0'
  testImplementation 'junit:junit:4.12'
  androidTestImplementation 'com.android.support.test:runner:0.5'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
}

А на этой строке внизу есть красная линия:

implement 'com.android.support:appcompat-v7:26.0.0-beta1'

При наведении курсора на него появляется подсказка:

Все библиотеки com.android.support должны использовать точное такое же specification версии 
(смешивание версий может привести к сбоям в работе) 
Найдены версии 26.1.0, 26.0.0-beta1. Примеры включают com.android.support:support-compat:26.1.0 
and com.android.support:animated-vector-drawable:26.0.0-beta1

Это не говорится ясно: все библиотеки, зависящие от com.android.support, должны использовать одну и ту же версию! Давайте посмотрим на Dependency, com.android.support:appcompat-v7:26.0.0-beta1 и com.android.support:support-v4:26.1.0 - эти версии противоречат друг другу! Давайте посмотрим на запись в git, 26.1.0 - это новая строка, определенно добавлена при создании класса BlankFragment AndroidStudio автоматически. А теперь вернемся и посмотрим на ошибки, они также говорят об одном и том же?

Нельзя не покритиковать AndroidStudio, если вы хотите автоматически добавлять зависимости версий, то проверьте также совместимость версий. В противном случае лучше не добавлять их, чтобы мы могли это сделать ourselves. Ненавижу такие полуживые автоматизированные вещи, они очень обманчивы.

Кроме того, грамматика файла gradle также очень интересна. Комментарии выполнены в стиле C/C++, объявление функций - в стиле Python, а выражения Lambda немного напоминают C#.

Резюме

Ниже приведены проблемы с несовместимостью версий, с которыми сталкиваются разработчики Android при добавлении fragment, я надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, и я отвечу вам своевременно. Вновь благодарю всех за поддержку сайта呐喊 руководств!

Заявление: содержимое этой статьи взято из интернета, авторские права принадлежат их законным владельцам, контент был предложен и загружен пользователями Интернета, этот сайт не обладает правами собственности, не underwent редактирование, и не несет ответственности за相关问题. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для подачи жалоб,并提供相关证据. При обнаружении нарушений мы немедленно удалим спорные материалы.

Основной учебник
Вам может понравиться