Nuwa热修复在项目中应用

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名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值