Как разрешить " дубликаты файлов, скопированных в APK META-INF/*"
Я работаю в коммерческом приложении для android.
Я также использую некоторые библиотеки, лицензированные под разными типами лицензий, некоторые из них заявляют следующее:
если библиотека имеет файл "уведомление" с примечаниями об атрибуции, вы должны включить это уведомление при распространении
(один из них под лицензией Лицензия Apache 2.0 например).
существует более одной библиотеки. Когда я делаю сборку с помощью ш или 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 предлагают удалить лицензию.txt (обратите внимание.txt или другие файлы, которые могут помешать этому) от упаковки путем добавления в следующее:
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 2.0 например), файлы лицензии и уведомления должны быть входит.
мой вопрос: как я могу добавить несколько файлов, связанных с лицензированием(например,лицензия.txt,уведомления.txt etc) из gradle в мой проект, чтобы быть совместимым с лицензиями (технические данные: тексты лицензий будут объединены)?
6 ответов:
есть решение если у вас есть только одна лицензия, используя имя
license.txt(читай: всеlicense.txtкопии идентичны):packagingOptions { pickFirst 'META-INF/license.txt' }в противном случае, Google также выпустила плагин Gradle для управления лицензиями зависимостей. Смотрите здесь. Я не пробовал, но похоже, что он способен агрегировать каждую зависимость и даже генерировать действие, отображающее все эти лицензии.
добавить следующее в соответствующей сборки.gradle file
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' }
Я столкнулась с той же проблемой с моим приложением. Вы должны убедиться, что вы не добавили никаких библиотек дважды. Если вы следовали военнослужащих документации https://firebase.google.com/docs/android/setup
тогда вы не должны добавлять библиотеку firebase внутри Android studio т. е. файл->структура проекта->Облако->военнослужащих
вы должны сделать только один из обоих, чтобы использовать 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 { исключить ' META-INF / LICENSE.txt' исключить ' META-INF / NOTICE.txt'}
Comments