Given that users have physical access to a device running your app, crack prevention may well be impossible for any app that doesn't require valuable external resources outside of the users control.
To help reduce the likelihood of automated cracks, don't use any published methods exactly as is; but change them all slightly to prevent their signature from being detected. Spread many different methods that don't share any common code throughout the app, and have some of them cause delayed (days, weeks) and difficult to recognize changes in how the app behaves.
Note that any effort in time (beyond some small minimum) to add and debug such code may not bring in any compensating revenue and may potentially make your app less stable for all users (including those who write reviews).