you need to create appium driver like this:
AppiumDriverLocalService appiumDriver = null;
appiumDriver = AppiumDriverLocalService.buildService(new AppiumServiceBuilder()
.withIPAddress(“127.0.0.1”)
.usingPort(port)
.withArgument(AndroidServerFlag.BOOTSTRAP_PORT_NUMBER, String.valueOf(bpPort))
.withLogFile(log));
Field streamsField = null;
Field streamField = null;
try {
streamField = AppiumDriverLocalService.class.getDeclaredField("stream");
streamField.setAccessible(true);
streamsField = Class.forName("io.appium.java_client.service.local.ListOutputStream").getDeclaredField("streams");
streamsField.setAccessible(true);
} catch (ClassNotFoundException | NoSuchFieldException e) {
e.printStackTrace();
}
try {
((ArrayList<OutputStream>) streamsField.get(streamField.get(appiumDriver))).clear(); // remove System.out logging
} catch (IllegalAccessException e) {
e.printStackTrace();
}
appiumDriver.start();
and then you can create android driver using same port like this:
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, deviceManager.getDeviceName());
capabilities.setCapability(MobileCapabilityType.UDID, deviceManager.getDeviceUdid());
capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 60 * 30);
capabilities.setCapability(MobileCapabilityType.NO_RESET, true);
capabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, currentPackageName);
capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, currentActivityName);
if (apk!= null){
capabilities.setCapability(MobileCapabilityType.APP, apk.getAbsolutePath());
}
URL serverAddress = new URL("http://127.0.0.1:" + port + "/wd/hub");
androidDriver = new AndroidDriver(serverAddress , capabilities);
In this way, you can create appium + android drivers for each device. I you are running on multiple devices, you can create one for each of them and your tests will run on all devices