Плагин Android Gradle 0.7.0: «дублировать файлы во время упаковки APK»


324

Использование плагина Android Gradle 0.7.0 со следующим build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
    }
}

apply plugin: 'android'

repositories {
    maven { url "https://android-rome-feed-reader.googlecode.com/svn/maven2/releases" }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion '18.1.1'

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
    sourceSets {
        instrumentTest.setRoot('src/instrumentTest')
    }
}

configurations {
    apt
}

ext.androidAnnotationsVersion = '2.7.1';

dependencies {
    compile 'com.android.support:support-v4:18.0.0'

    compile 'com.viewpagerindicator:library:2.4.1@aar'

    compile 'com.google.code.android-rome-feed-reader:android-rome-feed-reader:1.0.0-r2'
    compile 'org.jdom:jdom:1.1.1-android-fork'

    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"

    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.j256.ormlite:ormlite-android:4.47'
    compile 'com.j256.ormlite:ormlite-core:4.47'
    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
    compile 'com.prolificinteractive:actionbarsherlock:4.3.1@aar'

    compile 'com.google.code.geocoder-java:geocoder-java:0.15'

    compile files('libs/CWAC-Pager.jar')
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()
        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

выдает ошибку Duplicate files copied in APK META-INF/LICENSE.txt:

WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorDebug as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorRelease as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "aptOutput" on "com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5705013c", value: "/Users/david/Developer...".
****************************
variant: defaultFlavorDebug
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/debug
****************************
Deprecated dynamic property "aptOutput" created in multiple locations.
****************************
variant: defaultFlavorRelease
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/release/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/release
****************************
:TravelGuard:compileDefaultFlavorDebugNdk UP-TO-DATE
:TravelGuard:preBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorDebugBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorReleaseBuild UP-TO-DATE
:TravelGuard:prepareComProlificinteractiveActionbarsherlock431Library UP-TO-DATE
:TravelGuard:prepareComViewpagerindicatorLibrary241Library UP-TO-DATE
:TravelGuard:prepareDefaultFlavorDebugDependencies
:TravelGuard:compileDefaultFlavorDebugAidl UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugRenderscript UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugBuildConfig UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugAssets UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugManifest UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugSources UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugJava
*** compile doFirst defaultFlavorDebug
/Users/david/Developer/.../src/main/java/com/travelguard/service/TravelGuardService.java:53: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.service.TravelGuardService
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:14: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:16: cannot find symbol
symbol  : class CategoryFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.CategoryFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:17: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:25: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:44: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.CountriesActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:18: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:19: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:21: cannot find symbol
symbol  : class InstructionsFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.InstructionsFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:36: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:40: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:41: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:55: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.MainActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:17: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:23: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.TermsActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
Note: Starting AndroidAnnotations annotation processing
Note: AndroidManifest.xml file found: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
Note: Number of files generated by AndroidAnnotations: 22
Note: Generating source file: com.travelguard.service.SmartTravellerService_
Note: Generating source file: com.travelguard.service.SmartTravellerWebservice_
Note: Generating source file: com.travelguard.service.TravelGuardPrefs_
Note: Generating source file: com.travelguard.service.TravelGuardService_
Note: Generating source file: com.travelguard.service.TravelGuardWebservice_
Note: Generating source file: com.travelguard.ui.AdviceActivity_
Note: Generating source file: com.travelguard.ui.CategoriesActivity_
Note: Generating source file: com.travelguard.ui.ContactDetailActivity_
Note: Generating source file: com.travelguard.ui.ContactListActivity_
Note: Generating source file: com.travelguard.ui.ContactTravelGuardActivity_
Note: Generating source file: com.travelguard.ui.CountriesActivity_
Note: Generating source file: com.travelguard.ui.InformationActivity_
Note: Generating source file: com.travelguard.ui.InstructionsActivity_
Note: Generating source file: com.travelguard.ui.MainActivity_
Note: Generating source file: com.travelguard.ui.TermsActivity_
Note: Generating source file: com.travelguard.ui.TravelGuardActivity_
Note: Generating source file: com.travelguard.ui.fragments.AdviceDetailFragment_
Note: Generating source file: com.travelguard.ui.fragments.AdviceFragment_
Note: Generating source file: com.travelguard.ui.fragments.AssistanceFragment_
Note: Generating source file: com.travelguard.ui.fragments.CategoryFragment_
Note: Generating source file: com.travelguard.ui.fragments.ContactFragment_
Note: Generating source file: com.travelguard.ui.fragments.InstructionsFragment_
Note: Time measurements: [Whole Processing = 913 ms], [Generate Sources = 358 ms], [Extract Manifest = 163 ms], [Process Annotations = 158 ms], [Extract Annotations = 120 ms], [Validate Annotations = 82 ms], [Find R Classes = 28 ms],
Note: Time measurements: [Whole Processing = 0 ms],
Note: Time measurements: [Whole Processing = 0 ms],
warning: The following options were not recognized by any processor: '[androidManifestFile]'
Note: /Users/david/Developer/.../src/main/java/com/travelguard/ui/ContactDetailActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/david/Developer/.../src/main/java/com/travelguard/service/SmartTravellerService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:TravelGuard:preDexDefaultFlavorDebug UP-TO-DATE
:TravelGuard:dexDefaultFlavorDebug
:TravelGuard:processDefaultFlavorDebugJavaRes UP-TO-DATE
:TravelGuard:validateDebugSigning
:TravelGuard:packageDefaultFlavorDebug
Error: duplicate files during packaging of APK /Users/david/Developer/.../build/apk/TravelGuard-defaultFlavor-debug-unaligned.apk
    Path in archive: META-INF/LICENSE.txt
    Origin 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    Origin 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.2/397f4731a9f9b6eb1907e224911c77ea3aa27a8b/commons-codec-1.2.jar
:TravelGuard:packageDefaultFlavorDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':TravelGuard:packageDefaultFlavorDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    File 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.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: 21.957 secs

Сегодня утром все работало нормально, пока я не обновил Android Studio. Любые идеи?

РЕДАКТИРОВАТЬ: я смог временно исправить это, выполнив такие команды, как

zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt

пока все повторяющиеся ошибки не исчезли.



2
Это похоже на ошибку code.google.com/p/android/issues/detail?id=61573 . Я не знаю, почему в этом выпуске это стало для вас неприятным.
Скотт Барта

застрял с той же проблемой. Решили остаться на Android Studio 0.3.7 и плагине gradle 0.6.3, пока ошибка не будет устранена
mente

6
Вы должны быть уверены в своих формулировках: вы не используете gradle 0.7.0 - это плагин для Android. Который использует Gradle (с оберткой) в версии 1.9.0. Неправильные формулировки приведут к путанице - помимо данного контекста.
onigunn

1
Обратите внимание, pickFirstопция доступна с Gradle 0.9.1 .
JJD

Ответы:


475

Начиная с версии Android Studio 0.8.14

Вы должны добавить:

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

в ваш build.gradleфайл.

История:

Согласно комментарию 14 в этой ошибке: https://issuetracker.google.com/issues/36982149#comment14 это ошибка в v0.7.0 плагина Android Gradle, которая должна быть исправлена ​​в версии 0.7.1 в ближайшее время.

Вот заметки из этой ошибки о дополнении для 0.7.1:

0.7.1 вышла с исправлением для этого.

DSL для исключения файлов:

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

Вы можете добавить столько исключений, сколько хотите. Значение - это путь к архиву. Пока нет подстановочных знаков или поддержки глобуса.

Имена файлов "LICENSE.txt" и "NOTICE.txt" чувствительны к регистру. Пожалуйста, попробуйте также использовать "license.txt" и "note.txt".


12
Спасибо! Я также должен был исключить «META-INF / NOTICE.txt»;)
Climbatize

