I would like to change the order of libraries in the classpath for Android Studio. I am trying to run unit tests with JUnit 4 from within the IDE
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.
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.