阿里云 热更新EMAS / Hotfix 爬坑记录

废话不多说 什么优缺点 大家肯定已经比较过。

如果不知道热更新是个啥   大家可以自行百度

这个到没有贬低哪家的意思,现在做功能大家都想找个简单快捷的集成方式  所以还是决定听话不吃亏 哈哈哈

在开始之前 我是遇到了一个问题 截止发文前 官方工单还没给我一个解决办法  在高版本上 打出来的包 无法进行生成补丁  一直会卡在构建  ,so 目前的办法是降低 版本   我的之前是7+的  后改到了 3+   所以有用高版本的兄弟萌要注意下

那么好 接下来就进入正式的爬坑之路,

1 首先要登陆阿里云 注册账号,创建应用

输入应用名 包名 然后创建应用

按位置把相关配置文件下载  放到它该呆的地方

接下来就是把代码放到指定的位置

那么问题来了  有人说 直接按官方文档就行了 干嘛还要看些的这些文章 

呵呵 小了  兄弟你格局小了

接下来听我细细道来   到此在阿里云上把应用注册好 要用到里面的一些参数来配置

2  大家应该用的都是AS吧  接下来我把所有的文件都贴出来  大家自行查看

 项目的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
//        maven {
//            url 'https://maven.aliyun.com/nexus/content/repositories/releases/'
//        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        // 添加emas-services插件
//        classpath 'com.aliyun.ams:emas-services:1.0.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
//        maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}
//        maven{ url 'http://maven.aliyun.com/nexus/content/repositories/central/'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app的build.gradle

plugins {
    id 'com.android.application'
}
//apply plugin: 'com.aliyun.ams.emas-services'
android {
    compileSdkVersion 28
    buildToolsVersion "29.0.0"

    defaultConfig {
        applicationId "com.example.demotestaliemas"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0.8"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"


    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
repositories {
    maven {
        url "https://maven.aliyun.com/nexus/content/repositories/releases"
    }
}


dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    implementation 'com.aliyun.ams:alicloud-android-hotfix:3.3.0'


    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.0.4'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'cn.pedant.sweetalert:library:1.3'
}

接下来就是咱们的 混淆文件   Proguard-rules.pro

这里要注意下了 文档上说的是会生成一个 mapping.txt 文件  but 俺没有!俺没有!俺没有!

#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下

#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt

#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize

在activity 中 没有代码片段  不过大家在之后的生成补丁包的时候 可以在xml文件中可以修改一点文字,或者添加一张图片来测试效果

哦  Android 6.0 记得要获取下权限

重点来了:

重点来了:

重点来了:

重点来了:

public class SophixStubApplication extends SophixApplication {
    private final String TAG = "SophixStubApplication";
    // 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。
    @Keep
    @SophixEntry(MyRealApplication.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)
                .setAppVersion(appVersion)
                .setSecretMetaData("填你自己的", "填你自己的", "填你自己的")
                .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();
    }
}

接下来你会发现  MyRealApplication.class  爆红了  不用担心   咱们新建个

public class MyRealApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //hot fix. Load patch from aliyun service.
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

}

记得要在 清单文件中 application 中把 SophixStubApplication 添加进去

还有权限:

<!-- 网络权限-->
    <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" />
 还有配置的参数:
    <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="填你自己的"/>
到此就代码写完成了接下来就是打包  新包 旧包做区分  比如说 新包比旧包多加载个imgview 主要是测试效果

给你们5分钟打包时间 我出去抽根烟去

好了咱们继续 

接下来就该生成补丁包了 注意在生成补丁包之前要设置一些参数

参数设置好后就把新包  旧包路径添加进去  点击  GO!

再等个 1- 2分钟  你们出去抽根烟的时间

sopjix-patch.jar 就是咱们生成的 补丁包

最后就是把刚打好的补丁包扔到 阿里云平台

添加版本--》上传版本

确定---》发布

新建发布---》选择发布类型--》确定

至此整个流程就完成了  大家等跟烟的功夫 就可以测试了   先安装个旧版的App 

打开后过一会儿把进程杀掉 重新打开  看一看 图片或者文字 有没有加载进来

好了 就完事了  还有20分钟下班  再抽根烟去

哦对了    大家可以下载demo查看

距离下班还有10分钟。。。

看在这么博主辛苦的份上   拜托大家给点点赞

上两张图看效果吧   左边是oldApp   右边是newApp

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jonly_W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值