Использование safeargs в Android Studio приводит к сбою сборки из-за повторяющихся классов

Прежде чем кто-либо спросит, я прочитал все эти вопросы, и ни один из них не решил мою проблему: 1 , 2 , 3 , 4 , 5 , 6.

В настоящее время я изучаю разработку приложений для Android и следую первому руководству на сайте Android Developer. Я создал свой проект, используя шаблон «Основное действие» (как указано).
На шаге 5 на странице, указанной выше, говорится, что нужно включить безопасные аргументы, выполнив следующие действия:

Откройте скрипты Gradle > build.gradle (Модуль: Мое первое приложение) Найдите раздел dependencies в разделе buildscript и добавьте следующие строки после других записей classpath:
def nav_version = "2.3.0-alpha02"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

Откройте сценарии Gradle > build.gradle (модуль: приложение) Чуть ниже других строк, начинающихся с Apply plugin, добавьте строку для включения SafeArgs:
apply plugin: 'androidx.navigation.safeargs.kotlin'

Android Studio должна отображать сообщение об изменении файлов Gradle. Нажмите «Синхронизировать сейчас» справа. Через несколько секунд Android Studio должна отобразить сообщение на вкладке «Синхронизация» об успешном выполнении.

Выберите «Создать» > «Создать проект». Это должно перестроить все, чтобы Android Studio могла найти FirstFragmentDirections.

К сожалению, шаблон «Basic Activity» в моей версии Android Studio (см. ниже), похоже, не структурирован таким образом, чтобы поддерживать изменения в инструкциях.

Android Studio Dolphin | 2021.3.1 Patch 1
Build #AI-213.7172.25.2113.9123335, built on September 30, 2022
Runtime version: 11.0.13+0-b1751.21-8125866 amd64

Во-первых, в нем говорится «найти раздел зависимостей в разделе buildscript». В моем файле build.gradle (:app) (я даже не уверен, что это правильный файл) есть только раздел зависимостей верхнего уровня, содержащий запись implementation. Добавление записи classpath кажется неправильным.

Затем он говорит добавить запись apply plugin в мой файл (Module: app) «прямо под другими строками, начинающимися с apply plugin». Таких строк не существует, что заставляет подозревать, что учебник устарел.


Немного поискав, я пришел к выводу, что нужно добавить safeargs другим способом. В моем файле проекта build.gradle я сделал это так (это полный файл):

plugins {
    id 'com.android.application' version '7.3.1' apply false
    id 'com.android.library' version '7.3.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
    id 'androidx.navigation.safeargs.kotlin' version '2.5.3' apply false  // I added this
}

И верхняя часть моего файла модуля build.gradle выглядит так:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id "androidx.navigation.safeargs.kotlin" // I added this
}

Других изменений в файлах нет.

Синхронизация работает нормально, но у меня возникают проблемы, когда я пытаюсь восстановить (даже если я сначала очищаю). Я обнаружил, что всегда получаю следующую ошибку после сбоя проверки checkDebugDuplicateClasses:

Duplicate class javax.activation.ActivationDataFlavor found in modules jakarta.activation-api-1.2.1 (jakarta.activation:jakarta.activation-api:1.2.1) and javax.activation-1.2.0 (com.sun.activation:javax.activation:1.2.0)
Duplicate class javax.activation.CommandInfo found in modules jakarta.activation-api-1.2.1 (jakarta.activation:jakarta.activation-api:1.2.1) and javax.activation-1.2.0 (com.sun.activation:javax.activation:1.2.0)
Duplicate class javax.activation.CommandInfo$Beans found in modules jakarta.activation-api-1.2.1 (jakarta.activation:jakarta.activation-api:1.2.1) and javax.activation-1.2.0 (com.sun.activation:javax.activation:1.2.0)

[...]

Duplicate class org.xmlpull.v1.XmlPullParser found in the following modules: kxml2-2.3.0 (net.sf.kxml:kxml2:2.3.0), xmlpull-1.1.3.1 (xmlpull:xmlpull:1.1.3.1) and xpp3-1.1.4c (xpp3:xpp3:1.1.4c)
Duplicate class org.xmlpull.v1.XmlPullParserException found in the following modules: kxml2-2.3.0 (net.sf.kxml:kxml2:2.3.0), xmlpull-1.1.3.1 (xmlpull:xmlpull:1.1.3.1) and xpp3-1.1.4c (xpp3:xpp3:1.1.4c)
Duplicate class org.xmlpull.v1.XmlPullParserFactory found in the following modules: kxml2-2.3.0 (net.sf.kxml:kxml2:2.3.0), xmlpull-1.1.3.1 (xmlpull:xmlpull:1.1.3.1) and xpp3-1.1.4c (xpp3:xpp3:1.1.4c)
Duplicate class org.xmlpull.v1.XmlSerializer found in the following modules: kxml2-2.3.0 (net.sf.kxml:kxml2:2.3.0), xmlpull-1.1.3.1 (xmlpull:xmlpull:1.1.3.1) and xpp3-1.1.4c (xpp3:xpp3:1.1.4c)

Go to the documentation to learn how to Fix dependency resolution errors.

Отсюда непонятно, что нужно делать. Я вообще не могу запустить приложение в эмуляторе, потому что сборка полностью не работает. Мы ценим любые предложения.

1
0
172
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не знаю, когда именно я это сделал, но я изменил конец моего файла приложения build.gradle, чтобы он выглядел следующим образом.

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.7.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.2'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.2'
    implementation 'androidx.navigation:navigation-safe-args-gradle-plugin:2.5.3'  // <--- this line
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

Линия, которую я указываю здесь, является виновником. Должно быть, это привело к тому, что где-то на линии что-то удвоилось. Удаление этой строки должно решить проблему.

Я нашел этот репозиторий github полезным ( ссылка на интернет-архив с соответствующими файлами в архиве). Вы должны искать файлы build.gradle и app/build.gradle.

я добавил id 'androidx.navigation.safeargs' в build.gradle (уровень модуля)

и

classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.5.3' в build.gradle (уровень проекта)

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