Android Studio:测试:已使用 java 8 或更高版本编译的库依赖项 [英] Android Studio: Testing: Library dependencies that have been compiled using java 8 or above

查看:45
本文介绍了Android Studio:测试:已使用 java 8 或更高版本编译的库依赖项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮忙.我在为 android studio 设置测试时遇到了非常糟糕的时间.

please help. I am having a really horrible time with setting up my testing for android studio.

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

I have downloaded the calculator example to practice cumcumber code testing from the cucumber github. https://github.com/cucumber/cucumber-jvm/tree/master/android (some of these brands btw are very strangley named)

我尝试在 Android Studio 中使用它.该程序运行完美(耶!).然而测试没有.我有一个非常可怕的消息,每次运行时都会困扰我.

I tried to use it with Android studio. The program runs perfect (yay!). The test however does not. I have a really horrible message that just haunts me every time i run it.

*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*

它的目标兼容性和源兼容性我遇到了麻烦(还没有到其余部分)

Its the target compatibility and source compatibility i am having trouble with (have not got to the rest yet)

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

Here's the gradle build: as you can see i have changed the compatibility to 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 sourceCompatibility 对子项目没有影响

在项目 gradle 和应用程序 gradle 中.但我在想,因为它只是测试......这些不会有帮助,它与依赖关系有关,为此我很困惑.任何人都可以帮忙!提前致谢

in both the project gradle and the app gradle. But i'm am thinking as its only coming with testing...these will not help and its something to do with the dependencies and for that i am pretty stuck. Can anyone help! thanks in advance

推荐答案

对于任何遇到相同问题的人来说都可以.我怀疑它!(我认为!)它导致了程序的其他问题,但至少我运行了测试并与设备通信并在没有稻谷的情况下阅读测试.然而,测试提出了一个全新的问题(另一个问题,改天)如果有人感兴趣,新问题:

Ok for any one that is having the same problem. I sussed it! (I think!) its lead on to other problems with the program but at least i have the test running and its communicating with the device and reading through the tests without having paddy. The tests however are coming up with a brand new problem (for another question, another day) New problem if anyone is interested:

Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.

我猜这与并非所有不在视图中的按钮有关(不是我的设计!仅供参考)所以我们明天调整.

im guessing that its something to do with not all the buttons not in view (not my design! FYI) so we adjust this tomorrow.

现在进入解决方案(ish)

Now on to the solution(ish)

https://github.com/cucumber/cucumber-jvm/issues/893:programmerdave 在 2015 年 11 月 18 日的评论帮助了 gradle 设置.

https://github.com/cucumber/cucumber-jvm/issues/893: comment from programmerdave on 18 Nov 2015 helped with the gradle setup.

这带来了一个全新的错误!

This brought a whole new bug!

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/maven/com.squareup.okhttp/okhttp/pom.properties
    File1: C:\Users\kyleparker\.gradle\caches\modules-2\files-2.1\com.crashlytics.android\crashlytics\1.1.13\e821eafa1bf489a26bdb71f95078c26785b37a1\crashlytics-1.1.13.jar
    File2: C:\Users\kyleparker\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp\okhttp\2.4.0\40340c0748190fe897baf7bffbc1b282734294e5\okhttp-2.4.0.jar

但是很快就解决了这个问题.感谢这些家伙https://code.google.com/p/android/issues/detail?id=194980

But managed to fix this quite quickly. thanks to these guys https://code.google.com/p/android/issues/detail?id=194980

无论如何显然是两个不同的问题造成了严重破坏(一天半).

Anyway apparently two different issues that created havoc (a day and half).

这是 Calkulator 演示的 gradle(有问题的链接) - 感觉有点乱,如果有人有更好的清洁解决方案,请告诉我

Heres the gradle for the Calkulator demo (link in question) - it all feels a bit messy and if anyone has a nice cleaner solution please let me know

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "cucumber.cukeulator"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"

        testApplicationId "cucumber.cukeulator.test"
        testInstrumentationRunner "cucumber.cukeulator.test.Instrumentation"
    }

    packagingOptions {

        //these are the ones that fixed it for me
        exclude 'META-INF/maven/com.google.guava/guava/pom.properties'
        exclude 'META-INF/maven/com.google.guava/guava/pom.xml'

        //but im not going to  remove my first attempt just in case ;)
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    sourceSets {
        androidTest {
            assets.srcDirs = ['src/androidTest/assets']
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'

    androidTestCompile('info.cukes:cucumber-android:1.2.4') {
        exclude module: 'cucumber-jvm-deps'
    }

    androidTestCompile('info.cukes:cucumber-picocontainer:1.2.4') {
        exclude module: 'cucumber-jvm-deps'
    }

    // androidTestCompile 'com.android.support:support-annotations:23.1.1'
    // androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

    androidTestCompile 'info.cukes:cucumber-jvm-deps:1.0.3'

}

总而言之,它似乎是 jvm-deps ......谁知道

So all in all it seems to be that jvm-deps......well who knew

这篇关于Android Studio:测试:已使用 java 8 或更高版本编译的库依赖项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