I’ve set this up by having two appium server instances running, each one pointing at the specific device
node scripts/node_modules/appium/build/lib/main.js --nodeconfig android_phone/ce0117115d52a73f04/selenium-conf.json --session-override --default-capabilities {"udid":"ce0117115d52a73f04","deviceName":"ce0117115d52a73f04","systemPort":7843,"wdaLocalPort":7843} --chromedriver-executable android_phone/ce0117115d52a73f04/chromedriver --log-no-colors --port 4843 --callback-port 4844 --log-timestamp --debug-log-spacing
The selenium-conf.json looks something like this. You’ll see some fields in there (like phoneBrand and phoneModel and others) that I wrote a custom matcher for to force specific brands and models.
{
"capabilities":
[
{
"version": "8.0",
"maxInstances": 1,
"platform": "Android",
"platformType": "Phone",
"phoneBrand": "samsung",
"phoneModel": "SMG935F",
"chromeVersion": "69.0.3497.100",
"pc": "10.96.80.50",
"hostname": "bedouglas-mac",
"port": "4843",
"deviceName": "ce0117115d52a73f04",
"maxInstances": 1,
"udid": "ce0117115d52a73f04",
"start": "2018-10-25T09:57:57-0400",
"appiumVersion": "1.9.1"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":300000,
"proxy": "TARemoteProxy",
"url":"http://10.96.80.50:4843/wd/hub",
"host": "10.96.80.50",
"port": 4843,
"maxSessions": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "10.96.80.50"
}
}