2017-01-17 4 views
0

Я разрабатываю библиотеку android для работы, и мы используем некоторые банки, которые недоступны в репозиториях maven. Тем не менее, нам не разрешено юридически разрешать эти банки в нашу библиотеку, потребитель должен сам получить эти банки в дополнение к нашей библиотеке.Избегайте использования jar-зависимостей в aar

Моя проблема заключается в том, что я не могу заставить потребителя нашей библиотеки предоставить эти банки (я использую тестовое приложение, которое включает в себя aar). Я пробовал решения для this similar question безрезультатно.

Я попытался установить их provided вместо compile в моем Gradle файле:

// Neither of these seem to fix the problem 
compile files('libs/externalDep.jar') 
provided files('libs/externalDep.jar') 

Я также попытался исключить их в вариантах упаковки:

packagingOptions { exclude 'libs/externalDep.jar }` 

Я их можно исключить, добавив в тег android в моих build.gradle:

android.libraryVariants.all { variant -> 
variant.outputs.each { output -> 
    def packageLib = output.getPackageLibrary() 
    packageLib.exclude('libs/externalDep.jar') 
} 

Они не добавляют к AAR, но построение тестового приложения дает мне:

com.android.build.api.transformTransformException: 
    com.android.builder.packaging.DuplicateFileException: 
    Duplicate files copied in APK VERSION.txt 
File1: path/to/jar/in/test/app/project/externalDep.jar 
File2: path/to/build/intermediates/exploded-aar/.../jars/classes.jar 

Чтобы уточнить, я не обеспокоен все с зависимостями Maven репо, те работают отлично. Я просто хочу, чтобы тот, кто использует библиотеку, должен был получить и добавить те банки, которые мы используем.
Несомненно, есть менее запутанный способ указать это?

ответ

5

Сосуд файл должен быть перемещен на один уровень вверх, от mymodule/libs/ до mymodule/ согласно this answer.

Затем в build.gradle файле, изменения:
compile file('libs/externalDep.jar')
к
provided file('externalDep.jar')

Вот и все.
Он не будет скопирован в aar и клиенты, использующие aar, должны предоставить сам файл jar.
Проекты приложений с использованием aar могут указывать compile file('lib/externalDep') как обычно.

Смежные вопросы