Я получаю конфликт «дубликаты файлов» при создании родительского проекта с двумя библиотечными модулями, которые используют одну и ту же общую библиотеку libc++_shared.so.
(ПРИМЕЧАНИЕ: пожалуйста, не считайте это «повторяющимся вопросом». Я прочитал несколько связанных сообщений, которые помогли мне зайти так далеко. Однако ни одно из сообщений не дало ответа, который работает в моем случае, связанном с Артефакты NDK.)
Сборка работала правильно, когда у меня был только 1 такой библиотечный модуль. Добавление второго библиотечного модуля теперь создает конфликт.
Рассмотрим следующую структуру проекта: 1 родительский проект, 2 «дочерних» проекта, но каждый проект расположен на одном уровне каталога (т.е. не вложен иерархически).
ProjectA/ (Parent)
LibraryModuleA1/
build/exploded-aar/com.package.name/
LibraryModuleB1/<version>/jni/armeabi-v7a/libc++_shared.so
LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
build.gradle (bgA1)
Test_APK_Module A1T/
build.gradle (bgA1T)
build.gradle (bgPA)
ProjectB/
LibraryModuleB1/ (Uses NDK)
build/lib/armeabi-v7a/libc++_shared.so
build.gradle (bgB1)
build.gradle (bgPB)
ProjectC/
LibraryModuleC1/ (Uses NDK)
build/lib/armeabi-v7a/libc++_shared.so
build.gradle (bgC1)
build.gradle (bgPC)
Библиотечный модуль A1 зависит от обоих библиотечных модулей B1 и C1.
A1 -> B1
A1 -> C1
Проекты B и C имеют код на основе NDK и корректно строятся/тестируются. Оба зависят от общей библиотеки libc++_shared.so.
Однако при сборке проекта А я получаю следующую ошибку во время задачи :LibraryModuleA1:packageDebugTest:
Error: duplicate files during packaging of APK /ProjectA/LibraryModuleA1/build/apk/LibraryModuleA1-debug-test-unaligned.apk
Path in archive: lib/armeabi-v7a/libc++_shared.so
Origin 1: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleB1/<version>/jni/armeabi-v7a/libc++_shared.so
Origin 2: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
You can ignore those files in your build.gradle:
android {
packagingOptions {
exclude 'lib/armeabi-v7a/libc++_shared.so'
}
}
* What went wrong:
Execution failed for task ':LibraryModuleA1:packageDebugTest'.
> Duplicate files copied in APK lib/armeabi-v7a/libc++_shared.so
File 1: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
File 2: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
:LibraryModuleA1:packageDebugTest FAILED
Что я уже пробовал
- Я попытался добавить предлагаемое закрытие в свой файл
build.gradle, но в какой файлbuild.gradleмне его добавить? Я добавил замыкание кbgA1,bgB1иbgC1(по одному), но безуспешно. - Предлагаемое закрытие говорит использовать
exclude 'lib/armeabi-v7a/libc++_shared.so'. Каждый «дочерний» библиотечный модуль создает файлlibc++_shared.soпо путиbuild/lib. Однако я заметил, что модуль родительской библиотеки копирует файлlibc++_shared.soподjni/armeabi-v7a/libc++_shared.soвнутри структуры каталоговbuild/exploded-aar. (См. выше) Должно ли замыкание читаться какexclude 'jni/armeabi-v7a/libc++_shared.so(т. е.jniвместоlib)? - Поскольку я использую плагин Gradle 0.9.1, я попытался использовать
pickFirstвместоexclude, но это тоже не увенчалось успехом.
Может ли кто-нибудь помочь определить, как мне настроить закрытие `packagingOptions' для моего данного случая?
Спасибо за помощь!