Are you early development phase? Than self-test might works. For OS, especially Android, you have to choose what model do you want to support (and device models (if your app depends on any hardware and if want to provide service with quality. e.g. I use camera, I thought all has back and front but some only has back camera. same for btle))
After I release to beta customers, I found UX is not fully tuned and has to adjust last few weeks. I would check every input/button and interaction designed reasonable.
At minimum I will have different screen size devices. if budget allow, popular versions.
And for the 3rd party testing service, I used services and also help other to run the service. I found if you well prepared, you will get better result. e.g. test binaries for testers, test cases, response team for any question/issues. but most of company, they pass apps and expect bug coming in, that does not work well for functional phase testing.