注1:本文實踐於 RocooFix熱修復框架方案java
注2:本文demo參考derocoodemo,裏面的key也借用了。android
注3:本文demo與以上參考demo大同小異,可對照食用。git
dependencies { classpath 'com.android.tools.build:gradle:2.1.2' classpath 'com.dodola:rocoofix:1.2.6'//添加 }
apply plugin: 'com.android.application' apply plugin: 'com.dodola.rocoofix'//添加 repositories { flatDir { dirs 'libs' } }
配置簽名,由於通常都是在發佈狀況下才須要熱修復嘛,因此如下操做全都是針對於release版本操做。另外,注意看下面的註釋部分github
signingConfigs { test { keyAlias 'shoyu' keyPassword 'admin22' storeFile file('doc/test.jks') storePassword 'admin22' } } defaultConfig { ... minSdkVersion 15 //這裏最低版本支持到API 15 ... versionCode 1 //這個值涉及到補丁版本發佈 ... } buildTypes { release { minifyEnabled true // 注意:必定要開啓混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.test } } dependencies { ... compile 'com.dodola:rocoo:1.1' compile(name: 'AndroidQuery-release', ext: 'aar') } rocoo_fix { includePackage = ['cf/paradoxie/hotfixdemo'] excludeClass = ['MyApplicaton.class', 'HotFixManger.class', 'BasePermissionActivity.class'] // preVersionPath = '1'//製做補丁版本時開啓 // scanref = true //製做補丁版本事開啓 enable = true }
文件配置app
1.libs文件夾下:AndroidQuery-release.aar、commons-codec-1.10.jar 兩個文件複製到本身的libs下,編譯。框架
2.doc文件夾下:jks簽名文件,這個本身配置都行,隨便放哪,上面storeFile路徑對就行。gradle
3.在main/assets文件夾下:patch.jar、rocoo.dex,示例。MyApplicaton中有註釋說明。ui
4.最後是java代碼:主要是hotfix和util兩個包下面的內容。注意導包。
5.MyApplicaton在manifest.xml中的spa
混淆配置code
注意看本身的包名
好像就差很少了吧。
最終的編譯效果會在app路徑下生成rocoofix文件夾,以下圖:
首先部署一個release版本到手機上
點擊右側gradle projects,選擇app/Tasks/install/installRelease,將會部署發佈版到設備上。如圖:
而後去修復相關bug,此Demo裏就是HelloHack類下的showHello方法的修改,修改以後bug後,修改module的build.gradle相關配置,主要就三個地方
1.versionCode 2版本號修改 2.rocoo_fix中,preVersionPath = '1' 取消註釋,開啓補丁製做 3.取消scanref = true註釋
編譯後app路徑下生成rocoofix下,如圖:
最後製做補丁包:點擊右側gradle projects,選擇app/Tasks/build/assembleRelease,如圖:
完過後會在rocoofix/version2/release/下生成patch.jar,如圖:
最後將patch.jar放置到圖3所示的目錄下,固然這個目錄能夠本身指定,最後部署後的運行效果
注:須重啓應用才能完成修復。
RocooFix框架解決了Nuwa由於Gradle1.40 裏Transform API沒法打包的狀況,如今兼容Gradle1.3-Gradle2.1.0版本,基於QQ空間終端開發團隊的技術文章實現,更多功能實現和侷限性參看RocooFix