Skip to content

android hotfix implementation of QFix use IDE AndroidStudio

Notifications You must be signed in to change notification settings

alexclin0188/QFixPatch

This branch is 21 commits ahead of lizhangqu/QFix:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jun 22, 2017
c4f85a3 · Jun 22, 2017

History

23 Commits
Jun 22, 2017
Jun 22, 2017
Mar 29, 2017
May 7, 2017
Jun 22, 2017
Jun 22, 2017
Jun 22, 2017
Jun 22, 2017
May 7, 2017
Jan 14, 2017
Jan 14, 2017
Jan 14, 2017
Jun 22, 2017
Jun 22, 2017
Jan 14, 2017

Repository files navigation

QFixPatch

项目fork自QFix

原项目只是QFix补丁方案的一个简单示例demo,实际应用到项目中还是有不少工作要做,且原项目是Eclipse ant构建的,而实际应用中公司的项目是gradle/AS项目。

此项目即是按照QFix方案和demo将补丁的构建生成过程利用gradle插件进行自动化处理,简化实际应用到项目时的接入流程和生成补丁流程。

QFix补丁方案不同之处时,手Q原方案是在每个dex中预留一个空类作为加载补丁类的入口类,而此项目是使用asm分析每个dex找到第一个不会调用补丁中类的类作为加载入口类。

另外参考Tinker对在art模式下可能遇到一些问题增加了处理,增加strictMode,开启时打包时会把修改过的类以及所有调用了修改过的类的类class都打包到补丁中,解决高版本下ART下dex激进内联问题

使用说明

  • 接入QFixPatch

在项目根目录的build.gradle中

   ........
   
	buildscript {
	     repositories {
	        jcenter()
	     }
	     dependencies {
	        classpath 'com.android.tools.build:gradle:2.2.3'
	
	        classpath 'alexclin.qfix:qfix-gradle:1.0.0'
	     }
   }
   
   ........

在app模块的build.gradle中

   .......
   apply plugin: 'alexclin.qfix'
    
   qfix{
	    debugOn true //debug模式是否开启补丁构建task,可选
	    outputDir 'qfix_output'//补丁基础信息默认输入目录和构建输出目录,必须
	    excludeClass = ["App.class"]//需要排除的类,会自动排除Application及其父类,此处只是示例,可选
	    //includePackage = []//需要包含的package,可选
	    strictMode true //严格模式,用于解决ART下dex激进内联问题,
	}
   .......
   dependencies {
       ......
       compile 'alexclin.qfix:qfixlib:1.0.0'
       ......
   }
  • 打包发布版本
//构建发布包apk并保存对应的基础信息
./gradlew clean buildBase
//使用当前代码与输出目录下的最新的基础信息对比构建生成补丁
./gradlew clean buildPatch
//使用当前代码与指定目录的基础信息对比构建生成补丁
./gradlew clean buildPatch -P PatchBase=/xxxx/xx/xxx/
  • 命令说明
./gradlew clean buildBase //相当于同时执行assembleDebugBase和assembleReleaseBase

./gradlew clean assembleDebugBase //执行assembleDebug的同时保存基础debug apk信息

./gradlew clean assembleReleaseBase //执行assembleRelease的同时保存release apk基础信息

./gradlew clean buildPatch //相当于同时执行assembleDebugPatch + assembleReleasePatch

./gradlew clean assembleDebugPatch //构建debug补丁

./gradlew clean assembleReleasePatch //构建release补丁

About

android hotfix implementation of QFix use IDE AndroidStudio

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Groovy 49.7%
  • Java 45.6%
  • C 4.5%
  • CMake 0.2%