Android 热修复之阿里百川

    Android 热修复之阿里百川 快速集成

     第一步:配置app目录下的build.gradle文件 

     在文件中加入:

   repositories {
     maven {
             url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
         }
   }

     然后添加:

      compile 'com.taobao.android:alisdk-hotfix:2.0.9'


  第二步:在AndroidManifest文件中添加权限

    <!-- 网络权限 -->
    <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" />
    <!-- 外部存储读权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


      然后再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密钥" />

    第三步:在proguard-rules.pro文件中加入:
    #基线包使用,生成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.**{*;}

   第四步:创建MyApplication继承自Application,代码如下
             
    public class MyApplication extends Application {

      private static final  String TAG = "LotteryApplication";
      public static Context context;


      @Override
      public void onCreate() {
        super.onCreate();
        initHotfix();
     }

      private void initHotfix() {
        String appVersion;
        try {
            appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
            Log.d(TAG, appVersion);
        } catch (Exception e) {
            appVersion = "1.0.0";
        }

        SophixManager.getInstance().setContext(this)
                .setAppVersion(appVersion)
                .setAesKey(null)
                //.setAesKey("0123456789123456")
                .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();
                        Log.d(TAG, msg);
                    }
                }).initialize();
        SophixManager.getInstance().queryAndLoadNewPatch();
     }
   }

   到此,既可以开始测试了。生成一个apk,命名为app-old.apk,然后改动一下,生成app-new.apk,使用打包工具,生成补丁。接着下载测试工具到手机,按照官方文档一步一步操作即可。
  下面说两个遇到的问题:
  
 1. public final static int CODE_ERR_NOTINIT = 2;
    public final static String INFO_ERR_NOTINIT = "didn't initialize hotfix sdk or initialize fail.";
       出现Code=2是因为没有调用initHotFix()方法
  
 2. public final static int CODE_PATCH_INVAILD = 20;
    public static final String INFO_PATCH_INVAILD = "patch invaild, as patch not exist or is dir or not a jar compress file.";
     出现Code=20是因为使用本地补丁的时候没有找到正确的路径。

   虽然现在阿里百川快要淘汰了,还是写一下,记录一下吧。取而代之的将是阿里云热修复




猜你喜欢

转载自blog.csdn.net/lin962792501/article/details/77452669