Launching and stopping appium server programmtically

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