Android Studio:测试:使用 java 8 或更高版本编译的库依赖项

2023-12-09

请帮忙。我在为 android studio 设置测试时经历了一段非常糟糕的时光。

我已经从 cucumber github 下载了计算器示例来练习 cumcumber 代码测试。https://github.com/cucumber/cucumber-jvm/tree/master/android(顺便说一句,其中一些品牌的名字非常奇怪)

我尝试将它与 Android studio 一起使用。该程序运行完美(耶!)。然而测试却没有。我有一个非常可怕的信息,每次我运行它时都会困扰我。

*To run dex in process, the Gradle daemon needs a larger heap.
It currently has approximately 910 MB.
For faster builds, increase the maximum heap size for the Gradle daemon to more than 2048 MB.
To do this set org.gradle.jvmargs=-Xmx2048M in the project gradle.properties.
For more information see https://docs.gradle.org/current/userguide/build_environment.html
Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.
Error:1 error; aborting
:app:transformClassesWithDexForDebugAndroidTest FAILED
Error:Execution failed for task ':app:transformClassesWithDexForDebugAndroidTest'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_74\bin\java.exe'' finished with non-zero exit value 1*

我在目标兼容性和源兼容性方面遇到了麻烦(尚未完成其余部分)

这是 gradle 构建:如您所见,我已将兼容性更改为 1.7

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "boo.thefoodhunt"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        debug {
            assets.srcDirs = ['src/debug/assets', 'src/androidTest/assets/']
            res.srcDirs = ['src/debug/res', 'src/androidTest/assets/features']
        }
        main { res.srcDirs = ['src/main/res', 'src/androidTest/assets'] }
    }
    dexOptions {
        incremental true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'

    //TESTING
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support:support-annotations:23.3.0'

    //Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'

    //Cucumber
    androidTestCompile 'info.cukes:cucumber-android:1.2.4'
    androidTestCompile 'info.cukes:cucumber-picocontainer:1.2.4'
}

无法运行的测试:

 package boo.thefoodhunt;

import android.test.ActivityInstrumentationTestCase2;

import cucumber.api.CucumberOptions;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

@CucumberOptions(features = "features")
public class CalculatorActivitySteps extends ActivityInstrumentationTestCase2<CalculatorActivity> {

    public CalculatorActivitySteps(SomeDependency dependency) {
        super(CalculatorActivity.class);
        assertNotNull(dependency);
    }

    @Given("^I have a CalculatorActivity$")
    public void I_have_a_CalculatorActivity() {
        assertNotNull(getActivity());
    }

    @When("^I press (\\d)$")
    public void I_press_d(final int d) {
        switch (d) {
            case 0:
                onView(withId(R.id.btn_d_0)).perform(click());
                break;
            case 1:
                onView(withId(R.id.btn_d_1)).perform(click());
                break;
            case 2:
                onView(withId(R.id.btn_d_2)).perform(click());
                break;
            case 3:
                onView(withId(R.id.btn_d_3)).perform(click());
                break;
            case 4:
                onView(withId(R.id.btn_d_4)).perform(click());
                break;
            case 5:
                onView(withId(R.id.btn_d_5)).perform(click());
                break;
            case 6:
                onView(withId(R.id.btn_d_6)).perform(click());
                break;
            case 7:
                onView(withId(R.id.btn_d_7)).perform(click());
                break;
            case 8:
                onView(withId(R.id.btn_d_8)).perform(click());
                break;
            case 9:
                onView(withId(R.id.btn_d_9)).perform(click());
                break;
        }
    }

    @When("^I press ([+–x\\/=])$")
    public void I_press_op(final char op) {
        switch (op) {
            case '+':
                onView(withId(R.id.btn_op_add)).perform(click());
                break;
            case '–':
                onView(withId(R.id.btn_op_subtract)).perform(click());
                break;
            case 'x':
                onView(withId(R.id.btn_op_multiply)).perform(click());
                break;
            case '/':
                onView(withId(R.id.btn_op_divide)).perform(click());
                break;
            case '=':
                onView(withId(R.id.btn_op_equals)).perform(click());
                break;
        }
    }

