We use BrowserStack App Live / Automate as it provides wide range of mobile devices for our needs with different OS versions without the need to buy all of them for ourselves and manage them.
We chose Appium to test mobile applications over native Espresso/XCUITest cause it simply extended our PyTest+Selenium test framework and allowed us to use same PageObjects for our tests and write cross-platform tests with no additional effort.