Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can Android Libraries in Gradle have other Android Libraries as dependencies?

Is this structure allowed?

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | settings.gradle
       | build.gradle
       + libraries/
          + sublib1/
             | build.gradle
          + sublib2/
             | build.gradle
    + lib2/
       | build.gradle

I had this working with Ant but with Gradle my project can't find sublib1 or sublib2.

When I run gradle I get this error:

* What went wrong:
A problem occurred evaluating project ':libraries:lib1'.
> Project with path ':libraries:sublib1' could not be found in project ':libraries:lib1'.

This is settings.gradle from MyProject:

include ':libraries:lib1'
include ':libraries:lib2'

This is build.gradle from MyProject:

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

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

android {
    compileSdkVersion 15
    buildToolsVersion "17.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

This is settings.gradle from lib1:

include ':libraries:sublib1'
include ':libraries:sublib2'

This is build.gradle from lib1:

buildscript {
    repositories {
        mavenCentral()
    }

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

apply plugin: 'android-library'

android {
    compileSdkVersion 15
}
like image 692
theJosh Avatar asked Jun 03 '13 14:06

theJosh


People also ask

What are third party libraries in Android?

The third-party libraries are reusable resources that are widely employed in Android Apps. While the third-party libraries provide a variety of functions, they bring serious security and privacy problems. The third-party libraries and the host Apps run in the same process and share the same permissions.


1 Answers

Gradle does not seem to support several settings.gradle files. This file should be present only in the project root and should include all the subprojects :

include ':libraries:lib1', ':libraries:lib1:libraries:sublib1', ':libraries:lib1:libraries:sublib2', ':libraries:lib2'

Source : http://www.gradle.org/docs/current/userguide/multi_project_builds.html

like image 55
lukas Avatar answered Sep 19 '22 01:09

lukas