阿里SopHix热修复框架操作实践基础步骤

来源:互联网 发布:股票行情分析软件 编辑:程序博客网 时间:2024/05/17 03:10
  • 首先第一步去阿里云申请注册账户,接下来是管理后台使用说明,链接如下:
    https://help.aliyun.com/document_detail/51434.html?spm=5176.doc53287.6.552.vZxNDm#Step5 发布补丁
  • 列表内容

    在android studio 上创建一个app项目工程,从管理后台获取AppId,和AppSecret以及RSA密钥。
    上面三个参数需要配置在application节点下面:

        <meta-data            android:name="com.taobao.android.hotfix.IDSECRET"            android:value="AppId" />        <meta-data            android:name="com.taobao.android.hotfix.APPSECRET"            android:value="AppSecret" />        <meta-data            android:name="com.taobao.android.hotfix.RSASECRET"            android:value="RSA密钥" />
  • 列表内容

    . 在项目对应的build.gradle下添加对应的库

maven {            url "http://maven.aliyun.com/nexus/content/repositories/releases"        }

在模块对应的build.gradle下添加

 compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.7'
  • 申请对应的权限
     <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" />

关于权限,在6.0以上的手机,需要动态的获取。如果没有相关的权限,启动app是检查不到新的补丁包的。我用的手华为的手机,安装app后,日志总是输出“there is not update”。原因是我没有读取内存卡的权限没有申请成功。

  • 创建MyApplication
package xxq.com.andfixdemo;import android.app.Application;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Environment;import android.util.Log;import android.widget.Toast;import com.alipay.euler.andfix.patch.PatchManager;import com.taobao.sophix.PatchStatus;import com.taobao.sophix.SophixManager;import com.taobao.sophix.listener.PatchLoadStatusListener;import java.io.File;import java.io.IOException;/** * Created by Administrator on 2017/12/14 0014. */public class MyApplication extends Application {    private static final String TAG = "MyApplication";    @Override    public void onCreate() {        super.onCreate();        init();    }    private void init() {        SophixManager.getInstance().setContext(this)                .setAppVersion(getAppVersionName(this))                .setAesKey(null)                .setEnableDebug(true)                .setPatchLoadStatusStub(new PatchLoadStatusListener() {                    @Override                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {                        // 补丁加载回调通知                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {                            // 表明补丁加载成功                            Log.i(TAG, "onLoad: 成功");                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;                            // 建议: 用户可以监听进入后台事件, 然后应用自杀                            Log.i(TAG, "onLoad: 生效需要重启");                            restartApp();                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载                            // SophixManager.getInstance().cleanPatches();                        } else {                            // 其它错误信息, 查看PatchStatus类说明                            Log.i(TAG, "onLoad: 其它错误信息"+code);                        }                    }                }).initialize();//        SophixManager.getInstance().queryAndLoadNewPatch();    }    /**     * 返回当前程序版本名     */    public static String getAppVersionName(Context context) {        String versionName = "";        try {            // ---get the package info---            PackageManager pm = context.getPackageManager();            PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);            versionName = pi.versionName;            //versioncode = pi.versionCode;            if (versionName == null || versionName.length() <= 0) {                return "";            }        } catch (Exception e) {            Log.e("VersionInfo", "Exception", e);        }        return versionName;    }    public void restartApp(){        RestartAPPTool.restartAPP(this,2000);    }}

在activity oncreate()中添加

SophixManager.getInstance().queryAndLoadNewPatch();

整体代码如下 :

package xxq.com.andfixdemo;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.taobao.sophix.SophixManager;import java.io.File;public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        SophixManager.getInstance().queryAndLoadNewPatch();        tv = (TextView) findViewById(R.id.textview);        tv.setOnClickListener(this);    }    public void onStart(View V){        tv.setText("我是原始的app");//        tv.setText("我是热修复的app");    }    @Override    public void onClick(View v) {        Toast.makeText(MainActivity.this, tv.getText(), Toast.LENGTH_SHORT).show();    }}

关于SopHix最终如何使用可以参考官网文档
以上内容参考于:http://www.jianshu.com/p/42c436f1b207
感谢杨hai

原创粉丝点击