Как создать лучшую структуру проекта приложения 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 файлы для всех "корневых" проектов.