Sophix移动热修复之在AndroidStudio项目集成SDK(一)

开发环境:             

MAC OS    10.11.5              

AndroidStudio    2.3.2


Sophix,来源于Sophic(明智的)+ FIX,一个更明智的热修复方案。

在Android热修复的三大领域:代码修复、资源修复、so修复方面,以及方案的安全性和易用性方面,Sophix都做到了业界领先。

本文主要讲两个方面:如何开通移动热修复(第一步和第二步)、怎样在本地项目中集成Sophix(第三步)。

下篇文章讲解集成之后如何使用Sophix。



图片来源:阿里推出业界首个非侵入式热修复方案Sophix,颠覆移动端传统更新流程!



图片来源:移动热修复 > 快速集成 > 快速接入

说明:
[0] 部分情况指的是构造方法、参数数目大于8或者参数包括long,double,float基本类型的方法。
[1] 冷启动方式,指的是需要重启app在下次启动时才能生效。
[2] 对于Andfix及Hotfix 1.X能够支持的代码变动情况,都能做到即时生效。而对于其他代码变动较大的情况,会走冷启动方式,此时就无法做到即时生效。
[3] Hotfix 1.X已经支持绝大部分主流手机,只是在X86设备以及修改了虚拟机底层结构的ROM上不支持。
[4] 由于支持了资源和库,如果有这些方面的更新,就会导致的补丁变大一些,这个是很正常的。并且由于只包含差异的部分,所以补丁已经是最大程度的小了。
[5] 提供服务端的补丁发布和停发、版本控制和灰度功能,存储开发者上传的补丁包。


如何在项目中集成Sophix呢?


第一步:注册阿里云账号,并开通移动热更新(阿里云首页:https://www.aliyun.com/

① 打开控制台

② 选择产品与服务,打开移动热修复


③ 点击  立即开通


第二步:在阿里云上创建APP

①点击创建APP,并填写相应设置





②创建成功后,点击侧边栏中的 移动热修复,回到移动热修复的根目录,点击右侧的管理,会显示相应APP的信息






第三步:用AndroidStudio新建一个项目(或者已有的项目),正式开始集成工作

以下参考官方文档:https://help.aliyun.com/document_detail/53240.html?spm=5176.doc53287.2.1.CQNhBv

① 在AndroidStudio中配置  gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加如下配置

添加maven仓库地址,与android{}、dependencies{}节点同级

repositories {
    maven {
        url "http://maven.aliyun.com/nexus/content/repositories/releases"
    }
}
添加gradle坐标版本依赖,在dependencies{}节点中添加

    compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.9'


② 在AndroidManifest.xml文件中配置权限,注意READ_EXTERNAL_STORAGE/ACCESS_WIFI_STATE权限属于Dangerous Permissions,自行做好android6.0以上的运行时权限获取

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


③ 在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密钥" />
App ID、 App Secret、 RSA密钥填写你在第二步最后一张图中对应的信息

④ 在项目app/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.**{*;}
#防止inline
-dontoptimize

⑤ SDK接入

在项目的Application中接入,initialize的调用应该尽可能的早,必须在Application.attachBaseContext()或者Application.onCreate()的最开始进行SDK初始化操作,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。

若新建的项目中未有Application,则新建MyApplication.java,继承Application。并在AndroidManifest.xml的application节点引用。

import android.app.Application;
import android.content.pm.PackageManager;

import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;

/**
 * Created by du.
 */
public class MyApplication extends Application {

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

    private void initSophix() {
        String appVersion;
        try {
            appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            appVersion = "1.0";
        }

        // initialize最好放在attachBaseContext最前面
        SophixManager.getInstance().setContext(this)
                .setAppVersion(appVersion)
                .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) {
                            // 表明补丁加载成功
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后应用自杀,以此加快应用补丁
                            // 建议调用killProcessSafely,详见1.3.2.3
                            // SophixManager.getInstance().killProcessSafely();
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
                            // SophixManager.getInstance().cleanPatches();
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                        }
                    }
                }).initialize();
        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

}
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        ......
        
    </application>
至此,Sophix接入项目完毕。


参考链接:

http://zhuanlan.51cto.com/art/201706/542445.htm

https://help.aliyun.com/document_detail/53240.html?spm=5176.doc53287.2.1.CQNhBv




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值