У меня есть специальная библиотека, на которую нужно ссылаться примерно в 10 проектах. Все отлично работает в Eclipse, но я хочу перенести их в Android Studio, чтобы воспользоваться системой сборки. Я уже проверил
Студия Android добавляет внешний проект для сборки.gradle
Как поделиться одним источником библиотеки в нескольких проектах
и некоторые другие ссылки и документы в Gradleware, но я не собираюсь компилировать мои проекты.
Моя файловая структура похожа:
+projects
| +libraryProject
| +---workspace
| +------projectSrc
|
| +project0
| +---workspace
| +------projectSrc 0
|
| +project1
| +---workspace
| +------projectSrc 1
,
| +projectN
| +---workspace
| +------projectSrc N
Каждый проект содержит документы, файлы дизайна и т.д.... и поэтому нет необходимости иметь src в одной корневой папке.
В моем файле "project1", settings.gradle, который я использовал:
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc')
В моем файле build.gradle в разделе зависимостей добавьте:
dependencies {
compile project(':..:..:..:libraryProject:workspace:projectSrc')
....
}
Но я получаю сообщение о том, что проект не найден.
Я также использовал следующий подход:
def customLib = file('../../../libraryProject/workspace/projectSrc')
settings.createProjectDescriptor(rootProjectDescriptor, 'module-custom-lib', customLib)
include ':module-custom-lib'
Затем в build.gradle
dependencies {
compile project(':module-custom-lib')
....
}
Пожалуйста помоги. Спасибо за ваше время.
EDIT: Мне удалось заставить его работать, добавив приложение модуля в качестве суффикса в проекте dir.:
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc/app')
Теперь члены библиотеки отлично разбираются, но класс ресурсов проекта "R" не может быть разрешен. Поэтому, если я это сделаю:
setContentView(R.layout.main);
он не может найти этот ресурс. Очистка и восстановление проекта не устраняет проблему.
EDIT 2: По-видимому, возникла проблема с слиянием манифеста, потому что проблема была исправлена после того, как я скорректировал minSdk и targetSdk обоих проектов. Предыдущее решение работает отлично.
Ваша первая попытка имеет более простой синтаксис и должна работать. Файл settings.gradle выглядит нормально:
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc')
хотя вы должны быть осторожны в отношении относительного пути там - Android Studio может не использовать тот же рабочий каталог, что и сборка, которую вы делаете из командной строки, поэтому ссылки на вещи относительно rootDir
могут помочь rootDir
проблемы.
В блоке dependencies
файла сборки модуля вам необходимо ссылаться на модуль так же, как и на settings.gradle, поэтому вы должны использовать что-то вроде этого:
dependencies {
compile project(':module-custom-lib')
}
В блоках dependencies
вы ссылаетесь на проекты с использованием пространства имен проектов Gradle, и поскольку вы уже явно настроили корневой каталог библиотечного модуля, вам не нужно пытаться найти его в файловой системе здесь. Синтаксис этого :..:..:..
не будет работать в любом случае, чтобы ссылаться на модуль, который находится за пределами корневого каталога вашего проекта, как этот.
Вы должны рассмотреть возможность объединения "выпусков" вашей библиотеки в репозиторий Maven (возможно, ваш локальный репозиторий Maven). Таким образом, вы можете ссылаться на свою библиотеку из любого другого проекта, который должен использовать его так же, как и с сторонними библиотеками.