3

I made fairly deep research in stack overflow but I haven't found solution so far.

I have come across the error from Android Studio when running Robolectric test.

My project looks this way:

project
 -app
     -src
      -main
      -test
   -build.gradle
 -library
     -src
       -main
       -test
   -build.gradle
build.gradle

Project's build.gradle:

buildscript {
 repositories {
    mavenCentral()
    maven { url '*********************' }
    maven { url '*********************' }
 }
 dependencies {
    classpath 'com.android.tools.build:gradle:0.12.+'
    classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'
 }
}

allprojects {
 repositories {
    mavenCentral()
    maven { url '*********************' }
    maven { url '*********************' }
 }
}

app's build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'robolectric'

android {
compileSdkVersion 18
buildToolsVersion '20.0.0'

defaultConfig {
    applicationId "my.android.app"
    minSdkVersion 18
    targetSdkVersion 20
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.pro'
    }
}
sourceSets {
    androidTest {
        setRoot('src/test')
    }
    main { java.srcDirs = ['src/main/java']
           manifest.srcFile('src/main/AndroidManifest.xml')
           resources.srcDirs = ['src']
           aidl.srcDirs = ['src']
           renderscript.srcDirs = ['src']
           res.srcDirs = ['src/main/res']
           assets.srcDirs = ['src/main/assets']
    }
}

packagingOptions {
    ...
}

signingConfigs {
    release {
        ...
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}
}

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 androidTestCompile ...
 testCompile ...
 compile 'com.android.support:support-v4:20.+'
 compile 'com.google.guava:guava:17.0'
 compile project(':library')
}

task addTest {
def src = ['src/test/java']
def file = file("android-app.iml")

doLast {
    try {
        def parsedXml = (new XmlParser()).parse(file)
        def node = parsedXml.component[1].content[0]
        src.each {
            def path = 'file://$MODULE_DIR$/' + "${it}"
            def set = node.find { it.@url == path }
            if (set == null) {
                new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}",         'isTestSource': "true"])
                def writer = new StringWriter()
                new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
                file.text = writer.toString()
            }
        }
    } catch (FileNotFoundException e) {
        // nop, iml not found
    }
}
}

gradle.projectsEvaluated {
  preBuild.dependsOn(addTest)
}

tasks.withType(Test) {
  scanForTestClasses = false
  include "**/*Test.class"
}

library's build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'robolectric'

android {
compileSdkVersion 18
buildToolsVersion '20.0.0'

defaultConfig {
    applicationId "my.android.app"
    minSdkVersion 18
    targetSdkVersion 20
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.pro'
    }
}
sourceSets {
    androidTest {
        setRoot('src/test')
    }
    main { java.srcDirs = ['src/main/java']
           manifest.srcFile('src/main/AndroidManifest.xml')
           resources.srcDirs = ['src']
           aidl.srcDirs = ['src']
           renderscript.srcDirs = ['src']
           res.srcDirs = ['src/main/res']
           assets.srcDirs = ['src/main/assets']
    }
}

packagingOptions {
    ...
}

signingConfigs {
    release {
        ...
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}
}

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 androidTestCompile ...
 testCompile ...
 compile 'com.android.support:support-v4:20.+'
 compile 'com.google.guava:guava:17.0'     
}

task addTest {
def src = ['src/test/java']
def file = file("android-app.iml")

doLast {
    try {
        def parsedXml = (new XmlParser()).parse(file)
        def node = parsedXml.component[1].content[0]
        src.each {
            def path = 'file://$MODULE_DIR$/' + "${it}"
            def set = node.find { it.@url == path }
            if (set == null) {
                new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}",         'isTestSource': "true"])
                def writer = new StringWriter()
                new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
                file.text = writer.toString()
            }
        }
    } catch (FileNotFoundException e) {
        // nop, iml not found
    }
}
}

gradle.projectsEvaluated {
  preBuild.dependsOn(addTest)
}

tasks.withType(Test) {
  scanForTestClasses = false
  include "**/*Test.class"
}

The error that I am given:

 Error:(14, 9) Gradle: error: cannot access BufferedImage class file for java.awt.image.BufferedImage not found

Typing :

./gradlew clean test --stacktrace

Gives me exception:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task    ':app:compileTestDebugJava'.
at     org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:46)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.Main.main(Main.java:37)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:55)

Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:47)
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:96)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:49)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:35)
at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:29)
at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:20)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:33)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:24)
at org.gradle.api.tasks.compile.Compile.performCompilation(Compile.java:165)
at org.gradle.api.tasks.compile.Compile.compile(Compile.java:153)
at org.gradle.api.tasks.compile.Compile.compile(Compile.java:87)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:236)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:223)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 46 more

My question of course is: how to resolve it and run Robolectric tests successfully? Anyone, please.

EDIT: Could anyone recommend working android gradle plugin with instructions concerning proper gradle configuration?

dawid gdanski
  • 2,432
  • 3
  • 21
  • 29
  • Just note that you have default source layout so you can remove sources/resources/manifest specification – Eugen Martynov Jul 11 '14 at 04:58
  • What is inside libs folder? Are there any dependency to awt? – Eugen Martynov Jul 11 '14 at 07:14
  • Hey @EugenMartynov, thanks for the answer. I have no dependency in app libs nor in libreary libs folder. Totally don't know what it comes from. Any other ideas? – dawid gdanski Jul 11 '14 at 07:42
  • I think it is issue with classpath. Your class is referring for some class in android which equivalent of class in JDK. And JDK class has dependency to BuffereImage there. So while you compile JDK dependency is going before Android.jar. It is my guess – Eugen Martynov Jul 11 '14 at 07:47
  • Having set up application with maven tests executed normally. Maybe it's the Android Studio bug. – dawid gdanski Jul 11 '14 at 14:08

1 Answers1

0

You cannot use awt or swing packages on android, because android has its own graphics and UI libraries,

Look this links

http://developer.android.com/reference/android/graphics/package-summary.html

on android you can use just java.awt.font

http://developer.android.com/reference/java/awt/font/package-summary.html

Jhonatas
  • 108
  • 1
  • 5
  • Hey @Jhonatas, thanks for the reply. Yeah, I'm aware of that. I guess Eugen Martynov has a point that it is classpath JDK dependency. So far I haven't solved it. Do you know any working android gradle plugin with which I could get Robolectric tests running? I tested this one and it is working but I haven't managed to apply its configuration to my project (https://github.com/nenick/android-gradle-template). – dawid gdanski Jul 18 '14 at 14:51
  • 1
    Hey @dawidgdanski I did this, one month ago but the plugin that i used is deprecated, i created a gist with gradle config https://gist.github.com/JhonatasMartins/3b694d9308e7f535b49a – Jhonatas Jul 21 '14 at 21:40