1

我在 Android Studio 3.2.1 和 Android Studio 3.4 上试过如果我在 gradle 文件中启用 Java 8 并运行 espresso 测试,我会收到以下错误:

java.lang.RuntimeExceptionCause: java.lang.RuntimeException

经过多次试验,我发现从 gradle 文件中删除 Java8 支持可以解决这个问题。

但是 java 8 对我的项目很重要。你有更好的解决方案吗?

这是我的代码:

import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;

import androidx.test.espresso.Espresso;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import com.dubizzle.workshopsample.R;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;


@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityUiTest {

  @Rule
  public ActivityTestRule<MainActivity> mActivityRule
      = new ActivityTestRule<>(MainActivity.class);

  @Test
  public void testShareButtonClickedUi() {
    Espresso.onView(withId(R.id.txtStatus))
        .check(matches(withText("Hello World!")));

    Espresso.onView(withId(R.id.btnShare)).perform(click());

    Espresso.onView(withId(R.id.txtStatus))
        .check(matches(withText("onShareButtonClicked")));
  }
}

完整错误:

org.gradle.api.tasks.TaskExecutionException:任务':app:transformClassesWithDexBuilderForDebugAndroidTest'的执行失败。org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103) org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73) .api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) 在 org.gradle.api.internal .tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter。

4

2 回答 2

0

据此:使用Java 8语言特性你只能有一个

Java 8 语言功能的子集,因平台版本而异。

您可以尝试提高 minSdkVersion 并查看它是否有帮助(24 或更高)。

Android Studio 不支持所有 Java 8 语言功能,但会在 IDE 的未来版本中添加更多功能。根据您使用的 minSdkVersion,某些功能和 API 可用。

于 2019-01-05T16:52:25.287 回答
0

不确定这是否适用于您的情况,但在我的项目中添加 retrolambda 解决了问题。(Lambda 是我追求的一种语言功能。)

唯一的副作用是构建脚本会在每次编译期间吐出删除 retrolambda 的建议,我真的希望这是一个临时解决方案,直到谷歌解决这个问题。

于 2019-01-05T21:07:06.037 回答