图1-3 防止类A被打CLASS_ISPREVERIFIED标记 图 1.3.6 自动打包补丁 为了快速,方便的生成补丁,记录上次文件的MD5密码,并与补丁代码对比,使用Groovy编译成Cl
图1-3 防止类A被打CLASS_ISPREVERIFIED标记 图
1.3.6 自动打包补丁
为了快速,方便的生成补丁,记录上次文件的MD5密码,并与补丁代码对比,使用Groovy编译成Class文件。
1.3.7 JVM的动态加载类
Class Loaders是动态加载字节码和资源的一种方式。他拥有四大特性。
(1)Lazy loading:Class文件并不会在一开始就全部加载,而是在需要的时候 才进行加载,这样节省了内存空间;
(2)Type-safe linkage:动态类加载不会破坏JVM的类型安全;
(3)User-definable class loading policy:整个类的加载是可以由开发者自定 义的,这个特性给予了开发者更多的操作空间,可以使用不同的方式加载;
(4)Multiple namespaces:Java虚拟机允许加载不同的类,虽然他们名称相同;
1.4 开发工具介绍
(1)反编译:dex2jar;
(2)操作系统:Microsoft Windows 10;
(3)编码:AndroidStudio、Eclipse;
其中dex2jar用于字节码注入后的拆解安装包,以达到确认字节码成功注入的目的。AndroidStudio用于编写终端程序和主要框架,Eclipse则用于编写服务器程序。
1.4.1 Eclipse介绍
Eclipse是由IBM公司开发的下一代IDE开发环境。它由Java语言编写,这个平台代码是完全开源的。但这个平台并不具有某种开发环境,只是作为一个框架存在,如果需要某种开发环境需要开源人员自己通过插件组件构建。但是它自带了一个插件集,在这个插件集中就包括了JDK。
1.4.2 AndroidStudio介绍
Android Studio是Google推出的新的Android开发环境,基于IntelliJ IDEA开发完成. Android Studio集成了一整套的 Android 开发工具,方便使用者开发和调试。
第二章 系统概要设计
2.1 系统概要设计
2.1.1 系统需求
基于实际需求,将整个框架的需求大体分为五块:
(1)开发人员修复项目缺陷后,为了减少查找已经修改的文件的工作量,所以需 要对已经修改过后的java文件进行自动对比然后自动打包到某一文件夹下;
(2)在打包过程中为了防止类被打上CLASS_ISPREVERIFIED标志,所以应用工程 中所有的类需要引用一个单独的dex包;
(3)在打完补丁包之后,需要把服务器打好的补丁包推送至目标手机。在这个过 程中包含了网络连接模块和鉴权模块,网络连接模块主要用于推送文件使用,而 鉴权模块只要是为了安全考虑,防止推送包被恶意捞取。这些内容构成了补丁包 推送流程;
(4)在终端接收到补丁包之后,首先终端需要应用识别出补丁包,然后需要保证 补丁包的安全防止恶意捞取补丁包;
(5)保证补丁包安全后就需要以非安装的形式开始动态加载补丁包,这个过程需 要保证用户体验。
2.1.2 系统设计
根据热补丁的实际需求,将系统主要划分为字节码注入、dex插入、推送、补丁包管理及java文件对比自动打包五大基本模块,其中字节码注入模块和java文件对比自动打包模块共用了一套解压与压缩代码。
各个模块的主要作用如下:
(1)java文件对比自动打包模块主要方便开发人员打包;
(2)字节码注入模块会在编译过程中被调用,向工程文件中插入对其他dex的引 用,以解决各个模块的 CLASS_ISPREVERIFIED问题,详见1.3.5;
(3)补丁包推送模块负责把编译好的dex文件推送到Android终端;
(4)补丁包管理模块会在拿到推送的dex后保证dex的安全和dex的统一管理;
(5)dex插入模块会在一切就绪后使补丁包生效。