71
День за днем ​​я удивляюсь тому, как программисты могли работать удаленно до того, как пришел стекопоток. Спасибо за исправление! Вместо этого мне пришлось исключить META-INF / LICENSE и / NOTICE. (Нет текста, даже на последнем выпуске.)
domenukk

3
Какой файл я должен отредактировать и где его можно найти? спасибо, эяль
eyal

2
@ um.anusorn Шон дал вам хороший пример для файла Gradle, который исключает эти файлы из библиотек во время упаковки. Это то, что у меня есть: packageOptions {exclude «META-INF / licence», исключить «META-INF / NOTICE», исключить «META-INF / DEPENDENCIES», исключить «META-INF / license.txt», исключить «META-INF /» dependenices.txt 'исключить' META-INF / note.txt '}
praneetloke

4
Все еще распространенная ошибка в v0.12 встроенных инструментов .. Просто говорю
Nilzor

149

В моем случае мне пришлось включить несколько дополнительных исключений. Похоже, ему не нравятся регулярные выражения, которые бы сделали это хорошим однострочником.

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/notice.txt'
    }
}

Мне только нужно LICENSEи NOTICEпосле того, как я добавил commons-lang3.
Theblang

Этот мне помог (у меня есть AndroidAnnotations + Spring REST шаблон). С необходимостью добавлять такие хаки этот продукт IntelliJ ужасно начинает напоминать Eclipse ...
javaxian

