阿里熱更新hotfix

官方文檔地址:https://help.aliyun.com/document_detail/69874.html?spm=a2c4g.11174283.6.552.KE7jWx

集成開始:

1、進入管理控制檯

2、新建產品

 

下載aliyun-emas-services.json文件
    後面配置需要的數據,都在該文件中

 

二、SDK引入

SDK引入有以下兩種方式,官方更推薦第一種。
1. gradle遠程倉庫依賴

添加maven倉庫地址


allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "http://maven.aliyun.com/nexus/content/repositories/releases"
        }
    }

在app.gradle中添加依賴

/*
    Android Studio 3.0以後,官方推薦使用  implementation 或 api 添加依賴
    如果是之前的版本,使用compile
 */

implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.3'

2. SDK下載

SDK下載地址
三、添加必要權限

<!-- 網絡權限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--
    外部存儲讀權限,調試工具加載本地補丁需要
    僅調試工具獲取外部補丁需要,不影響線上發佈的補丁加載,調試時請自行做好android6.0以上的運行時權限獲取。
-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 

四、添加meta-data

在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密鑰" />
 

這三個值需要到前面下載的aliyun-emas-services.json文件裏查找,對應關係如下:
value名     對應字段
App ID     hotfix.idSecret
App Secret     emas.appSecret
RSA密鑰     hotfix.rsaSecret
 

五、混淆配置(可選)

#基線包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路徑下,移動到/app路徑下
#修復後的項目使用,保證混淆結果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
 

這樣,前期的配置準備就完成了。將項目編譯以下,準備後面的代碼配置。
代碼配置

這裏我直接貼上初始化的代碼,在註釋中詳細介紹:

package com.huaiwang.zhhw;
 
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.Keep;
import android.util.Log;
import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixApplication;
import com.taobao.sophix.SophixEntry;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;
 
/**
 * 作者: WangSophixApp
 * 時間: 2019/3/11 13:59
 * 描述:
 */
public class WangSophixApp extends SophixApplication {
  private static final String TAG="WangSophixApp";
 
  @Keep
  @SophixEntry(WangApp.class)
  static class RealApplicationStub {
  }
  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    initSophix();
  }
 
  private void initSophix() {
    String appVersion;
 
    try {
      appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
      appVersion = "1.3";
      e.printStackTrace();
    }
 
    SophixManager.getInstance().setContext(this)
        .setAppVersion(appVersion)
 
        .setAesKey(null)
        .setEnableDebug(false)
        .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();
 
            Log.d(TAG, "onCreate://...... " + msg.toString());
//            if (msgDisplayListener != null) {
//              msgDisplayListener.handle(msg);
//            } else {
//              cacheMsg.append("\n").append(msg);
//            }
            // 補丁加載回調通知
            if (code == PatchStatus.CODE_LOAD_SUCCESS) {
              // 表明補丁加載成功
            } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
              // 表明新補丁生效需要重啓. 開發者可提示用戶或者強制重啓;
              // 建議: 用戶可以監聽進入後臺事件, 然後調用killProcessSafely自殺,以此加快應用補丁,詳見1.3.2.3
             // SophixManager.getInstance().killProcessSafely();
 
            } else if (code == PatchStatus.CODE_LOAD_FAIL) {
              // 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重複加載
               SophixManager.getInstance().cleanPatches();
            } else {
              // 其它錯誤信息, 查看PatchStatus類說明
            }
          }
        }).initialize();
 
  }
}
 

這個很容易踩的坑,

PadApplication.class填寫自己的,使用@keep指向自己的Application

在配置文件引用AndroidManifest添加前面的WangSohixApp文件,這個名字可以取自己的

 

生成補丁工具下載和使用介紹:https://help.aliyun.com/document_detail/53247.html?spm=a2c4g.11186623.4.4.Pr69Go

 代碼配置差不多了,到了打包apk了,首先生成兩個舊的apk和新的apk,設置那裏是配置自己簽名(AES Key選填)

配置完成之後,點擊go

生成的補丁是這個,然後打開阿里平臺

 

 

注意注意注意了

這三個地方的版本號一定要一樣

點擊新建發佈就成功了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章