Вимагати проект Gradle з іншого каталогу


80

У мене налаштування каталогу / проекту такі:

C:\
    _dev\
        Projects\
            Logger
            MyProject

Logger - це проект бібліотеки Android, який використовує Gradle. MyProject - це стандартний проект проекту Android, який повинен використовувати бібліотеку Logger .

Я використовую Android Studio і спробував додати Logger до зовнішніх бібліотек. Хоча це працює під час розробки, я отримую повідомлення про те, що клас не був знайдений під час побудови.

Я абсолютно новачок у Gradle, але спробував наступне у своєму build.gradle в MyProject :

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 18
    }

    dependencies {
        compile files("../Logger")
    }
}

dependencies {
    compile 'com.android.support:gridlayout-v7:18.0.0'
    compile 'com.android.support:appcompat-v7:18.0.0'
}

3
Подобається це? stackoverflow.com/questions/17479076 / ...
Lesleh

Вже спробував це, на жаль. включає проект ': logger' (': logger'). projectDir = новий файл (settingsDir, '../SysLog')
Euan T

напишіть цей рядок includeFlat 'prjname' у MyProject \ settings.gradle. якщо проект sideByside / Flat / однаковий рівень, gradle auto приймає це. Також він проектувати автоматично спливає в IntelliJ деталі ідея: stackoverflow.com/questions/6995390 / ...
bh_earth0

Це питання занадто часто відвідую мною, майже кожного разу, коли я роблю новий проект gradle, тому ставлю його до обраного.
prem30488

Відповіді:


172

Найпростіший спосіб - зробити MyProjectмультипроект з Loggerпроектом як підпроектом.

settings.gradleв MyProjectкаталозі:

include ":logger"
project(":logger").projectDir = file("../logger")

В build.gradleз MyProjectтепер ви можете посилатися на цей LIB як проект:

dependencies {
     compile 'com.android.support:gridlayout-v7:18.0.0'
     compile 'com.android.support:appcompat-v7:18.0.0'
     compile project(":logger")
}

Дякую, це саме те, що мені потрібно було. Проект складено успішно, як тільки я додав це.
Euan T

Чи можете ви використовувати значення властивості з файлу gradle.properties домашнього каталогу Gradle?
Рік

Це саме те, що я щойно зробив висновок, що міг би зробити це, і саме така відповідь, яку я шукав :-D
Pixel

У мене така ж ситуація, і це рішення в settings.gradle спрацювало для мене
rinilnath

1
Дякую, добре попрацював, я прочитав тут docs.gradle.org/current/dsl/… для глибшого розуміння
Анкіт Джайн

13

Android Studio 2.2.3:

Додайте до settings.gradle.

include ':app', ':new_lib'
project(':new_lib').projectDir = new File('../new_lib/app')
  • Шлях повинен бути відносним до кореня проекту, над яким ви працюєте.
  • Модуль, на який ви посилаєтесь, повинен мати посилання на його каталог "app".

Потім відредагуйте структуру проекту | Модулі для встановлення залежностей.


Я спробував це в Android Studio, але тепер мій кореневий проект більше не вважається бібліотекою, а варіанти збірки відображають лише те, що ви називали ": new_lib" як доступний модуль. Оригінального додатка більше немає у списку модулів.
ZeroStatic

9

Спробуйте додати залежність до глобального розділу "залежності", а не до "android> зависимостей". Під час розробки використовується конфігурація "android", але не для упаковки середовища виконання.

dependencies {
    compile 'com.android.support:gridlayout-v7:18.0.0'
    compile 'com.android.support:appcompat-v7:18.0.0'
    compile files("../Logger")
}

Також може бути корисним вивчити налаштування багатопроектної конфігурації gradle за допомогою build.gradle та settings.gradle у спільному батьківському каталозі, як тут: http://www.gradle.org/docs/current/userguide/ multi_project_builds.html


1
Просто спробував це, на жаль, без успіху. Досі отримують ті самі помилки.
Euan T
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.