The best way to do this if you are doing it for product is using SSDP protocol.
It's Simple service discovery protocol which allows you to search for device in a network. It's implemented in many smart devices now a days with dlna or upnp.
Implement a SSDP server on esp8266 and
Implement a SSDP client on Android device.
You can find many devices with this approach, using simple filter to result with your specific information you want from SSDP packet can allow you to only get desired devices from network.
All the documentation about SSDP is given on Arduino esp8266 GitHub page.
You can broadcast your IP in your SSDP packet and then use it in your app, But still your most imp problem of dynamic IP remains unsolved as your IP will always be changing and using IP for accessing a hardware like home automation is not proper way.
You can either use.
1) Static IP for this if you want offline access or
2) Use cloud based solutions, such as mqtt to access device anywhere without the worries of NAT, IP or anything.
But second option is more of commercial kind, you need multiple resources to implement it.