之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点。而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等。
其实笔者对类加密比较感兴趣,就稍稍调研了一下。类加密的其实是为了防止APP被反编译,防止反编译的方法有很多种,比如混淆,加固等。自己对类文件进行加密,并自定义类加载器也是一种办法:
首先我们的代码打包编译之后会变成难以读懂的二进制字节码,并且变成.class文件。但是简单的APP编译出来之后可以被反编译,甚至你写的代码完完全全被暴露。你的代码被抄袭,被复制都是小事,重要的其实是你们APP的商业信息有可能被泄露!
下面是一个简单的例子被反编译的场景:
所以为了不让用户轻易的反编译出源代码文件,就要对.class文件进行加密,再通过特殊的加载类的方式解密,并将这个类加载到内存中。
首先说加密,加密无非就是把.class字节码文件进行一些变换,这里面就涉及密码学的知识了!加密的方式有很多种,要想提高保密性,可以考虑DES,AES,RSA。一旦加密算法的源码被公开,其实破解也就是很简单的事情了,所以建议大家还是用高安全性的密码系统,到时候及时的更换密钥。就能一定程度上增加破解难度。
有了加密算法,接下来就是加密一个字节码文件了:
private static File file = null;
p