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
- library1/
- App1/
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?
I'm doing this for relative paths:
One question. Do you need this dependency tree?
If yes, your App does not need import the libraries 3 and 4. These dependencies are available over the Library 1.
About settings.gradle files. Why one in each module? This file is only used in the root project (like Eclipse workspace) to reference your modules (App, Library 1, Library 2, etc...)
This help you?
In your top level settings.gradle (App1/settings.gradle) file do something like this for each library
Remove the other settings.gradle files, you don't need them
then in each build script you only need to use
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.