I'd say that HTTPS (with a REAL certificate) should satisfy 99% of all use cases.
If we are talking about protecting the server from an attacker, you can actually never know if a client is the app you created, or if a persistent and attacker has disassembled the app, extracted the protocol and any secrets (server key, encryption keys), and has created their own application that is indistinguishable from the real thing. Adding more encryption and obfuscation may delay the attacker slightly, but will also make your protocol much harder to implement on both server and client, require more code where bugs may be found, and will be harder to debug.
That said, you may want to investigate 2-legged OAuth for authenticating the app with the server.
Cheers,
\David