Gradle помещает дубликаты файлов в файл apk

Я использую gradle 1.10, а версия плагина android - 0.8.0. Мои проекты для Android требуют этих двух банок: jackson-core-asl-1.9.11.jar и jackson-mapper-asl-1.9.11.jar. Я добавляю файлы таким образом:

dependencies {
    compile files('libs/jackson-core-asl-1.9.11.jar')
    compile files('libs/jackson-mapper-asl-1.9.11.jar')
}

Во время сборки gradle я получаю сообщение об ошибке, сообщающее, что эти два файла дублируются в META-INF/ASL2.0. Я решил проблему, исключив следующие файлы:

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

Я должен исключить все из них, потому что, по всей видимости, у них есть дубликат.

Я хотел бы знать, почему эта проблема возникает. Является ли это ошибкой плагина Android или самого gradle? Может ли исключение вышеуказанных файлов вызвать какие-либо проблемы? Я просто исключаю вышеупомянутые банки или что-нибудь еще в этих файлах META-INF? Я не хочу исключать все, что хочет мой проект.

Ответы

Ответ 1

Вот некоторая информация из команды Джексона https://github.com/FasterXML/jackson-databind/issues/214

Существует множество сообщений об этом на SO, например: Ошибка создания окончательного архива: найденный дубликат файла для APK: LICENSE.txt

Я также использовал Jackson с Eclipse и Ant (и теперь я использую его в Studio с тем же обходным путем, который вы используете), и мне пришлось использовать zip для команды, чтобы переименовать файл license.txt файл. Там больше информации обо всем (включая пример использования zip для переименования файла) в этом сообщении Android Gradle плагин 0.7.0:" дубликаты файлов во время упаковки APK ".

Я не нашел ничего, указывающего на то, что переименование или исключение этих файлов будет иметь негативные последствия, и я никогда не испытывал проблем в течение примерно двух лет использования Jackson с Eclipse и Ant.

Ответ 2

Сначала это не ошибка gradle. Это происходит в задаче MergeJavaResourcesTransform: введите описание изображения здесь

введите описание изображения здесь

Как известно, APK - это просто zip файл, поэтому, когда META-INFO/xxx помещается в zip файл, если файл был добавлен ранее, мы не можем его снова добавить.

И нет никаких правил слияния для файлов META-INFO, поэтому мы можем добавлять только файл, который содержит имена NOTICE и т.д.

введите описание изображения здесь