HotFix移动热修复详解

来源:互联网 发布:如果南京是首都知乎 编辑:程序博客网 时间:2024/06/05 13:22

集成步骤:

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



2、登录:



3、点击控制台:





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





5、创建App



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

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






快速集成:

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

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

<meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="App ID" /><meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="App Secret" /><meta-dataandroid: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();