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

来源:互联网 发布:普吉岛4日游 知乎 编辑:程序博客网 时间:2024/05/20 06:26

一、引入所需要的依赖:

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

三、在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();   //在适当的位置加上此句,执行后会下载补丁文件,有些补丁需要重启才能使用,有些可直接使用无需重启






原创粉丝点击