1
votes

I want to migrate a big application from Ant to Gradle. Since the app has been (wrongly) created as several libraries, the first migration will keep the same Modules (it will refactored in a second step) and it will probably end up in this structure:


    -- Project/
           |-- App/
                  |-- libs/
                  |-- src/...
                  |-- build.gradle
           |-- Module1/
                  |-- libs/
                         |-- lib1.jar
                         |-- lib2.jar
                  |-- src/...
                  |-- build.gradle
           |-- Module2/
                  |-- libs/
                         |-- lib2.jar
                         |-- lib3.jar
                  |-- src/...
                  |-- build.gradle
         build.gradle
         settings.gradle

The App build.gradle is something like this:


    ...

    apply plugin: 'com.android.application'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:20.0.0'
        compile 'com.android.support:appcompat-v7:20.0.0'

        compile project(':Module1')
        compile project(':Module2')
    }

    ...

And then each Module build.gradle will be something like this:


    ...

    apply plugin: 'com.android.library'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:20.0.0'
        compile 'com.android.support:appcompat-v7:20.0.0'
    }

    ...

Every module compiles correctly, but the problem happens when building the APK, because lib2.jar is copied 2 times, resulting on an error:

Error:Gradle: Execution failed for task ':app:packageDebug'.

Duplicate files copied in APK META-INF/ASL2.0 and then the path to the 2 JARs.

How can I tell Gradle to do not copy multiple times the same JARs when building the APK from each module? At this moment, I cannot move dependencies to Maven central repo, even if I will in the future. Maybe adding all the libs in the parent App? It does not look very nice to me... And in this case, how can I specify that dependencies in the build.gradle Modules?

1
Have you tried this way: tools.android.com/tech-docs/new-build-system/tips (last paragraph)?sandrstar

1 Answers

1
votes

In your gradle project file can you add this to "android" block :

packagingOptions {
    exclude 'META-INF/ASL2.0'
}

It seem the META-INF/ASL2.0 file is being duplicated.