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'
    }
Robertas Setkus
sumber
kemungkinan duplikat dari file Duplikat yang disalin (Android Studio 0.4.0)
Scott Barta
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'

Xavier Ducrohet
sumber
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'
    }
Gent Berani
sumber
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.

Shubham Chaudhary
sumber
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'
}
}
vrbsm
sumber
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"

Pian0_M4n
sumber
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'
    }
}
Joolah
sumber
1

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

compile 'org.apache.commons:commons-lang3:3.3.1'
Malas
sumber
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
   }
} 
UV
sumber