阿里云热修复Sophix接入

项目需要对接热修复,一开始打算弄微信的Thinker,但是不支持高版本的gradle,最新版的gradle也需要改成4.0.1才能使用,不敢轻易修改gradle版本,所以还是使用了Sophix。
1.集成SDK:
在builde.gradle里添加

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

如图在这里插入图片描述
然后添加依赖

	// 阿里云热修复
    implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.14'

最后添加权限

<! -- 网络权限 -->
<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"/>

这样build之后,SDK就对接上了

2.代码使用:
想要能正常调用热修复功能,需要先在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密钥" />

然后去阿里云控制台去创建自己的应用,创建的过程中,会让你去下载一个JSON文件
在这里插入图片描述
按照文字提示,将这个json文件下载下来放进项目里
在这里插入图片描述
然后打开这个文件,里面就有对应的信息内容
在这里插入图片描述
appid和appsecret就有了,然后res密钥就是hotfix.rsaSecret的内容
下面的各个service就是阿里云的一些功能,1表示加载,0表示不加载,我只需要热修复功能,所以hotfix_service的status为1,其他改为0

然后在app的builde.gradle里添加

// 在 apply plugin: 'com.android.application' 下添加
apply plugin: 'com.aliyun.ams.emas-services'

在项目的builde.gradle里添加

// 添加emas-services插件
classpath 'com.aliyun.ams:emas-services:1.0.1'

在这里插入图片描述
在这里插入图片描述
最后需要新建一个SophixStubApplication继承SophixApplication
如果原来有自定义Application的,则需要这样:

public class SophixStubApplication extends SophixApplication
{
    private String TAG = "SophixStubApplication";

    @Keep
    @SophixEntry(MyApplication.class)
    static class RealApplicationStub
    {
    }

    @Override
    protected void attachBaseContext(Context base)
    {
        super.attachBaseContext(base);
//         如果需要使用MultiDex,需要在此处调用。
//         MultiDex.install(this);
        ShadowMultiDex.install(this);
        initSophix();
    }

    private void initSophix()
    {
        String appVersion = "0.0.0";
        try
        {
            appVersion = this.getPackageManager()
                    .getPackageInfo(this.getPackageName(), 0)
                    .versionName;
        } catch (Exception e)
        {
        }
        final SophixManager instance = SophixManager.getInstance();
        instance.setContext(this)
                .setAppVersion(appVersion)
                .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_SUCCESS)
                        {
                            Log.e(TAG, "sophix load patch success!");
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH)
                        {
                            // 如果需要在后台重启,建议此处用SharePreference保存状态。
                            Log.e(TAG, "sophix preload patch success. restart app to make effect.");
                        }
                    }
                }).initialize();

        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

}

MyApplication是我之前使用的自定义Application,之前在MyApplication的attachBaseContext方法中,我初始化了ShadowMultiDex.install(this),然后需要把这个改到SophixStubApplication的attachBaseContext方法里去初始化,在initSophix之前

最后AndroidManifest.xml里去引用SophixStubApplication

<application
        android:name=".application.SophixStubApplication"`
        ...

3.使用:
上面的步骤完成后,没有报错就可以去打包,然后修改一下源码,再打包去生成补丁包,最后去发布测试,这些具体的按照阿里云官方文档来就行了

我打包的时候出现了utdid重复的问题,是因为支付宝SDK与热修复SDK冲突,需要在官网下载剥离UTDID的支付宝SDK
在这里插入图片描述
替换一下就可以了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值