Skip to content

Instantly share code, notes, and snippets.

@bademux
Last active August 29, 2015 14:10
Show Gist options
  • Save bademux/adcebd74753ec2d9398a to your computer and use it in GitHub Desktop.
Save bademux/adcebd74753ec2d9398a to your computer and use it in GitHub Desktop.
// please check https://github.com/bademux/robolectric-java-gradle-plugin instead
//build.gradle
//fixes AndroidStudion<>Robolectric integration
//fixes 'java.lang.RuntimeException: Stub!' and 'NoClassDefFoundError'
gradle.projectsEvaluated {
def imlFile = file(project.name + '.iml')
def parsedXml;
try {
parsedXml = (new XmlParser()).parse(imlFile)
} catch (Exception e) { //fix CI build
println 'iml file not found, nothing to do here!'
return
}
def jdkNode = parsedXml.depthFirst().orderEntry.find { it.'@type' == 'jdk' }
def component = jdkNode.parent()
boolean imlChanged = false
if (!component.children().last().equals(jdkNode)) {
println 'iml fix: moving <orderEntry type="jdk"> to the end'
component.remove(jdkNode)
component.append(jdkNode)
imlChanged = true
}
if (component.'output-test'.isEmpty()) {
println 'iml fix: adding <output-test>'
component.appendNode('output-test', ['url': "$project.buildDir/test-classes"])
imlChanged = true
}
if (imlChanged) {
new XmlNodePrinter(new PrintWriter(new FileWriter(imlFile))).print(parsedXml)
}
}
//fixes 'NoClassDefFoundError' (or run manually 'testDebugClasses' before test)
tasks.findByName("assembleDebug").dependsOn("testDebugClasses")
@kageiit
Copy link

kageiit commented Dec 18, 2014

I wrote a Gradle plugin to integrate Robolectric tests into Android Studio with minimal configuration.
If you are curious, please check out: https://github.com/kageiit/gradle-robojava-plugin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment