There's not way to stop reverse engineering, so I think it's important to state that so we don't fool ourselves.
All you can do is delay and make it harder.
Step 1 Is code obfuscation.
Step 2 Move important code to native. It's harder to reverse engineer an SO library, but if someone wants to they will.
Step 3 Move important logic to the backend.
2 & 3 will impact the product experience and costs more in terms of impl time.
There might be off the shelf solutions, but all they do is most likely something of the above.