一文接入Android阿里Sophix热更新

最近公司项目渐趋成熟,已经不需要经常更新版本,并且更新版本对客户的影响特别大,但是日常维护难免需要更新代码,因此热修复的技术,就比较迫切了。

经过一段时间的对比,我们最终决定使用阿里的Sophix方案,因为它实在是太强大,而且接入及其简单。

阿里网址如下:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

应用申请这些因为过于简单,我这里就不说了,直接上代码

1、引入官方库,在app的build.gradle下,直接插入

java 复制代码
 compile 'com.aliyun.ams:alicloud-android-hotfix:3.3.5'

2、心间自定义Application文件名为SophixStubApplication,继承自SophixApplication,代码如下:

java 复制代码
public class SophixStubApplication extends SophixApplication {
    private final String TAG = "SophixStubApplication";
    // 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。
    @Keep
    @SophixEntry(自定义的Application.class)
    static class RealApplicationStub {}
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
//         如果需要使用MultiDex,需要在此处调用。
         MultiDex.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)
                .setUsingEnhance() // 适配加固模式,如果app使用了加固则需要加上此方法
                .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.i(TAG, "sophix load patch success!");
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 如果需要在后台重启,建议此处用SharePreference保存状态。
                            Log.i(TAG, "sophix preload patch success. restart app to make effect.");
                        }
                    }
                }).initialize();
        instance.queryAndLoadNewPatch();
    }
}

简单说一下这里,基本是固定格式,最重要的代码是

java 复制代码
instance.queryAndLoadNewPatch();

顾名思义,查询并加载新的补丁。这个一定要调用的,不然无法加载补丁,记得把SophixStubApplication注册到AndroidManifest.xml中,举个例子:

java 复制代码
 <application
        android:name="xxxxxx.SophixStubApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:maxAspectRatio="2.4"
        android:resizeableActivity="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">


 <meta-data
            android:name="com.taobao.android.hotfix.IDSECRET"
            android:value="" />
        <meta-data
            android:name="com.taobao.android.hotfix.APPSECRET"
            android:value="" />
        <meta-data
            android:name="com.taobao.android.hotfix.RSASECRET"
            android:value="" />

</application>

这样一套下来,阿里云热修复就已经成功集成到app中。

接再来再说说一些注意事项

1、不能热更新的场景

1)、新增四大组件

2)、修改了SophixStubApplication的内容

3)、修改了AndroidManifest.xml的内容

4)、其他配置文件

除此之外,其他的一切皆可更新,包括.so文件

2、关于加固的app,如果采用了加固,去打补丁的时候一定要拿未加固前的apk去操作,否则无法加固

相关推荐
我命由我123452 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian2333 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_955759623 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马4 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone4 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone4 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子7 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker7 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone8 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常
雾屿_Mistisle8 小时前
文件包含漏洞(File Inclusion)
android