Run androidTest with appium java-client on Android Emulator Test failed. Show 'java.lang.NoClassDefFoundError','java.lang.ClassNotFoundException','java.io.IOException'
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 1.3k
- Forks
- 752
- Avg merge
- 6d 21h
- Merged PRs (30d)
- 8
Description
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();
}
}
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the dependency declarations and exclusions in app build.gradle, then inspect SampleTest and reproduce the Android instrumentation failure on the stated emulator setup. Determine whether the reported duplicate-class and missing AndroidDriver errors can be reproduced with the listed versions; done means documenting a confirmed cause and a validated dependency configuration or maintainer-directed fix.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java
- Domain
- mobile, testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100