🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本章介绍的主题在日常开发中使用频率略低,但是对它们有一定的了解仍然是很有必要的,下面分别介绍它们的使用场景。 我们知道,不管程序怎么写都很难避免不crash,当程序crash后虽然无法让其再继续运行,但是如果能够知道程序crash的原因,那么就可以修复错误。但是很多时候产品发布后,如果用户在使用时发生了crash,这个crash信息是很难获取到的,这非常不利于一个产品的持续发展。其实可以通过CrashHandler来监视应用的crash信息,给程序设置一个CrashHandler,这样当程序crash时就会调用CrashHandler的uncaughtException方法。在这个方法中我们可以获取crash信息并上传到服务器,通过这种方式服务端就能监控程序的运行状况了,在后续的版本开发中,开发人员就可以对一些错误进行修复了。 在Android中,有一个限制,那就是整个应用的方法数不能超过65536,否则就会出现编译错误,并且程序也无法成功地安装到手机上。当项目日益庞大后这个问题就比较容易遇到,Google提供了multidex方案专门用于解决这个问题,通过将一个dex文件拆分为多个dex文件来避免单个dex文件方法数越界的问题。 方法数越界的另一种解决方案是动态加载。动态加载可以直接加载一个dex形式的文件,将部分代码打包到一个单独的dex文件中(也可以是dex格式的jar或者apk),并在程序运行时根据需要去动态加载dex中的类,这种方式既可以解决缓解方法数越界的问题,也可以为程序提供按需加载的特性,同时这还为应用按模块更新提供了可能性。 反编译在应用开发中用得不是很多,但是很多时候我们需要研究其他产品的实现思路,这个时候就需要反编译了。在Android中反编译主要通过dex2jar以及apktool来完成。dex2jar可以将一个apk转成一个jar包,这个jar包再通过反编译工具jd-gui来打开就可以查看到反编译后的Java代码了。Apktool主要用于应用的解包和二次打包,实际上通过Apktool的二次打包可以做很多事情,甚至是一些违法的事情。目前不少公司都有专门的反编译团队,也称逆向团队,他们做的事情会更加深入,但是对于应用开发者来说并不需要了解那么多深入的逆向知识,因此本章仅仅介绍一些简单常用的反编译方法。