1.热修复 Nuwa的引入过程。
a.
add following to the build.gradle of your root project.
classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
b.
add following to your build.gradle:
apply plugin: "cn.jiajixin.nuwa"
nuwa{
//b
aseApplication类
excludeClass = [
'BaseApplication.class'
,
'AppContext.class'
,
'StringUtils.class
’
]
//nuwa dex打包的文件夹
includePackage = ['com/sdtv/qingkcloud/mvc']
}
c. 依赖包
dependencies {
compile
'cn.jiajixin.nuwa:nuwa:1.0.0'
}
2.应用nuwa
a.
add following to your application class:
/**
* 分包处理
*/
@Override
protected void attachBaseContext(Context base) {
super .attachBaseContext(base);
Nuwa.init(this);
Nuwa.loadPatch(this, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/patch.jar"));
if (!quickStart() && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {//>=5.0的系统默认对dex进行oat优化
if (needWait(base)){
waitForDexopt(base);
}
MultiDex.install(this);
}
}
注意: 我工程当中针对5.0以下 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题.
Nuwa写在 MultiDex之前。
patch.jar加载完一次退出应用不会再次加载 清除应用数据会再次加载。 5.0以下加载时会碰到加载dex比较长时间(该问题继续跟踪)。所以针对热修复包管理 patch包名字要进行处理最好不要用同一个名字。
b. 打包时使用的混淆包
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
-keep class cn.jiajixin.nuwa.** {
*; }
3.打包过程。
a.正常打包
b.
copy build/outputs/nuwa 到备份文件夹
c.修改代码 修复bug.
d.执行
./gradlew clean nuwaQihooDebugPatch -P NuwaDir=/Users/jason/Documents/nuwa
其实Qihoo为打包渠道 后面文件夹为备份的文件夹路径
e.把patch文件拷贝到sd卡中
f.重启客户端 注意杀死进程 然后重启。
4.热修复过程中遇到的问题:
a.
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
原因:
third party library reference added two times.
我的解决方案: 指定
includePackage包
nuwa{
//b
aseApplication类
excludeClass = [
'BaseApplication.class'
,
'AppContext.class'
,
'StringUtils.class
’
]
//nuwa dex打包的文件夹
includePackage = ['com/sdtv/qingkcloud/mvc']
}
b. java.lang.NoClassDefFoundError: cn.jiajixin.nuwa.Hack
解决方案: 指定
excludeClass 注意是全路径
nuwa{
excludeClass = ['com/sdtv/qingkcloud/general/baseactivity/BaseApplication.class','com/sdtv/qingkcloud/general/appmanage/AppContext.class']
}
c. 5.0以下 第一次打开解析比较慢 会有一个(3-4s)的黑屏 正在跟踪此问题 可能和我分包
MultiDex 有关系
。
在4.2 4.4 5.0 6.0手机上都测试通过。测试修改了一个空指针和修改toolbar名称。