Не знаю, какой из них влияет, но это действительно полезно.
CopperCash

Не работает для меня, все еще показывает Предупреждение: Зависимость org.apache.httpcomponents: httpclient: 4.3 игнорируется для отладки, поскольку это может конфликтовать с внутренней версией, предоставленной Android. В случае проблем, пожалуйста, перепакуйте его с jarjar, чтобы изменить пакеты классов
VVB

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

4
Мне нужен был .txtсуффикс.
Theblang

1
Что-то еще, что я делаю, просто вернуло меня сюда, и мне не понадобился .txtсуффикс. Так что я думаю, YMMV (или MMMV в зависимости от времени года).
theblang

31

Посмотрите на комментарий Сакибоя !


Устаревший ответ

Начиная с Gradle 0.9.1 поддерживается следующее:

android.packagingOptions {
    pickFirst 'META-INF/LICENSE.txt'
}

Больше информации в примечаниях к выпуску Gradle .


3
Это лучшее решение, поскольку разработчики обязаны включать эти файлы при использовании программного обеспечения с открытым исходным кодом.
Louth

1
Хороший вариант, но этот комментарий совершенно неверный. Будет включена только лицензия из первой библиотеки, все остальное будет пропущено.
Игорь Чордаш

1
это полезно, если 2 библиотеки используют одни и те же файлы .so
Fabian

Могу ли я использовать это для двух файлов JAR, содержащих один и тот же файл .class? У меня есть два JAR-файла, которые содержат org / xmlpull / v1 / XmlPullParser.class
WillC

2
@PSIXO, вы можете увидеть ответ ниже, если хотите включить ВСЕ лицензии: stackoverflow.com/a/47828425/2371425
Sakiboy

12

Та же проблема, когда я экспортирую библиотеку httclient-4.3.5 в Android Studio 0.8.6, мне нужно включить это:

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

Библиотека заархивировала содержимое следующей банки:

commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.5.jar
httpclient-4.3.5.jar
httpclient-cache-4.3.5.jar
httpcore-4.3.2.jar
httpmime-4.3.5.jar

8

Эта ошибка все еще существует в 0.8 + / 1.10

С джексоном

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2'

Я должен был включить, а также вышеупомянутое предложение, прежде чем оно скомпилирует

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'

как исключить 'META-INF / services / com.fasterxml.jackson.core.JsonFactory'. Какой файл я должен редактировать?
UmAnusorn

6

Это более одной ошибки

Под apply plugin: 'android-library'

Добавь это ::

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

В случае дубликатов файлов легко, заглянуть внутрь JARпод META-INFкаталог и посмотреть , что вызывает ошибку. Это может быть несколько. В моем случае плагин Couchbase Lite. Когда вы добавите больше плагинов, вам понадобится больше исключений


Глупый вопрос: где этот файл JAR?
WillC

В Android Studio, запуск Gradle с --info флагом позволяет мне видеть журнал классов, добавляемых в apk, и затем я могу искать вверх, чтобы найти запись журнала для того же класса, добавляемого из другого JAR. Это также показало мне путь файла к обоим файлам JAR. Я не смог найти хороший способ выбрать один файл .class над другим, поэтому я изменил один из файлов JAR и удалил дубликат .class
WillC

4

Та же проблема, когда я использовал 'org.springframework.android:spring-android-rest-template:2.0.0.M1' в Android Studio 1.0.1. Мне нужно включить это вbuild.gradle

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