    @Then("^I should see (\\S+) on the display$")
    public void I_should_see_s_on_the_display(final String s) {
        onView(withId(R.id.txt_calc_display)).check(matches(withText(s)));
    }
}

现在我已经尝试过这个:

在我的项目中使用 jar 时出错

和这个:是否可以使用Java 8进行Android开发?

和这个:Gradle源码兼容性对子项目没有影响

在项目 gradle 和应用程序 gradle 中。但我认为它只是进行测试......这些不会有帮助,它与依赖关系有关,为此我陷入了困境。任何人都可以帮忙吗!提前致谢


您有一个依赖项(不清楚是哪个),它是为 Java 8 编译的,并且您已在构建中指定了 Java 7。

错误信息This is caused by library dependencies that have been compiled using Java 8 or above.他们是这里的关键吗?

我的方法是将 Java 版本更改为 8。如果这不起作用,请减少问题。也就是说,从一个没有依赖项和代码的新项目开始,并添加非常小的部分,直到找到导致上述错误的原因。

也就是说,应用加仑定律:

“一个有效的复杂系统总是从一个有效的简单系统发展而来。一个从头开始设计的复杂系统永远不会有效,也无法通过修补来使其有效。你必须从一个有效的简单系统重新开始。——约翰高尔(1975,第 71 页)”

https://en.wikipedia.org/wiki/John_Gall_%28author%29

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio:测试:使用 java 8 或更高版本编译的库依赖项 的相关文章

