I've seen various suggestions how code can find out whether it runs on the emulator, but none are quite satisfactory, or "future-proof".
Though I have not programmed conditionally like this before, AFAIK, there isn't any "advertised" field that makes this distinction. So, I guess it is safe to assume and say that none of the options found elsewhere are future proof. In absence of such a field, one has to resort to idiosyncrasies of the emulator which makes it different from the actual device. Device Id is one such thing.
But on a deployed app that requires the READ_PHONE_STATE permission, which otherwise wouldn't be necessary, and which may make people suspicious what the app is up to. What other techniques are people using? Is there a better solution?
If "better" solution, in your case, is finding a property that does not require a permission, see
this thread.