Intereting Posts
Проблема с Google Диском Android API Создание собственного приложения для камеры + Автоматический захват изображения Как записать экран с Android Studio Как я могу предотвратить закрытие приложения Phonegap при возникновении ошибки? Что такое getGlobalVisibleRect ()? Использование библиотеки Closure в приложении Phonegap (Android) Android Studio не отображает модули в структуре проекта Как создать Android VectorDrawables из Illustrator (или аналогичный инструмент)? Как правильно использовать предварительно загруженную базу данных в Android Ящик навигации и просмотр пейджера в той же активности Изменить флажок «Контекстная панель действий» или сделать допустимым? Как получить эффект шатра с видом списка в ответном нативном? Макеты Android начинаются с <? Xml version …?> Android: универсальный загрузчик изображений Загрузка большого изображения Android Studio и Gradle, аргумент 0 для параметра @NotNull

Отделите проект Android в нескольких других иждивенцах

У меня есть проект под названием «app-project» (сокращенно здесь как AP ), у которого есть модуль «приложение» . Чтобы сделать вещи многоразовыми, этот проект зависит от другой библиотеки проектов с именем «lib-android-network» ( LAN ) и его модуля lib . Это зависит от другого проекта под названием «lib-android-base» (LAB) и его модуля «lib» . Все эти проекты остаются в одном каталоге в иерархии. Я использую Gradle и Intellij в Windows 8.1.

Ex: каталоги: root / app-project root / lib-android-network root / lib-android-base

Я начинаю с проектной AP зависит от локальной сети проекта, без проекта LAB .

Чтобы сделать AP см. LAN моими настройками .

include ':app', "../lib-android-network", "../lib-android-network:lib" 

И в build.gradle модуля «app» у меня есть:

 compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':../lib-android-network:lib') 

Я не знаю, как (я должен сделать много попыток до достижения этой конфигурации), но он отлично работает до сих пор, когда нужен третий проект LAB .

Как я уже сказал, у меня локальная сеть зависит от LAB . Поэтому я поместил в LAN settings.gradle файл:

 include ':lib', '../lib-android-base', '../lib-android-base:lib' 

И в build.gradle модуля LAN 'lib' :

 compile project(':../lib-android-base:lib') 

Это та же идея, что работает для AP -> LAN- зависимости, но когда я запускаю Gradle против моего первого проекта, я получаю эту ошибку:

Ошибка: (37, 0) Проект с путём: ../ lib-android-base: lib 'не найден в проекте': ../ lib-android-network: lib '.

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

РЕДАКТИРОВАТЬ

Основываясь на этом ответе и этом примере проекта, я изменяю что-то в своем собственном проекте, чтобы сделать его более правильным:

Проект AP:

settings.gradle:

 include ':lib-android-network', ':lib-android-network:lib' project(':lib-android-network').projectDir = new File(settingsDir, '../lib-android-network') project(':lib-android-network:lib').projectDir = new File(settingsDir, '../lib-android-network/lib') 

Приложение / build.gradle:

 compile project(':lib-android-network:lib') 

Проект LAN:

settings.gradle:

 include ':lib-android-base', ':lib-android-base:lib' project(':lib-android-base').projectDir = new File (settingsDir, '../lib-android-base') project(':lib-android-base:lib').projectDir = new File (settingsDir, '../lib-android-base/lib') 

Библиотека / build.gradle:

 compile project(":lib-android-base:lib") 

Но я все равно получаю ту же ошибку:

Ошибка: (39, 0) Проект с путём: lib-android-base: lib 'не найден в проекте: lib-android-network: lib'.

— РЕДАКТИРОВАТЬ 2 —

Он работает, если я повторяю настройку настройки конфигурации сетевого проекта в проект приложения, но

 include ':lib-android-base', ':lib-android-base:lib', ':lib-android-network', ':lib-android-network:lib' project(':lib-android-base').projectDir = new File(settingsDir, '../lib- android-base') project(':lib-android-base:lib').projectDir = new File(settingsDir, '../lib-android-base/lib') 

Но я думаю, мне не пришлось бы повторять эту конфигурацию в моем базовом приложении всякий раз, когда мне приходилось добавлять зависимость от проекта lib-android-network. Это запутается …

Существует ли «Лучшая практика» для работы с несколькими библиотечными проектами? Каков наилучший способ справиться с этим? Является ли он добавлением каждого lib в качестве вспомогательного модуля для верхнего проекта?

Хотя я не нашел идеального решения. До сих пор лучшее решение, которое я нашел, основывалось на этом сообщении в блоге, найденном @hgoebl и размещенном в комментариях:

Чтобы описать здесь, что я сделал:

Я вношу изменения в проект lib-android-base: для проверки другой конфигурации я изменил имя модуля «lib» на «lib_base» и ушел так, но не было никакого влияния.

Я меняю IDE с Intellij 14.1.4 на Android Studio 1.3.1: я думал, что Android-аперия справилась лучше с импортом, сделанным в Gradle.

В lib-android-сети в файле settings.gradle я добавил:

 //":base" here can be any word you use to name lib-android-base project in lib-android-network context. include ':base' project (':base').projectDir = new File ('../lib-android-base/lib_base/') 

В файле lib-android-network / lib build.gradle я добавил:

 compile project (':base') 

В моем файле проекта Project.gradle я добавил:

 include ':base' include ':network' project(':base').projectDir = new File ('../lib-android-base/lib_base/') project(':network').projectDir = new File('../lib-android-network/lib/') 

И в файле Project Project build.gradle я добавил:

 compile project (':network') 

Единственной проблемой, с которой я не нашел решения, был тот факт, что мне пришлось ссылаться на «android-lib-base» в проекте приложения, так как я не использую его напрямую. Но для меня все нормально.