How to configure the order of libraries in the classpath for Android Studio? How to configure the order of libraries in the classpath for Android Studio? android android

How to configure the order of libraries in the classpath for Android Studio?


I use the following task to make sure that the SDK dependency is listed last:

task pushDownJdkDependency {    def imlFile = file("ui.iml")    doLast {        try {            def parsedXml = (new XmlParser()).parse(imlFile)            def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }            parsedXml.component[1].remove(jdkNode)            new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': "Android API 18 Platform", 'jdkType': 'Android SDK'])            def writer = new StringWriter()            new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)            imlFile.text = writer.toString()        } catch (FileNotFoundException e) {            // nop, iml not found        }    }}

make sure you use the correct SDK identifier. Then hook the task into the build process:

gradle.projectsEvaluated {    preBuild.dependsOn(pushDownJdkDependency)}

Other than that, add the task to your run configuration. Unfortunately I cannot post images due to lack of reputation.


You have to modify the project .iml file to have the JDK as the last entry like the following:

    <orderEntry type="library"                 exported=""                 scope="TEST"                 name="wagon-provider-api-1.0-beta-6"                 level="project" />    <orderEntry type="library"                 exported=""                 scope="TEST"                 name="xercesMinimal-1.9.6.2"                 level="project" />    <!-- make sure this is the last orderEntry -->    <orderEntry type="jdk"                 jdkName="Android API 19 Platform"                 jdkType="Android SDK" />   </component></module>

For a full working example see Robolectric's deckard-gradle sample.