2013-07-04 2 views
122

У меня есть образец проекта, со следующей установкой:Android студия добавить внешний проект build.gradle

/root 
    + Pure Java Lib 
    + Android Test Lib 
    + Android Test Project 

Где 'Test Project' зависит от 'Test Lib', и последнее зависит от «Pure Java Lib ' Компиляция проекта и запуск этой настройки очень просто.

Теперь я собираюсь импортировать свое предыдущее рабочее пространство Eclipse и работать с Android-студией, проблема в том, что настройка проекта отличается, и я хотел бы сохранить ее таким образом.

, например, если использовать предыдущий пример:

/root 
    + Android Test Lib 
    + Android Test Project 

/Some Other folder (another repository for example) 
    + Pure Java Lib 

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

Во многих платформах/модулях вы можете использовать «..» для перемещения вверх по папкам, но это не сработало для меня, возможно, я использовал это неправильно.

Кто-нибудь знает, как это можно достичь с помощью Gradle?

UPDATE

Я постараюсь быть более общим:

/C:/ 

    /Project A 
    + Module 1 - Pure Java 
    + Module 2 - Android Test Lib 
    + Module 3 - Android Test Project 

    /Project B 
    + Module 1 - Pure Java 
    + Module 2 - Pure Java 
    + Module 3 - Pure Java 

Я хотел бы использовать модуль 1 из проекта B, в проекте.

+4

Я вижу, что этот вопрос получает некоторое внимание ... После того, как я действительно очень сильно поработал, я отказался от студии Android, так как сложность настройки, которую я пыталась построить, слишком много, и мой окончательный проект был выполнимым, но очень неустойчивым. с каждым запуском студии Android мне пришлось снова установить некоторые параметры и вручную заставить сборку работать. прошло уже два месяца с тех пор, как я сдался, и я надеюсь, что теперь все будет лучше! – TacB0sS

+0

Подход 2 здесь объясняет, как сделать это очень легко: http://stackoverflow.com/questions/25610727/adding-external-library-in-android-studio –

ответ

202

Предполагая, что некоторые другие папки является Gradle проект, который вы могли бы добавить что-то вроде следующего к вашему settings.gradle файла:

include ':module1' 
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1') 
+1

SomeOtherFolder указывает на папку проекта, и в ней есть модули, которые мне интересны для добавления в модули для проекта Android Lib. – TacB0sS

+0

. Настройки dir указывают на «root». Мне нужно получить уровень выше, другому модулю в другой проект. – TacB0sS

+0

Вы могли бы добавить подмодули после этого? include ': someOtherFolder: proj1' – Ethan

8

Щелкните правой кнопкой мыши по проекту - выберите «Открыть настройки модуля» - выберите «Модули» в левой панели - нажмите «+» символ сверху - Выберите «Импортировать модуль».

После импорта модуля. Вам нужно добавить его как зависимость для вашего текущего проекта.

Сохранить «Модули» Выбраны в левой панели и нажмите на свой проект. Теперь перейдите на вкладку зависимостей и нажмите «+», который расположен внизу. Выберите третий вариант «Зависимости модуля», и если вы импортировали свой проект правильно, он покажет вам весь доступный модуль, который можно добавить в качестве зависимости от вашего текущего проекта.

+0

Это почти работает ... проект не может быть построен, потому что вывод модуля зависимости не добавляется в файл build.gradle, что является моей первоначальной проблемой. – TacB0sS

+0

Я думаю, что с помощью gradle вам нужно поместить все проекты в одну корневую папку. Попробуй это. Поместите проект, который вы хотите добавить как зависимость в той же папке, что и ваш текущий проект. – Varundroid

+0

Это то, что никто не хочет делать, кроме ATM, если вы хотите работать с Android Studio, это способ заставить все работать. Другой альтернативный способ, которым я следую, - создать проект в Intellij, настроить все зависимости, а затем импортировать этот проект в студию Android, сделав это, я заставляю Android Studio использовать систему сборки ant, а не Gradle. Надеюсь, поможет. Ура !! – Varundroid

9

С Gradle 1.10 (не знаю, что другие версии, это будет справедливо для) это то, что я придумал на основе ответа, приведенного здесь http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

У меня есть проект библиотеки api, общий проект библиотеки и основной проект приложения. Каждый из них является автономным проектом разработки, и две библиотеки предназначены для совместного использования несколькими приложениями.

В настройках.Gradle для общего проекта:

def apiLibDir = file('../android-api/android-api-lib') 
def rootProjectDescriptor = settings.rootProject 
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir) 
include ':android-api-lib' 

Затем в главном приложение проекта settings.gradle:

def apiLibDir = file('../android-libs/android-api/android-api-lib') 
def rootProjectDescriptor = settings.rootProject 
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir) 
include ':android-api-lib' 

def commonLibDir = file('../android-libs/android-common/android-common-lib') 
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir) 
include ':android-common-lib' 

В каждом из соответствующих build.gradle файлов вы просто ссылаться на их имя, которое вы дали им в settings.createProjectDescriptor, как и любой другой проект зависимостях:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':android-api-lib') 
    compile project(':android-common-lib') 
} 

Это похоже на работу. Я даже подозреваю, что он даже не сделал ошибку для нескольких файлов DEX, определяющих библиотеку api, потому что все это было частью одного и того же процесса сборки, и Gradle был достаточно умен, чтобы понять все это.

+2

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

+0

Большое вам спасибо. оно работает!!! –

+0

@Czechnology Была такая же проблема. Решил. См. Мой комментарий для этого ответа: https://stackoverflow.com/a/29603354/7408927 – Sevastyan

0

Как сказал Этан, если добавить к вашей settings.gradle, это добавит внешний проект в Android Studio (в этом примере, это в родительской папке):

project(':../ProjectB/:module1') 

Затем, чтобы добавить это как зависимость одного из ваших проектов, просто добавьте его в build.gradle этого проекта в другой зависимости, как это (вы также можете сделать это графически as in here):

compile project(':../ProjectB/:module1') 
36

вы должны поместить в файл settings.gradle эти строки:

include ':module2' 
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2') 

Затем вы должны добавить в ваш builde.gradle (Module: приложение) в зависимостей дерева, эта строка:

compile project(':module2') 

или идти в Структура проекта>Приложение>Зависимости, нажмите Добавить, выберите 3 Зависимости модуля и выберите ваш модуль

+1

Если у вас возникли проблемы со ссылкой на классы библиотеки из основного приложения, это связано с тем, что библиотека, вероятно, поставляется в разных вариантах. Итак, просто укажите зависимость соответствующим образом: 'compile project (путь: ': library', configuration: 'variant')'. Здесь 'variant' состоит из' flavor' и 'buildType', как определено в файле' build.gradle' библиотеки. Например, если вы хотите, чтобы тип сборки 'release' библиотеки был создан в стиле' develop', тогда 'variant' является' developRelease'. – Sevastyan

Смежные вопросы