SDK热更系列之Demo项目介绍概述

写在前面

本文是SDKHotfix相关的SDK热更系列文章中的一篇,以下为项目及系列文章相关链接:


项目说明

该项目主要是提供给SDK的开发者使用,提供了SDK开发者如何实现SDK自身热更新(包括Java代码和Native),如果是APP的开发者了解应用的热更新,建议参考dodola的HotFix项目,里面介绍的更全面。

为了降低项目的理解难度,关于java热更新,该项目暂时不会涉及怎么管理版本号、怎么在代码中插桩、怎么生成版本差异包、怎么将差异包编为dex文件等内容,这部分内容我会在另外的项目来介绍。

为了降低项目的理解难度,关于so的热更新,该项目暂时仅使用arm的so,关于如何在热更时根据so的类型来选择下发什么类型的so,请参考作者之前的文章 SDK热更之如何获取应用在当前设备上的so对应的指令集

由于本项目重点介绍重点SDK的热更新相关的内容,因此项目中的代码虽然是实现简单的功能,但是使用了SDK和demo等多个项目以及java和Native多层调用。本项目中不会再介绍SDK相关的内容,建议可以先通过下面的链接了解这个项目的结构,然后再看热更新项目的内容,点击了解Android-gradle-jni-so

代码介绍

1. 工程介绍

SDKHoxFix
	│
	├─── BuildPatch SDK自动插桩、自动生成补丁的插件工程
	│
	├─── GradleTest 普通的Android应用工程,调用了SDK提供的相关函数,也就是SDK的使用者
	│
	├─── MD5 SDK项目的工程,最终打包后对外提供jar包和so,本项目主要也是介绍他的热更新
	|
	├─── build.sh SDK相关的自动构建脚本,生成SDK的jar、so、Demo、补丁文件
	│
  └─── README.md 项目介绍

备注:后面的内容都重点介绍整个热更新相关的内容,这里补充一下目前的demo项目存在的一些注意事项。

  1. SDK的生成只能用命令行,因为分包生成支持热更的SDK是通过shell脚本实现的,直接gradle生成的jar并不可用
  2. Demo中,下载更新直接在主线程,而且没有回调,这里可以优化,因为为了介绍热更,因此对这里没有做太复杂的处理

2. 关键文件介绍

默认patch

对应本项目,就是bihe0832_hackdex.jar,是一个dex文件,里面仅包含插桩用的com.bihe0832.hotfix.Fix的代码。是解决预校验的关键类,需要打包进SDK的jar包,否则在Android的低版本会有问题。

3. 关键操作介绍

默认patch生成

目前因为默认patch是固定的,因此是通过手动生成。主要包括以下几步

  • 拿到SDK编译后的完整jar
  • 解压jar、删除除com.bihe0832.hotfix.Fix以外的所有代码
  • 将com.bihe0832.hotfix.Fix的class打包为jar
  • 用build工具将jar生成为dex(方法与生成patch包方法一致)

代码插桩并生成支持热更新的SDK

关于代码插桩可以参考SDK热更之如何在SDK代码中自动插桩及如何生成补丁包中相关的说明。插桩后默认生成的jar因为没有实现代码分包,还包含插桩类,因此会带来预校验的问题,因此我们需要对SDK代码分包和做一些预处理,具体做法包括:

  • 拿到SDK编译并插桩后的完整jar
  • 解压jar,删除com.bihe0832.hotfix.Fix文件
  • 把默认patch等其余热更需要的文件添加到jar的assets文件
  • 把所有内容重新打成新的jar

生成补丁包

Demo中关于补丁包生成通过自动构建生成,关于这部分内容可以参考SDK热更之如何在SDK代码中自动插桩及如何生成补丁包中关于热补丁生成相关的说明。主要流程为:

  • 拿到SDK编译后的完整jar
  • 解压jar,删除com.bihe0832.hotfix.Fix文件
  • 与老版本对比,删除所有没有变化的文件
  • 把所有内容重新打成新的jar
  • 用build工具将jar生成为dex

4. SDK初始化及热更流程

为了保证尽可能多的SDK的代码可以通过热更新更新,因此SDK通过先初始化热更模块,然后再初始化SDK的方法,而且比较多的使用了反射来杜绝代码引用引起的无法热更。

  • SDK初始化简单流程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析

任务调度系统是什么:他是一个类似Sql Server的代理,他可以帮助你定时处理一些SQL事务

1924
来自专栏运维小白

电脑提示没有权限在此保存文件

背景: 在更改hosts文件并保存的时候,提示没有权限在此位置保存文件 解决方法: 在开始菜单,搜索框中输入运行,找到运行框 然后在运行运行框中输入...

2199
来自专栏逻辑熊猫带你玩Python

“聊一聊Linux的工作环境”

由于Linux采用了和Windows不同的文件系统,所以和Windows用户熟悉的文件管理模式不通,这里来简单说说Linux的根("/")目录下目录的用途

872
来自专栏西枫里博客

最简单的基于jquery的ajax请求教程

上一次文章提到ajax异步请求的简单教程。那是基于原生JavaScript实现的。本次是基于jquery的ajax异步请求教程。

700
来自专栏HadesMo

调用对象存储Put Object接口上传文件

4846
来自专栏程序员同行者

tomcat安全加固

【加固方法】删除webapps/docs、examples、manager、ROOT、host-manager

1697
来自专栏Java帮帮-微信公众号-技术文章全总结

03.Linux系统启动过程

03.Linux系统启动过程 Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以...

3804
来自专栏阿炬.NET

Windows Server 2008 R2 安装 media Service 部分更新没有安装 KB963697

3066
来自专栏吴伟祥

配置MYSQL远程连接 原

想要远程连接阿里云服务器安装的mysql(不是RDS,RDS申请外网地址即可)需要两个步骤,

1802
来自专栏Java架构师历程

Linux设置静态IP

3153

扫码关注云+社区

领取腾讯云代金券