Мой проект не собирает файлы классов, определенные в папке jar библиотечного модуля - PullRequest
0 голосов
/ 28 октября 2018

Я добавил библиотеку, перейдя к File-> New ->Import Module, библиотека успешно добавлена, в этот импортированный модуль добавлено около 8 jar файлов, но в моем модуле приложения я не могу получить доступ к этим файлам.

Хотя я могу легко получить доступ к файлам, которые доступны в папке библиотеки src.

Эти строки добавляются в файл библиотеки.

compile fileTree(dir: 'libs', include: '*.jar')
compile fileTree(dir: "$buildDir/native", include: 'native.jar')

build.gradle (приложение)

compile fileTree(dir: 'libs', include: '*.jar')
compile project(':myLibrary')

settings.gradle

include ':myLibrary'

Если явыполните эти шаги в новом проекте, я могу получить доступ к классам внутри jar-файлов из моего app module, но в моем текущем проекте они недоступны.

Я также пытался удалить android studio preference, invalidate cache and restart, ноничего не видит, чтобы работать здесь.

1 Ответ

0 голосов
/ 28 октября 2018

в моем текущем проекте они недоступны.

Предполагается, что они недоступны, потому что эти файлы зависимостей не являются частью вашего проекта приложения.

Если вы хотите, чтобы доступ к этим банкам зависел от вашего библиотечного модуля myLibrary, вам нужно указать их внутри вашего app проекта, используя

compile fileTree(dir: '../myLibrary/libs', include: '*.jar')
compile fileTree(dir: "../myLibrary/native", include: 'native.jar')

и изменить myLibrary настройки должны быть

provided fileTree(dir: 'libs', include: '*.jar')
provided fileTree(dir: "$buildDir/native", include: 'native.jar')

Выполнив вышеизложенное, вы сможете получить доступ к своим банкам из модуля приложения, и не будет никаких дублирующих классов, вызывающих конфликт.

Возможно, будет лучше обновить плагин Android Gradle до версии 3.0+.

Дополнительная информация о версиях плагина Android Gradle:

  1. https://stackoverflow.com/a/51392464/8034839
  2. https://developer.android.com/studio/build/dependencies

Просто процитируйтеключевые пояснения здесь для вашей информации о provided и compileOnly:

Gradle добавляет зависимость только к пути к классам компиляции (то есть он не добавляется в выходные данные сборки).Это полезно, когда вы создаете модуль Android и вам нужна зависимость во время компиляции, но необязательно, чтобы он присутствовал во время выполнения.

Для вашего библиотечного модуля сам по себе требуется только, чтобы его зависимости былив компиляции classpath , если вы не упакуете их в свою библиотеку .jar или .aar .В этом случае приложение, использующее эту библиотеку, должно добавить эти внешние jar-файлы, зависящие от вашего библиотечного модуля, поскольку ваш библиотечный модуль не упаковал их (используя compileOnly).И вашему приложению необходимо, чтобы эти внешние jar-файлы были доступны во время выполнения с помощью compile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...