Как создать лучшую структуру проекта приложения Android с Android Studio и Gradle?
Я пытаюсь переключиться на Android Studio и Gradle, но у меня есть некоторые проблемы с интеграцией в Studio и с помощью Gradle.
- У меня есть приложение, которое опирается на несколько библиотек.
- Я бы хотел использовать Android Studio и систему сборки Gradle.
- Я использую git
- Большинство моих библиотек прямо
git clone
d из их местоположения github
В настоящее время у меня есть:
Main Project
├── GH Lib 1
│ ├── <some stuff from the lib>
│ └── library
│ ├── AndroidManifest.xml
│ ├── res
│ └── src
├── GH Lib 2
│ └── <same structure as the lib 1>
├── GH Lib 3
│ └── <same structure as the lib 1>
│── GH Lib 4
│ └── <same structure as the lib 1>
└── My App folder
└── AndroidManifest.xml
└── res
└── src
└── libs
Каждый из каталогов GH Lib X является результатом клонирования git от GitHub (например: ActionBarSherlock).
"Моя папка приложения" содержит непосредственно res
, src
, AndroidManifest.xml
, libs
(с банками) и т.д.
1-й вопрос
Я хотел бы понять, как я могу интегрировать все это в Studio с помощью Gradle. В настоящее время каждый lib является модулем и содержит файл build.gradle. Мое приложение также содержит файл build.gradle, однако я не могу ссылаться на зависимости из других папок, потому что они находятся в родительской папке, и этот AFAIK не может быть выполнен с помощью Gradle.
Будет ли эта структура лучше?
My App Folder
│── AndroidManifest.xml
│── res
│── src
│── libs
└── dependencies
│── GH Lib 1
│── GH Lib 2
│── GH Lib 3
│── GH Lib 4
└── My App folder
Мой второй вопрос, связанный с этим, - это интеграция с git. В настоящее время все libs являются git подмодулями, это хорошая идея?
Ответы
Ответ 1
Вы должны посмотреть пример мультипроекта для макета, прикрепленного к документу.
http://tools.android.com/tech-docs/new-build-system
http://docs.google.com/viewer?a=v&pid=sites&srcid=YW5kcm9pZC5jb218dG9vbHN8Z3g6NDYzNTVjMjNmM2YwMjhhNA
По существу вам нужны настройки верхнего уровня, которые связывают все части вместе. В идеале они должны быть в одном репозитории git, чтобы облегчить вашу жизнь. Однако вы, вероятно, можете использовать символическую ссылку, чтобы связать их с общим репозиторией сборки, в котором содержатся ваши настройки верхнего уровня .gradle.
Ответ 2
Эта структура будет работать нормально. У меня похожая структура и все в порядке в Ubuntu 13.04 и Android Studio 130.729444.
Вы должны предоставить settings.gradle
файл в корневом проекте со ссылками (в основном это относительный путь) к каждому модулю, который должен быть построен.
include ':my-app', ':gh-lib-1:library', ':gh-lib-2:library'
Файл Root build.gradle
должен содержать задачи/конфигурацию, которые будут распространены для всех проектов. Подробнее о настройке нескольких проектов можно найти здесь: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Multi-project-setup
В настоящий момент расположение исходных каталогов не соответствует настройке Android Studio по умолчанию. Вы можете переместить ваши каталоги src
, res
или настроить sourceSets
в build.gradle
. Это должно быть сделано для каждого проекта. Подробнее о структуре проекта: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
После этих шагов вы можете попытаться импортировать свой проект в Android Studio, выбрав файл root build.gradle
в диалоговом окне "Импорт проекта".
Возможно, сначала вы не сможете построить проект в среде IDE из-за ошибки Task 'assemble' not found in root project
. Это ошибка в Android Studio. К счастью, для этого есть обходной путь - просто включите task assemble{}
в build.gradle
файлы для всех "корневых" проектов.