You cannot completely restrict Android apk from decompilation. Because it uses dex formats any one can easily convert these dex files into jar file using publicly available tools like apktool,dex2jar. But you can Obfuscate code to reduce code readability, you can also use native codes to prevent easy decompilation of code. You can store some part your code in server and download them at runtime call function in library using Reflection concept, which will help you to prevent your code from decompilation.
The Best Obfuscaters methods are,
->Use Proguard for code deobfuscation.
->Write native code for your secured part. It can't be reverse engineered
->Process your secured part in server side & use the result.