React Native CodePush热更新

以前做Android原生的时候,用腾讯bugly实现热更新,发布补丁的时候,android界面是没有任何提示的,在应用被杀死后,下次启动就会改变样子。我以为这个react native codepush热更新还是这样子。没有任何提示界面,然后,我在接入codepush的时候,一直在想为什么要有对话框出现呢,出现要重新下载?短路,直到集成成功之后,发现,这个对话框并不影响什么反而给用户一个友好的提示。
资料参考:CodePush热更新详细接入教程这个真的很详细,前面主要参考此文。
使用 CodePush 热更新 React Native 项目,这篇文章也是清晰

流程图.png

1.根据第一篇文章集成 1-4点,这部分完全没得问题。相关截图
image.png

登录之后,注册app,分android 和ios

code-push app add xxx Android react-native

成功之后会返回

image.png

查询注册的app
code-push app list

CodePush管理App的相关命令:

code-push app add 在账号里面添加一个新的app
code-push app remove 或者 rm 在账号里移除一个app
code-push app rename 重命名一个存在app
code-push app list 或则 ls 列出账号下面的所有app
code-push app transfer 把app的所有权转移到另外一个账号

安装组件

npm install react-native-code-push --save
 react-native link react-native-code-push
2.进行第5步,Android原生应用中配置CodePush
1).在loacl.properties中配置pushkey
image.png
code_push_key_production=vLKJpJGlwm9gPq1-tvB4Cbp50T3u8c157eb4-c840-4567-9319-4f2ef4a1159d
code_push_key_staging=ujJkBHtboIowoiCDY3Vhaeu2NBe58c157eb4-c840-4567-9319-4f2ef4a1159d
2).打开app的build.gradle,(在React Native 项目目录下 android/app/build.gradle)
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android{
···
 buildTypes {
        debug{
            minifyEnabled false //开启混淆
            zipAlignEnabled false
            shrinkResources false    // 移除无用的resource文件
            signingConfig signingConfigs.release
            buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }

        release {
            minifyEnabled true//开启混淆
            zipAlignEnabled true
            shrinkResources true// 移除无用的resource文件
            signingConfig signingConfigs.release
            buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

        }
    }
}

debug测试测试版本staging,relase测试线上production版本

3)在MainApplication.java添加 CodePush
@Override
protected List getPackages() {
  return Arrays.asList(
      ...
    new CodePush(BuildConfig.CODEPUSH_KEY, getApplicationContext(), true),
      ...
  );
}

默认的BuildConfig.CODEPUSH_KEY是staging环境的key。生产环境不用更换,测试过。=。=,会自动检测的。
现在,当运行或构建应用程序时,ReleaseStaging版本将自动配置为与Staging部署同步,并且Release版本将配置为与Production部署同步。
到此集成应该就集成好了。

首先,
image.png

比如,我们已经打包出去一个APP了,用户在用,那么用户在用的这个APP,最终是加载这个Bundle文件的。所有第一个版本,我们就需要打包Bundle文件到assert目录。
因为我是集成到现有android应用的。所有注意路径的复制
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output  app/src/main/assets/index.android.bundle --assets-dest app/src/main/res/    

webstorm创建参考:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

成功之后会显示:
image.png

这样发出去的包算是第一个初始版本。用户下载之后,不好了,我们发现了bug,此时,code_push就派上用处了。首先,我们修复了bug,当然如果是android+Rreact Native混合开发是不能改动android中的activity等文件的,只能添加修改.js文件。修复好bug之后,就需要发布出去。这个命令是在当前项目的根目录下执行,也可以在ide的控制台下,也是当前项目的根目录

code-push release-react HelloRN android  --t 1.0.0 --dev false --d Staging --des "这是第二个更新包" --m true
注意: CodePush默认是更新Staging 环境的,如果发布生产环境的更新包,需要指定--d参数:--d Production,如果发布的是强制更新包,需要加上 --m true强制更新

成功示意图


image.png

image.png

其他的一些参数命令,请在链接中去寻找。

发错了,版本回滚

查看版本

code-push deployment history HelloRN  Staging
image.png
// 回滚  
code-push rollback  Production --targetRelease v1(有对应是v几)  
image.png
图片就没有了。成功。

回滚成功之后就是这样子了。


image.png

回滚的时候到v几的版本,就会重新提示v几版本的提示

你可能感兴趣的:(React Native CodePush热更新)