【问题标题】:DuplicateFileException in apk build using Kotlin使用 Kotlin 构建 apk 时出现 DuplicateFileException
【发布时间】:2017-01-13 20:31:12
【问题描述】:

我正在尝试使用 Kotlin/Anko 构建一个基本应用程序,但我收到以下重复文件异常

任务执行失败 ':app:transformResourcesWithMergeJavaResForDebug'.> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException:重复文件 复制到 APK kotlin/internal/internal.kotlin_builtins 文件 1: C:\Users\mahesh.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-runtime\1.0.6.\3562c66f648480d3bd4f76cff722488ced13445b\kotlin-runtime-1.0.6.jar 文件2: C:\Users\mahesh.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-compiler-embeddable\1.0.6\4008eb91a337b377dae7e4572b8b543e5321f549\kotlin-compiler-embeddable-1.0.6.jar

以下是应用级 gradle 文件的代码:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

buildscript {
    ext.kotlin_version = '1.0.6'

    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

repositories {
    jcenter()
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.kotlin.androdikotlinexample"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'

    //kotlin
    compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    //anko
    compile "org.jetbrains.anko:anko-design:0.8.3"
    compile "org.jetbrains.anko:anko-support-v4:0.8.3"
    compile "org.jetbrains.anko:anko-sdk15:0.8.3"
    compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3'

}

以下是项目级 gradle 文件的代码:

buildscript {
    ext.kotlin_version = '1.0.6'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是 MainUI 文件的基本代码

class MainUI : AnkoComponent<MainActivityKotlin> {
    override fun createView(ui: AnkoContext<MainActivityKotlin>): View = with(ui) {
        coordinatorLayout {
            verticalLayout {
                // maybe put some content here
            }
            floatingActionButton {
                imageResource = android.R.drawable.ic_menu_edit
                onClick {
                    ui.owner.startActivityForResult<MainActivityKotlin>(1)
                }
            }.lparams {
                gravity = Gravity.BOTTOM or Gravity.END
            }
        }
    }
}

并且在 MainActivityKotlin 文件中使用 MainUI().setContentView(this) 方法在其 onCreatemethod 中设置内容。

我已尝试删除 gradle 缓存并再次构建项目,但没有任何效果。请让我知道我哪里出错了?

【问题讨论】:

    标签: java android android-studio kotlin anko


    【解决方案1】:

    从你的 gradle 中删除 compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

    同时从您的应用级别 gradle 中删除所有 buildscript 部分

    【讨论】:

    • 我已从项目级别的 gradle 中删除了 compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"。我仍然得到同样的错误。你能告诉我代码有什么问题吗?
    • 这篇文章终于缓解了我对这个重复问题的 4 天挫败感:从你的 gradle 中删除 compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" .谢谢@Tomasz Czura
    【解决方案2】:

    试试这个:

    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile ("org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version") {
        transitive = false
    }
    

    此外,您不再需要 android-extensions 依赖项,因为它已捆绑到插件中。只需在您的 gradle 中添加 apply plugin: 'kotlin-android-extensions' 就足够了。

    【讨论】:

    • 这是最有用的信息“您不再需要 android-extensions 依赖项,因为它已捆绑到插件中”我在 4 天内遇到努力解决这个问题!非常感谢@VeteR_OK
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多