引用:http://www.cnblogs.com/sandyzhou/archive/2011/12/31/2308403.html
自从接触了android开发之后,感觉代码都容易给一些工具反编译,比如我自己常用的dex2jar+jdgui,还有其它一些等等,所以下面就介绍下自己在实际应用的解决方案吧。
1.针对要一些 要加密的代码,本人抽离出接口出来,比如,一个类A会实现类的接口IA,然而在程序中就会看到接口定义,而不会看到具体的实现类的代码,因为具体实现类的代码是通过动态加载的。
2.加密具体实现类,这一步主要是加密实现类,过程是这样的,先导出实现类的jar包,然后通过dx工具转换格式,然后通过加密算法加密转换后的jar。
3.通过jni解密和加载类,这一步主要是在C/C++解密程序中的需要加载的jar,然后通过 通过dexclassloader去加载,当然这一步都是在jni层实现的。
4.这样整个jar包都是加载进去android dalvikvm 去了,所以都可以用反射去调用相应的类,当然性能上可读有影响,不过只是少量代码而已,整个代码还是需要用混淆的。