本文是SDKHotfix相关的SDK热更系列文章中的一篇,以下为项目及系列文章相关链接:
这篇文章主要介绍一下SDK热更中的gradle插件,该插件实现了自动在代码中插桩以及生成补丁包。文中提到所有代码地址:SDKHotfix中插桩及补丁生成对应gradle插件的github地址:https://github.com/bihe0832/SDKHoxFix/tree/master/BuildPatch
该插件是一个基于groovy开发的gradle的插件,为了方便理解整个项目没有把他集成到SDK的构建中,而是通过shell脚本一步一步完成插桩和生成补丁。开发者可以根据个人兴趣整合到项目gradle中或者保持隔离。已经对插件代码填了一部分注释因此不会专门详细介绍具体实现,这里重点介绍一下插件定义的几个变量。
在SDK所有需要热更的代码中插桩是所有使用mutlidex的热更方案的基本原理。通过代码插桩的方式可以解决应用启动dex预检验时因补丁类不在相同dex的报错。详细的原理内容可以参照Qzone的原理介绍文章:安卓App热补丁动态修复技术介绍
com.bihe0832.hotfix.Fix
,保证SDK工程正常使用不出错com.bihe0832.hotfix.Fix
3_hash.txt
BuildPatch
项目BuildPatchPlugin.groovy
中taskprocessJarAndGetJarHash
对应的内容。com.bihe0832.hotfix.FixInfo
中保存了SDK的补丁的版本号等信息,因此该文件一定保留不会删除cd $localPath/MD5 && ./gradlew buildPatch deleteempty jar cvf $localPath/MD5/bin/temp/jar/bihe0832_patch.jar * cp -r $localPath/MD5/bin/temp/jar/bihe0832_patch.jar $localPath/MD5/bin/bihe0832_patch.jar $ANDROID_HOME/build-tools/23.0.2/dx --dex --output=$localPath/MD5/bin/bihe0832_patch_dex.jar $localPath/MD5/bin/temp/jar/bihe0832_patch.jar
BuildPatch
项目BuildPatchPlugin.groovy
中taskbuildPatch
对应的内容。