Прежде чем кто-либо спросит, я прочитал все эти вопросы, и ни один из них не решил мою проблему: 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.
Отсюда непонятно, что нужно делать. Я вообще не могу запустить приложение в эмуляторе, потому что сборка полностью не работает. Мы ценим любые предложения.
Я не знаю, когда именно я это сделал, но я изменил конец моего файла приложения 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 (уровень проекта)