2

Проблема в том, что папка META-INF не будет отфильтрована, поэтому множественные записи NOTICEили LICENSEдубликаты при сборке будут пытаться скопировать их вместе.

Грязное Быстрое Исправление:

Откройте .jarфайл в вашей .gradle/caches/...папке (с помощью zip-совместимого инструмента) и удалите или переименуйте файлы в META-INFпапке, которые вызывают ошибку (обычно NOTICEили LICENSE). (Я знаю, что это тоже в ОП, но для меня это было не совсем понятно, пока я не прочитал форум Google)

РЕДАКТИРОВАТЬ:

Это было исправлено в 0.7.1. Просто добавьте искажающие файлы, чтобы исключить.

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}

Ой, прости, я просто понимаю это сейчас.
UmAnusorn

Возможно, худший из возможных ответов: изменение банок в кэше Gradle может изменить их контрольную сумму, и, как следствие, это не будет работать долго ... кроме того, это не ваши банки
Riduidel

Да, именно поэтому он говорит «Грязное быстрое исправление» жирным шрифтом. Также правильное решение - только параграф. Вы понимаете, что это было написано в то время, когда не было чистого решения, но людям все еще нужно было скомпилировать свои приложения.
Патрик Фавр

2

То же самое здесь с

dependencies {
    compile 'org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0'
}

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

Я потерял около 2 дней из-за этой странной ошибки ... Почему это все еще происходит в Gradle 1.0.0? Это очень тревожно для новичков ... Во всяком случае, спасибо за эту информацию, я думал, что это было в моем коде :)


2

Важно знать, в каком файле происходит эта ошибка (в вашем примере это META-INF / LICENSE.txt), в моем случае это было в META-INF / LICENSE [без «.txt»], а затем в файле META-INF / ASL2.0, поэтому я добавил в свой build.gradle следующие строки:

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

Очень важно (!) -> добавить имя файла в том же стиле, который вы видите в сообщении об ошибке: текст чувствителен к регистру, и есть разница между * .txt и * (без «txt») ,


2

Если вы хотите внести свой вклад как разработчик, используя библиотеки с открытым исходным кодом, попробуйте включить все эти лицензии с открытым исходным кодом в свои apk. Для этого вы можете использовать метод слияния в вашем packagingOptions.

Пример:

packagingOptions {
        // This will get include every license and notice regardless of what dir it’s in.
        merge '**/LICENSE.txt'
        merge '**/NOTICE.txt'
        merge '**/notice.txt'
        merge '**/license.txt'
        merge '**/NOTICE'
        merge '**/LICENSE'
        merge '**/notice'
        merge '**/license'
        merge '**/LGPL2.1'
        // This will exclude any README files, regardless of the dir or the file type.
        exclude '**/README.*'
}

Этот ответ лучше, чем использовать, pickFirstпотому что этот метод выбирает только первую найденную лицензию и игнорирует все остальные, что делает его бесполезным в этом случае.

Короче говоря, используйте mergeметод, чтобы включить все эти лицензии из тех потрясающих библиотек с открытым исходным кодом, которые вы использовали.

Больше информации на Gradle PackagingOptions .


2

Я заметил этот комментарий коммита в AOSP, решение будет состоять в том, чтобы исключить некоторые файлы, используя DSL. Вероятно, когда выйдет 0.7.1.

commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date:   Thu Dec 19 10:21:04 2013 -0800

    Add DSL to exclude some files from packaging.

    This only applies to files coming from jar dependencies.
    The DSL is:

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

да, и они только что написали заметки о выпуске на сайте сборки, так что, надеюсь, они скоро загрузят артефакт в maven central, чтобы мы могли использовать это!
Мэтт Вулф

1

В моем случае мне нужно всего лишь добавить в файл build.gradle проекта:

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

   ...
}

0

В Android Studio 1.1.0 мне нужны были строчные имена:

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

0

Файлы "LICENSE.txt" и "NOTICE.txt" чувствительны к регистру. Так что для библиотеки SPring Android я должен был добавить

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

0

Удаление .txt после ЛИЦЕНЗИИ удалило мою ошибку:

packagingOptions {
    exclude 'META-INF/LICENSE'
}

0
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.