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.