gradle 在Android Studio中使用safeargs会导致构建因类重复而失败

yk9xbfzb  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(259)

在任何人问之前,我已经阅读了所有这些问题,没有一个解决了我的问题:这是一个很好的例子。
我目前正在学习Android应用程序开发,我一直在遵循Android开发者网站上的第一个教程。我使用“基本活动”模板创建了我的项目(按照指示)。
在上面链接的页面的步骤5中,它指出要通过执行以下操作来启用安全参数:
打开**Gradle脚本〉build.gradle(模块:My First App)buildscript部分中找到dependencies部分,并在其他类路径条目之后添加以下行:
def nav_version = "2.3.0-alpha02"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
打开
Gradle脚本〉build.gradle(模块:app)**在以apply plugin开始的其他行下面添加一行以启用SafeArgs:
apply plugin: 'androidx.navigation.safeargs.kotlin'
Android Studio应显示一条关于Gradle文件正在更改的消息。单击右侧的立即同步。几分钟后,Android Studio应在同步选项卡中显示一条消息,说明同步成功。
选择Build〉Make Project。这应该会重建所有内容,以便Android Studio可以找到FirstFragmentDirections。
不幸的是,我的Android Studio版本中的“Basic Activity”模板(见下文)的结构似乎不支持说明中的更改。

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部分中找到dependencies部分”。在我的build.gradle (:app)文件中(我甚至不确定这是不是正确的文件),只有一个包含implementation条目的顶级dependencies部分。添加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模块文件的top如下所示:

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.

目前还不清楚从这里需要做什么。我根本无法在模拟器中运行应用程序,因为构建完全失败。任何建议都将不胜感激。

b5buobof

b5buobof1#

我不知道我到底是什么时候做的,但是我对我的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 repo usefullink to internet archive, with relevant files archived)。build.gradleapp/build.gradle文件是你应该看的地方。

相关问题