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 и т.д.
![введите описание изображения здесь]()