Kesalahan :: duplikat file selama pengemasan APK


144

Android Studio. Saya mendapatkan kesalahan semacam ini selama menjalankan aplikasi.

Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in APK META-INF/notice.txt

build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/ASL2.0'
    }

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'com.octo.android.robospice:robospice:1.4.11'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.11'
}

Bagaimana saya bisa memperbaiki kesalahan ini?

Diedit

Opsi kecualikan ini menyelesaikan masalah saya:

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }


2
Ini bukan duplikat! Penanya lain memperbaiki kesalahan mereka dengan menambahkan opsi pengecualian. Tetapi seperti yang Anda semua lihat saya menambahkan opsi ini dan masalah saya tidak hilang.
Robertas Setkus


apakah ada ide tentang isu-isu ini stackoverflow.com/questions/30364950/...
Jithu PS

Itu memecahkan masalah saya juga. terima kasih
Reshma

Jawaban:


56

Saya pikir perbandingan string sensitif huruf. coba denganexclude 'META-INF/notice.txt'


Jawaban saya adalah tentang mencoba notice.txtbukan NOTICE.txt? Padahal kesalahannya terlihat benar-benar berbeda dari kesalahan di mana pengecualian terjadi. Apakah Anda memiliki META-INF/notice.txtfile di src/main/resources/?
Xavier Ducrohet

Maaf Xavier Saya tidak mengerti jawaban Anda saat itu. Sekarang saya bisa melihat apa yang Anda maksudkan. Saya mencoba untuk mengubah exclude 'META-INF/notice.txt'tetapi kemudian konsol meminta itu Duplicate files copied in APK META-INF/NOTICE.txt. Aneh bukan? Tidak ada resourcesdirektori di bawah C:\PathToAndroidStudioProject\src\main.
Robertas Setkus

1
Jika Anda menempatkan keduanya exclude 'META-INF/notice.txt'dan exclude 'META-INF/NOTICE.TXT', apakah itu berhasil?
Xavier Ducrohet

Terima kasih. Itu membantu. :)
Robertas Setkus

1
di file build.gradle di bagian 'android', coba tambahkan: packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian

22

Saya pikir Anda harus menyertakan hanya opsi ini di build.gradle :

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
    }

1
Akhirnya setelah menerapkan yang ini, saya menyelesaikan pertanyaan ini. Terima kasih
kawan

10

Jawaban singkat:

Lihat output gradle terperinci menggunakan gradle assembledan perhatikan file yang duplikat dan kecualikan mereka menggunakan:

android {
  packagingOptions {
    exclude 'META-INF/notice.txt'
  }
}

Jawaban panjang:

Jalankan assembletugas gradle dari baris perintah untuk output terperinci:

./gradlew assemble || gradle assemble

Ini secara otomatis menunjukkan apa yang harus dikecualikan:

studioWorkspace/CCDroid git:(master)  ± ./gradlew assembleDebug
:app:preBuild
:app:compileDebugNdk UP-TO-DATE
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:app:prepareComAndroidSupportAppcompatV72200Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42200Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error: duplicate files during packaging of APK /Users/shubham/code/studioProjects/CCDroid/app/build/outputs/apk/app-debug-unaligned.apk
    Path in archive: LICENSE
    Origin 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    Origin 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.8.4/5c97d8b6e715ed941aeb93d6fc401ab3eb18a566/mockito-all-1.8.4.jar
You can ignore those files in your build.gradle:
    android {
      packagingOptions {
        exclude 'LICENSE'
      }
    }
:app:packageDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK LICENSE
    File 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    File 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 11.863 secs

Lihat bagian ini dalam output:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

Itu bahkan menunjukkan daftar dependensi yang berasal file duplikat (LISENSI). Lihat baris dengan Origin # di output.


apakah ada ide tentang masalah ini stackoverflow.com/questions/30364950/…
Jithu PS

1
Saya hampir mengabaikan jawaban Anda, meskipun itu yang benar untuk saya. Saya menyarankan untuk menempatkan jawaban di bagian atas posting: android {packagingOptions {kecualikan 'LICENSE'}} diikuti dengan penjelasan dan output gradle panjang (yang sebagian besar tidak relevan dengan jawaban. Bagian ini adalah Anda dapat mengabaikan file-file itu di build.gradle Anda: android {packagingOptions {tidak termasuk 'LICENSE'}}
gorbysbm

Selesai Terima kasih banyak @gorbysbm.
Shubham Chaudhary

6

Tambahkan ini di file build.gradle Anda ...

packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}

seperti ini...

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "your package name"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 30
    versionName "3.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/NOTICE' // will not include NOTICE file
    exclude 'META-INF/LICENSE' // will not include LICENSE file
    exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
}

3

Ini lebih dari satu kesalahan, Anda benar.

Dibawah apply plugin: 'android-library'

Tambahkan ini :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

Kesalahan pertama adalah duplikat file, kesalahan kedua adalah LISENSI dan PEMBERITAHUAN file. Ini akan berhasil setelah itu

EDIT :: Lihat posting saya di sini tentang mengidentifikasi masalah :: Plugin Android Gradle 0.7.0: "duplikat file selama pengemasan APK"


apakah ada ide tentang masalah ini stackoverflow.com/questions/30364950/…
Jithu PS

1

ini bekerja untuk saya

android {
...

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
    }
}

1

Menariknya, ketika saya menghapus baris ini dari gradle, ternyata berhasil:

compile 'org.apache.commons:commons-lang3:3.3.1'

0

Saya harus bermain-main sedikit untuk menemukan lokasi yang tepat untuk Pilihan pengemasan. Memecahkan masalah file duplikat untuk konflik antara jackson-core: 2.2.2 dan jackson-databind: 2.2.2 Juga DSL tampaknya telah berubah baru-baru ini. Jadi di Android Studio 1.4.1 baru-baru ini dengan buildTools 23 Anda harus meletakkan android. opsi pengemasan pada tingkat yang sama dengan compileOptions DAN TIDAK di dalam model {android { braces!

model { 
   android {
        compileSdkVersion = 21
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
              applicationId = "com.android.sensorgraph"
              minSdkVersion.apiLevel = 21
              targetSdkVersion.apiLevel = 22
        }
   }

   android.packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
   }
   compileOptions.with {
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
   }
} 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.