Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Gradle adding external library and nested external libraries to a project

How do i add an external library and nested external libraries to an android project?


My project structure (Not allowed to change)

  • Apps/
    • App1/
      • build.gradle
      • settings.gradle
    • libraries/
      • library1/
        • build.grade
        • settings.gradle
      • library2/
        • build.grade
        • settings.gradle
      • library3/
        • build.grade
        • settings.gradle
      • library4/
        • build.grade
        • settings.gradle

App1

App1/build.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}

App1 does not directly depend on library3 or library4, however, it will complain if i don't include them in the dependencies in the build.gradle file and the settings.gradle file. So, i have them included just to stop it from complaining.

App1/settings.gradle

include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'

library1

library1/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}

library1/settings.gradle

include ':'
include '..:library3'
include '..:library4'

library2..4

library2..4/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}

library2..4/settings.gradle

include ':'

When trying to gradlew clean build on App1 i get the following error:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/user/projects/branches/branch1/Apps/libraries/library1/build.gradle' line: 15

* What went wrong:
A problem occurred evaluating project ':..:library:library1'.
> Project with path ':..:library3' could not be found in project ':..:library:library1'.

Line 15 is compile project(':..:library3') in the library1/build.gradle file.

How do i add an external library and nested external libraries to an android project?

like image 985
prolink007 Avatar asked Jan 08 '14 16:01

prolink007


People also ask

How do you add dependency from one project to another in Gradle?

To add a dependency to your project, specify a dependency configuration such as implementation in the dependencies block of your module's build.gradle file.


1 Answers

In your top level settings.gradle (App1/settings.gradle) file do something like this for each library

include ':library1'   
include ':library2'   
include ':library3'   
include ':library4'   

project(':library1').projectDir = new File(rootProject.projectDir, '../libraries/library1')
project(':library2').projectDir = new File(rootProject.projectDir, '../libraries/library2')
project(':library3').projectDir = new File(rootProject.projectDir, '../libraries/library3')
project(':library4').projectDir = new File(rootProject.projectDir, '../libraries/library4')

Remove the other settings.gradle files, you don't need them

then in each build script you only need to use

compile project (':library1')
compile project (':library2')
etc....

as stated above just use a single settings.gradle file in the root project (App1).

Then from your App1 folder run gradlew clean :library1:build to validate that library1 is building correctly.

As for the issue about App1 complaining about missing libraries 3 & 4, are you sure you have no code in the app directly referencing these libraries, either that or the libraries are not being found when compiling library1. Build each library individually to validate they all build ok.

like image 175
Phil H Avatar answered Sep 16 '22 13:09

Phil H