随机推荐

  • 如何从 PostgreSQL 的子表中选择数据?

    在 PostgreSQL 9 4 中 如何检索 json 对象 如下所示 parentTableFirstProp string parentToChildReference childTableFirstProp another stri
  • 将自定义 Chef 推送作业添加到 Windows 白名单

    我正在尝试将推送作业添加到推送客户端的 Windows 白名单中 当我用刀进行搜索时 它会在 Windows 节点的白名单中显示自定义作业 当我尝试运行它时 作业立即失败 并且在 Windows 端它说该命令不在白名单中 我在GitHub上
  • 在 Java 中从文件中完全读取对象流的最佳方法是什么?

    我正在创建一个可能很长的对象日志 并且不想在写入文件之前将它们全部保留在内存中 因此我无法将对象的序列化集合写入文件 我试图找出在日志记录完成后读取整个对象流的 最佳 方式 我注意到以下方法不起作用 FileInputStream fis
  • 为什么我需要重写 Java 中的 equals 和 hashCode 方法?

    最近我读到了这篇文章开发者作品文档 该文档主要是关于定义hashCode and equals 有效且正确 但是我无法弄清楚为什么我们需要重写这两种方法 我如何决定有效地实施这些方法 Joshua Bloch 在 Effective Jav
  • 矩阵乘法在 MATLAB 和 NUMPY(?) 中产生不同的值[重复]

    这个问题在这里已经有答案了 这是矩阵 gt gt x 2 7 5 9 2 8 3 1 6 10 4 7 3 10 1 6 7 10 1 8 2 8 2 5 9 Matlab给我 gt gt mtimes x x ans 124 124 94
  • 使用 Maven/Cucumber/Serenity 重新运行失败的场景

    有没有人使用 Maven Surefire 插件或任何其他机制来重新运行失败的场景 我将 Cucumber 与 Serenity 和 Maven 一起使用 我尝试了以下不同的方法 以便在没有任何手动干预的情况下重新运行失败的场景例如 如果
  • 如何使用 Java 解压目录中所有受密码保护的 zip 文件

    我是java新手 试图编写一个程序来解压缩目录中的所有受密码保护的zip文件 我能够解压缩所有普通的zip文件 没有密码 但我不确定如何解压缩受密码保护的文件 注意 所有 zip 文件具有相同的密码 import java io Outpu
  • C 函数中的冒号代表什么?

    冒号的这种用法叫什么 以下代码摘自书中学习核心音频 int main int argc const char argv cleanup AudioQueueDispose queue true AudioFileClose player p
  • 临时局部变量的命名约定

    在本地函数中命名临时变量的标准方法是什么 让我向您说明我正在做的事情 我得到一个指向结构的指针 因此我想在本地存储其成员之一以避免取消引用 然后将任何修改分配回指针 更具体地说 struct Foo double m d void func
  • 使用python从MAC获取IP地址

    我的本地网络中有一个设备并且知道它的 MAC 地址 它通过 DHCP 自动获取 IP 地址 我想获得这个IP 我不想使用 nmap 但 scapy 就可以了 因为我是从 kivy 应用程序导入的 I found from scapy all
  • Codeigniter 3 中禁止 POST url 403

    您好 专家们 您能给我一个建议吗 为什么我在当前在本地主机上运行的代码点火器上收到此 403 禁止消息 403 禁止 过程是这样的 我使用 ajax 来轻松 顺利地访问和检索从模型 控制器到视图的数据 下图是我在视图到控制器中的代码 div
  • Python:如何在其他函数中使用一个函数中的命名变量

    我是一名新手程序员 试图使用 Python 3 3 2 编写一个程序 该程序具有main 调用的函数function1 然后循环function2 and function3 我的代码通常如下所示 def function1 print h
  • 阻止禁用用户 firebase 规则

    我不确定这是否有效 但我想知道如果用户已被禁用 是否可以在规则中阻止存储 firestore 读 写 这可能吗 上下文 auth 禁用 或者我是否只需要等待令牌过期 用户就被拒绝访问 禁用用户意味着他们无法再登录 也无法刷新其 ID 令牌
  • python 字符串搜索替换

    SSViewer set theme bullsorbit 这是我的绳子 我想在字符串中搜索 SSViewer set theme bullsorbit 并替换 bullsorbit 用另一根绳子 bullsorbit 字符串是动态变化的
  • IE8 内部 HTML 错误

    这个innerHTML代码在IE8中不能可靠地工作 但正在 IE6 IE7 FF Opera Chrome Safari 中工作 通过不可靠地工作 我的意思是我已将此代码放置在各种元素上的 onmouseover 处理程序中 有时当鼠标悬停
  • 表单嵌套在表中时的 jQuery 表单提交

    是否有原因导致表单无法在表内使用 jQuery 提交 或者我只是做错了什么 我已经在表格外测试了表单提交 然后当我将其包装在表格内时 它就停止工作 即使我添加了额外的parent 来弥补上方移动的形式 td 代码中的元素 有人可以帮我解决这
  • AJAX 响应在 C++ 中无效,但在 Apache 中无效

    我想制作一个用 C 编写的服务器来支持我的游戏 我学习了套接字的基础知识 并编写了一个运行良好的基本聊天程序 现在我想创建一个像 Apache 一样的 HTTP 服务器 但仅限于 AJAX 请求响应部分 我想一开始我复制了一个 Apache
  • Rails 3 + PDFKit 问题:权限被拒绝 (Errno::EACCES)

    我想用PDFKit在我的 Rails 3 应用程序中在 Windows 上 我安装了wkhtmltopdf和pdfkit gem 这是我用来创建 PDF 的代码 class JobsController lt ApplicationCont
  • 如何创建 POI Word 格式的电子邮件链接

    如何在电子邮件中创建外部链接或电子邮件链接XWPF文档 有一个描述Excel HSSF XSSF 但我还没有找到与 Word HWPF XWPF 类似的内容 public void example throws Exception XWPF
  • Android Studio:测试:使用 java 8 或更高版本编译的库依赖项

    请帮忙 我在为 android studio 设置测试时经历了一段非常糟糕的时光 我已经从 cucumber github 下载了计算器示例来练习 cumcumber 代码测试 https github com cucumber cucum