Ответ 1
Существует решение, если у вас есть только одна лицензия, использующая имя license.txt
(чтение: все license.txt
копии идентичны):
packagingOptions {
pickFirst 'META-INF/license.txt'
}
Я работаю над коммерческим андроидным приложением. Я также использую некоторые библиотеки, лицензированные под разными типами лицензий, некоторые из которых заявляют следующее:
Если в библиотеке есть файл "УВЕДОМЛЕНИЕ" с примечаниями о атрибуции, вы должны включить это УВЕДОМЛЕНИЕ при распространении
(один из них лицензирован под Apache License 2.0).
Существует более одной библиотеки. Когда я делаю сборку с gradle или с Android Studio, я получаю следующую ошибку сборки:
* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
Ответы, которые я нашел до сих пор в Интернете и stackoverflow, предлагают удалить из файла license.txt(notice.txt или другие файлы, которые могут помешать) из упаковки, добавив в файл build.gradle
следующее:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
См. например: Android Studio 0.4 Дублирующие файлы, скопированные в APK META-INF/LICENSE.txt
Согласно лицензии этих библиотек (например, Apache License 2.0), файлы лицензий и уведомлений должны быть включены.
Мой вопрос:. Как добавить несколько файлов, связанных с лицензированием (например, license.txt, notice.txt и т.д.) из gradle в мой проект, чтобы соответствовать требованиям лицензий ( техническая информация: тексты лицензий будут конкатенированы)?
Существует решение, если у вас есть только одна лицензия, использующая имя license.txt
(чтение: все license.txt
копии идентичны):
packagingOptions {
pickFirst 'META-INF/license.txt'
}
Добавьте следующий файл в соответствующий файл build.gradle
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/MANIFEST.MF'
}
Я столкнулся с той же проблемой с моим приложением. Вам нужно убедиться, что вы не добавляли библиотеки дважды. Если вы следовали документации по firebase https://firebase.google.com/docs/android/setup
Тогда вам не следует добавлять библиотеку firebase внутри студии Android то есть file- > project structure- > cloud- > firebase
Вы должны сделать только один из них, использовать firebase в своем приложении для Android.
В конце очистите и запустите свое приложение.
Вы можете добавить несколько лицензий в gradle посмотреть это
Я думаю, вам нужно включить только эти параметры в build.gradle:
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
Конечно, это сработает
упаковкаОпции { исключить 'META-INF/LICENSE.txt' исключить 'META-INF/NOTICE.txt'}