Android:热修复(阿里Sophix使用)

一、引入所需要的依赖:

1.在工程根目录的build.gradle中加入如下代码

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


2.在工程中app目录下的build.gradle中加入jar包依赖:

dependencies {
    api fileTree(include: ['*.jar'], dir: 'libs')
    api 'com.aliyun.ams:alicloud-android-hotfix:+'
}

二、在app目录的AndroidManifest.xml中application标签中配置appkey:

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


三、在app目录下AndroidManifest.xml中下配置权限:

    <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" />

四、在app目录下的proguard-rules.pro中加入混淆代码:

-keepclassmembers class com.jcgroup.ease.EaseApplication {
    public <init>();
}
-keep class com.jcgroup.ease.SophixStubApplication$RealApplicationStub

五、创建一个继承SophixApplication的Application类:

/**
 * hotfix专用Application类,无其他业务
 */
public class SophixStubApplication extends SophixApplication {

    /**
     * 此处SophixEntry应指定真正的Application, 这里为MyApplication, 并且保证RealApplicationStub类名不被混淆。
     */
    @Keep
    @SophixEntry(MyApplication.class)
    static class RealApplicationStub {
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        initSophix();
    }

    /**
     * hotfix初始化工作
     */
    private void initSophix() {
        final SophixManager instance = SophixManager.getInstance();
        instance.setContext(this)
                .setAppVersion(VersionUtil.getAppVersion(this))
                .setSecretMetaData(null, null, null)
                .setEnableDebug(true)
                .setEnableFullLog()
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                        if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 新补丁生效需要重启, 强制退出;
                            SophixManager.getInstance().killProcessSafely();
                        }
                    }
                }).initialize();
    }
}

六、配置Application, 将原有的换成自定义SophixApplication类(app下的AndroidManifest.xml):

<application
        android:name=".SophixStubApplication">


七、在原有的Application中的onCreate中加入获取补丁包的代码:

//hotfix拉取补丁
        SophixManager.getInstance().queryAndLoadNewPatch();

八、生成补丁并上传:

1.对以上工程打2个apk,一个旧的apk,一个新的apk,即修复bug的代码。

2.从以下地址下载补丁包生成工具:

http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip?spm=5176.doc53247.2.4.DAipia&file=SophixPatchTool_windows.zip

3.打开工具,分别在旧包和新包中选择对应的apk文件,点设置,设置打包签名的信息,然后点击"GO!",过会生成"sophix-patch.jar"文件,这个就是补丁包。

4.上传补丁文件到阿里云,管理控制台 -> 产品与服务 -> 移动服务 -> 移动热修复 -> APP管理 -> APP列表 -> 点某个应用的管理按钮 -> 应用版本列表中添加版本号 -> 版本详情中上传该版本的补丁文件,可以有多个。

九、下载并使用补丁:

SophixManager.getInstance().queryAndLoadNewPatch();   //在适当的位置加上此句,执行后会下载补丁文件,有些补丁需要重启才能使用,有些可直接使用无需重启

猜你喜欢

转载自blog.csdn.net/a526001650a/article/details/78625903