java-client icon indicating copy to clipboard operation
java-client copied to clipboard

Run androidTest with appium java-client on Android Emulator Test failed. Show 'java.lang.NoClassDefFoundError','java.lang.ClassNotFoundException','java.io.IOException'

Open Kwaiyu opened this issue 5 years ago • 2 comments

Description

Because of add java-client dependency run test show duplicate class errors. I try to exclude duplicate parts in two ways as app build.gradle: just only [exclude group: 'commons-logging', module: 'commons-logging'] is effective, because run test still show Duplicate class org.openqa.selenium.xxx issue, but no Duplicate class commons-logging

And I also try to: deleted duplicate class files in java-client.jar show below errors, And I change to deleted duplicate class files in selenium-api.jar also show below errors:

I don’t know how to fix errors, nor don't know why excluding selenium-api doesn't take effect!!! Please help me, thanks!

java.lang.NoClassDefFoundError: Failed resolution of: Lio/appium/java_client/android/AndroidDriver;
at java.lang.Class.getDeclaredFields(Native Method)
at org.junit.runners.model.TestClass.getSortedDeclaredFields(TestClass.java:77)
at org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:70)
at org.junit.runners.model.TestClass.<init>(TestClass.java:57)
at org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:83)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:43)
at androidx.test.internal.runner.junit4.AndroidJUnit4Builder.runnerForClass(AndroidJUnit4Builder.java:65)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:793)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:547)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:390)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)
Caused by: java.lang.ClassNotFoundException: Didn't find class "io.appium.java_client.android.AndroidDriver" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/data/app/com.example.myapplication.test-TiL5ggk3aeR4zQ6j-pHIHw==/base.apk", zip file "/data/app/com.example.myapplication-d9Yw99bp7hMlExaYGBn-tg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication.test-TiL5ggk3aeR4zQ6j-pHIHw==/lib/x86, /data/app/com.example.myapplication-d9Yw99bp7hMlExaYGBn-tg==/lib/x86, /system/lib, /system/product/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 19 more
Suppressed: java.io.IOException: Failed to open dex files from /data/app/com.example.myapplication-d9Yw99bp7hMlExaYGBn-tg==/base.apk because: Bad encoded_array value: Failure to verify dex file '/data/app/com.example.myapplication-d9Yw99bp7hMlExaYGBn-tg==/base.apk': Bad encoded_value method type size 7
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:365)
at dalvik.system.DexFile.<init>(DexFile.java:107)
at dalvik.system.DexFile.<init>(DexFile.java:80)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:444)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:403)
at dalvik.system.DexPathList.<init>(DexPathList.java:164)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:126)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:101)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:74)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:87)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:116)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:114)
at android.app.ApplicationLoaders.getClassLoaderWithSharedLibraries(ApplicationLoaders.java:60)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:851)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:950)
at android.app.LoadedApk.getResources(LoadedApk.java:1188)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2462)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2454)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6343)
at android.app.ActivityThread.access$1300(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Environment

  • java version:java version "1.8.0_251"
  • appium java-client: 7.3.0
  • IDE: intellij IDEA, gradle plugin version:3.6.3, gradle version:gradle-6.5
  • Node.js version v10.16.0
  • Mobile platform: Android Emulator
  • Real device or emulator/simulator: Pixel API 29 Androidx

Details

app build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    packagingOptions {
        exclude ''
        exclude 'META-INF/spring.schemas'
        exclude 'META-INF/spring.handlers'
        exclude 'META-INF/versions/9'
        exclude 'META-INF/spring.tooling'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module")
    }

    configurations {
//        all*.exclude module: 'selenium-api:3.141.59'
        all{
            exclude module: 'selenium-api:3.141.59'
        }
    }

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 29
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

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

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    implementation (group: 'io.appium', name: 'java-client', version: '7.3.0'){
        exclude group: 'org.seleniumhq.selenium', module: 'selenium-api:3.141.59'
        exclude group: 'commons-logging', module: 'commons-logging'
    }
//    implementation files('libs/java-client-7.3.0.jar')
    implementation group: 'androidx.multidex', name: 'multidex', version: '2.0.1'
}

Code To Reproduce Issue [ Good To Have ]

package com.example.myapplication;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.remote.DesiredCapabilities;

public class SampleTest {
    private AndroidDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("deviceName", "Android Emulator");
        desiredCapabilities.setCapability("platformVersion", "10");
        desiredCapabilities.setCapability("appPackage", "io.appium.android.apis");
        desiredCapabilities.setCapability("appActivity", ".ApiDemos");

        URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");

        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
    }

    @Test
    public void sampleTest() {
        MobileElement el1 = (MobileElement) driver.findElementByAccessibilityId("Views");
        el1.click();
        MobileElement el2 = (MobileElement) driver.findElementByAccessibilityId("Controls");
        el2.click();
    }

    @After
    public void tearDown() {
        driver.quit();
    }
}

Kwaiyu avatar Jun 24 '20 09:06 Kwaiyu

I'm trying to get started with Appium in Android Studio and am also facing the same issues. Multiple hours of searching have yielded no results :(

tnkrtdm avatar Sep 04 '20 00:09 tnkrtdm

@jarib @hugs @shs96c ask for help plz.

Kwaiyu avatar Feb 03 '21 02:02 Kwaiyu