Как разрешить «Дублировать файлы, скопированные в APK META-INF / *»,
Я работаю над коммерческим андроидным приложением. Я также использую некоторые библиотеки, лицензированные под разными типами лицензий, некоторые из которых заявляют следующее:
Если в библиотеке есть файл «УВЕДОМЛЕНИЕ» с примечаниями о атрибуции, вы должны включить это УВЕДОМЛЕНИЕ, когда вы распространяете
(Например, один из них лицензируется под лицензией Apache 2.0 ).
- Как приложение WhiteList в режиме «Доза» Android 6.0
- Android загружает двоичные файлы
- Как подсчитать количество документов в коллекции Firestore?
- Недопустимый символ в пути по индексу 16
- Невозможно получить ответ response.body.toString () OkHttp для возврата строки
Существует более одной библиотеки. Когда я делаю сборку с помощью 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иента в мой проект, чтобы быть совместимым с лицензиями ( техническая информация: тексты лицензий будут объединены)?
- Что означает Java-вариант -Xmx?
- Java: как вызвать нестатический метод из основного метода?
- String.replaceAll без RegEx
- Как измерить прошедшее время
- Как обновить информацию в Android-активности из фоновой службы
- Как случайным образом выбрать элемент из массива
- Ошибка: выполнение выполнено для задачи: app: dexDebug. com.android.ide.common.process.ProcessException
- Как вы можете получить адрес электронной почты пользователя Android?
Существует решение, если у вас есть только одна лицензия, используя имя license.txt
(читайте: все копии license.txt
идентичны):
packagingOptions { pickFirst 'META-INF/license.txt' }
В противном случае Google также выпустил плагин Gradle для управления лицензиями зависимостей. См. Здесь . Я не пробовал, но похоже, что он способен агрегировать каждую зависимость и даже генерировать активность, отображающую все эти лицензии.
Добавьте следующий файл в соответствующий файл 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 внутри андроид-студии, то есть 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' } }
Конечно, это сработает
packageOptions {исключить ‘META-INF / LICENSE.txt’ исключить ‘META-INF / NOTICE.txt’}