HotFix移动热修复详解

集成步骤:

1、打开阿里云选择产品------移动热修复:



2、登录:



3、点击控制台:





4、产品与服务点击移动热修复:





5、创建App



7、返回控制台管理页面已经有创建的应用--------点击管理--------得到Appid、AppSecret和RSA秘钥点击添加版本创建补丁版本

注:这里的补丁版本要和清单文件中的VersionName,MyApplication中的HotFix初始化的appVersion的版本号一致,不一致不能进行修复






快速集成:

1、配置AndroidManifest文件(这三个值在上面已经得到)

AndroidManifest.xml中间的application节点下添加如下配置:

<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />

将上述value中的值分别改为通过平台HotFix服务申请得到的App Secret和RSA密钥,出于安全考虑,建议使用setSecretMetaData这个方法进行设置,详见1.3.2.1的方法说明。

2、 混淆配置  (要使用混淆就添加,我的项目中没有用到)

#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致 #-applymapping mapping.txt
#hotfix -keep class com.taobao.sophix.**{*;} -keep class com.ta.utdid2.device.**{*;} #防止inline -dontoptimize


3、在 Moudle的 build.gradle中添加:

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

repositories {
    mavenLocal()
    //阿里云仓库
    maven {
        url "http://maven.aliyun.com/nexus/content/repositories/releases"
    }
    mavenCentral()
    jcenter()
    flatDir {
        dirs 'libs'
    }
}

4、在dependencies中添加引用:

compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.1'

libs目录下添加jar包

utdid4all-1.1.5.3_proguard.jar'


4、在MyApplicstion中做初始化操作:


/**
    * 热修复标记
    */
   public   static Boolean state=false;
   public static MsgDisplayListener msgDisplayListener = null;
   public static StringBuilder cacheMsg = new StringBuilder();

   @Override
   public void onCreate() {
      super.onCreate();
      app = this;
      initHotfix();  
   }
   
   private void initHotfix() {
      String appVersion;
      try {
         appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
      } catch (Exception e) {
         appVersion = "2.0.0";
      }
      SophixManager.getInstance().setContext(this)

            .setAppVersion(appVersion)
            .setAesKey(null)
            .setEnableDebug(true)
            .setPatchLoadStatusStub(new PatchLoadStatusListener() {
               @Override
               public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                  String msg = new StringBuilder("").append("Mode:").append(mode)
                        .append(" Code:").append(code)
                        .append(" Info:").append(info)
                        .append(" HandlePatchVersion:").append(handlePatchVersion).toString();
                  if (msgDisplayListener != null) {
                     msgDisplayListener.handle(msg);
                  } else {
                     cacheMsg.append("\n").append(msg);
                  }

                  if(code== PatchStatus.CODE_LOAD_RELAUNCH)
                  {                 
                     SophixManager.getInstance().killProcessSafely();
                  }
               }


            }).initialize();
   }

5、在需要更新的地方调下面的方法即可:

SophixManager.getInstance().queryAndLoadNewPatch();


猜你喜欢

转载自blog.csdn.net/qq_26554909/article/details/78013801