The Android memory profilers that comes with the Android Developer Tools will allow you to figure out what is consuming your memory.
It comes in three parts;
- Memory Monitor (this is used to find performance problems, so we can ignore this one for this particular problem).
- Tool Heap Viewer
- Allocation Tracker
Using the Heap Viewer you can take snap-shots of the heap when your game is running and by comparing the graphs you can figure out what is consuming a lot of memory and how that changes over time.
When you've figured out what is consuming too much memory you can use the Allocation Tracker to figure out where in the code that memory is being allocated. The Allocation Tracker is more difficult to work with but there's good insight to be found using it if you manage to climb the steep learning curve.
The tools are available in IDE if you're using Android Studio or Eclipse.
More details on the tools can be found here.
If you find that all the memory allocated is correct in the sense that you don't allocate twice and forget to release then the next thing to look at would be when you actually need all the data. For example, is your game structured so that you can load a certain subset of the resources per level, and unload the unused ones from the previous level.