Транзитивные зависимости .aar

Я создаю модуль .aar, который зависит от другого файла .aar.

Я добавляю зависимость к проекту в свой файл gradle следующим образом:

debugApi(group: 'com.mydomain.mylib', name: 'anotherlib-debug', version: '1.0', ext: 'aar') {
    transitive=true
}
releaseApi(group: 'com.mydomain.mylib', name: 'anotherlib-release', version: '1.0', ext: 'aar') {
    transitive=true
}

Похоже, что transitive=true не работает, потому что, когда я создаю свой файл .aar, зависимости не включаются.

У меня есть 2 вопроса:

<сильный>1. Как включить файлы зависимостей .aar, чтобы они встраивались в мои модули .aar?

<сильный>2. Могу ли я создать файл .aar модулей, чтобы он не выставлял зависимость .aar API в любом проекте, который его использует? . То есть я хотел бы запретить тому, кто использует мой модуль в своем проекте, прямой доступ к API из файла зависимостей .aar. Я бы хотел, чтобы они использовали только тот API, который я создаю, который обертывает или использует зависимость.


person MayNotBe    schedule 12.07.2018    source источник


Ответы (2)


AAR не управляют зависимостями; maven (обычно через файл pom.xml вместе с AAR). Вам нужно будет проверить процесс сборки для этих AAR, чтобы убедиться, что они правильно генерируют и развертывают файлы pom.

Что касается второго вопроса, gradle ведет себя так, если вы замените debugApi на debugImplementation. Если вы пытаетесь распространить это на всех, кто использует модуль, это в принципе невозможно, поскольку они все еще могут напрямую зависеть от зависимости.

В качестве альтернативы (возможно, это было то, что вы хотели спросить в первую очередь), можно скомпилировать код библиотеки и зависимости в «толстый» AAR, который не имеет зависимостей и эффективно скрывает свои внешние зависимости. Обратите внимание, что у вас могут возникнуть проблемы с путем к классам, если вы также напрямую зависите от тех же зависимостей при использовании кода, поэтому будьте осторожны. Android изначально не поддерживает это, но есть плагины, которые могут помочь, например https://github.com/adwiv/android-fat-aar

person Robert Williams    schedule 12.07.2018

  1. transitive=true не помогает включить зависимый aar.
  2. aar можно использовать только автономно, что означает, что невозможно объединить несколько aar в один fat-aar без правильно написанного настроенного плагина gradle.
  3. Есть некоторые обсуждения в разрешение многопроектных зависимостей Android gradle, которые могут быть связаны с ваш вопрос.
person shizhen    schedule 13.07.2018