在AndroidStudio使用中,很多人会遇到Duplicate files copied in APK 这种错误,导致程序不能编译或者不能打包。出现这种原因就是在编译或者打包阶段出现文件重复的问题,其实解决这些问题很简单,我们只需要根据错误提示增加在gradle文件配置packagingOptions配置。
在之前eclipse项目时使用apache-mime4j-0.6.jar和httpmime-4.0.jar,后来转到Androidstudio后出现下面的错误:
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/DEPENDENCIES
File1: E:\Project\MyApp\app\libs\apache-mime4j-0.6.jar
File2: E:\Project\MyApp\app\libs\httpmime-4.0.jar
看到提示说Duplicate files copied in APK META-INF/DEPENDENCIES,也就是这两个jar中都有一个DEPENDENCIES文件,导致编译或者打包合并时出现错误。既然是文件重复出的错,我们只需要在packagingOptions设置排除该文件即可。
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
packagingOptions{
exclude 'META-INF/DEPENDENCIES'
}
defaultConfig {
applicationId "com.myapp.test"
minSdkVersion 17
targetSdkVersion 21
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:22.0.0'
compile files('libs/apache-mime4j-0.6.jar')
compile files('libs/httpmime-4.0.jar')
}
一般情况还会出现NOTICE,LICENSE文件也会重复。
packagingOptions{
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES'
}