Intereting Posts
Dagger 2 Custom Scope для каждого фрагмента (или Activity и т. Д.) Android: отображение неправильного разрешения экрана Как отменить модифицированный реактивный запрос в java? Обновление содержимого recyclerview не работает в нижнем листе Является ли SQLite на Android, встроенным с токенизатором ICU, включенным для FTS? Android: Как я могу показать тост из потока, запущенного в удаленной службе? Android-эмулятор запускается, но Eclipse не распознает его Как запустить код в потоке пользовательского интерфейса в тесте Android JUnit без Activity? Удалить программную панель тени программно Что действительно делает stopLoading ()? Итерации через представления в макете и изменение шрифта Создание пользовательского LockScreen в android Android studio Ошибка «Неподдерживаемые модули обнаружены: компиляция не поддерживается для следующих модулей» Размер текста в дизайне Android TabLayout Объяснение метода getView () для ArrayAdapter

Android Studio: дубликаты файлов, скопированных в APK META-INF / DEPENDENCIES при компиляции

Я экспортировал свой проект из Eclipse и импортировал его в Android Studio, используя инструкции по этой ссылке: http://developer.android.com/sdk/installing/migrate.html

Когда я строю, у меня есть ошибка:

Duplicate files copied in APK META-INF/DEPENDENCIES 

После поиска я нашел решение: add

 packagingOptions { exclude 'META-INF/DEPENDENCIES' } 

В build.gradle . И это работает!

Но я не понимаю, почему у меня была эта ошибка и почему я должен был применить это исправление. Может кто-нибудь объяснить?

Solutions Collecting From Web of "Android Studio: дубликаты файлов, скопированных в APK META-INF / DEPENDENCIES при компиляции"

В сборках Android Gradle вам не разрешается включать один и тот же файл с одним и тем же путем более одного раза в выходной файл. В вашей сборке было два файла META-INF/DEPENDENCIES из разных мест. Поскольку вам вообще не нужен этот файл в вашем приложении, проще всего сказать, что система сборки игнорирует его вообще, что и делает эта директива exclude .

Существует также директива pickFirst чтобы сообщить системе сборки о сохранении одной из копий; В приложении Android Gradle plugin 0.7.0 имеется небольшое количество деталей : «дубликаты файлов при упаковке APK» .

Android-сборки в Gradle довольно строгие в отношении повторяющихся файлов, что может затруднить жизнь. Аналогичная проблема возникает, если вы включаете один и тот же Java-класс более одного раза, где вы получаете ошибку «Несколько файлов dex files» (см. Несколько файлов dex для определения Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat ) для типичного примера).

Другие системы сборки более снисходительны. В Java типично, что если вы включаете один и тот же класс более одного раза в путь к классам, например, первый экземпляр, который он видит, тот, который используется; Дубликаты после этого игнорируются. С этим легче справляться, но у него есть пара проблем. Самый большой из них заключается в том, что могут быть тонкие ошибки, если несколько разных версий файла ползут в сборку без вашего ведома – может быть трудно понять, что происходит. Когда вы это выясните, вы можете, как правило, решить это, жонглируя порядком, в котором все включено, чтобы убедиться, что тот, который вы хотите, делает его конечным результатом, но в очень сложных сборках этого может быть трудно достичь, и это Может случиться так, что выполнение, казалось бы, несвязанных вещей, таких как включение новых библиотек в ваш проект, может нарушить порядок и привести к большому сожалению.

По этой причине у Gradle есть философия не полагаться на упорядочение вещей, чтобы определить «победителей» в игре по разрешению дубликатов, и это заставляет разработчика делать все зависимости явными. Внедрение Android своей системы сборки поверх Gradle следует этой философии.

Хотя ответ Скотта Барты верен, отсутствует простое и общее решение: просто добавьте

 android { packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } } 

К вашему build.gradle, чтобы игнорировать эти дубликаты.

Самое простое решение – добавить

  packagingOptions { pickFirst 'META-INF/*' } 

К вашему build.gradle в разделе Android

В случае, если кто-либо из этих проблем при загрузке нового .apk в Google Play Store после обновления Android Studio;

Нажмите V1 Jar Signature not Full Apk Signature при создании нового Apk со старым Keystore

Подпись V1 Jar

Введите описание изображения здесь