Я работаю над коммерческим приложением для Android. Я также использую некоторые библиотеки, лицензированные под разными типами лицензий, некоторые из них заявляют следующее:
Если в библиотеке есть файл «УВЕДОМЛЕНИЕ» с примечаниями об авторстве, вы должны включить это УВЕДОМЛЕНИЕ при распространении
(Один из них, например, находится под лицензией 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' }
В противном случае Google также выпустил плагин Gradle для управления лицензиями зависимостей. Смотрите здесь . Я не пробовал, но похоже, что он способен агрегировать все зависимости и даже генерировать действие, отображающее все эти лицензии.
источник
jar
файлеДобавьте следующее в соответствующий файл 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, т.е. файл-> структура проекта-> облако-> 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' } }
источник
Конечно сработает
packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' }
источник