美文网首页
Code-Push集成与使用(Android)

Code-Push集成与使用(Android)

作者: 锄禾少年不太帅 | 来源:发表于2019-09-30 16:35 被阅读0次

    Code-Push集成与使用(Android)

    第一步

    安装code-push包,并link到原生工程:

    npm install --save react-native-code-push@latest
    react-native link react-native-code-push
    

    在app/build.gradle下添加

    apply from: "../../node_modules/react-native/react.gradle"
    apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
    

    link命令默认RN项目的添加codepush代码是在MainApplaction下添加,如下:

    360截图18770529192621.png

    如果是原生项目接入RN模块,你自定义入口Activity的时候可能是这样:

    360截图1843070799119107.png

    这个时候需要添加codepush的相关代码,如图:

    360截图167708048780118.png

    集成遇到的问题

    报错1
    Could not find method enabled() for arguments [[]] on task ':app:bundleDebugJsAndAssets' of type org.gradle.api.tasks.Exec

    原因:0.60以上版本导致的

    解决办法:在apply from:前添加project.ext.react,如下:

    project.ext.react = [
            entryFile: "index.js",
            enableHermes: false,  // clean and rebuild if changing
    ]
    apply from: "../../node_modules/react-native/react.gradle"
    apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
    

    这几行代码在创建0.60以上版本的时候默认会有,但是如果是原生项目接入RN模块可以就会忘记添加,这是默认导出的入口文件,改为你自己的。

    第二步

    在vscode窗口安装命令行工具:

    npm install -g code-push-cli
    

    窗口内常用命令

    注册: code-push register

    登录: code-push login

    查看添加的app列表: code-push app list

    添加android APP:code-push app add app名字 Android react-native,如:

    code-push app add iOSRNHybridForAndroid Android react-native
    

    查询一个程序的更新历史: code-push deployment history projectName Production

    projectName是项目名字,最后一位参数如果是正式版本就使用Production,开发版本就使用Staging,例如:
    
    code-push deployment history bwt-android Production
    

    获取注册程序的密钥:code-push deployment ls AppName -k 例如:

    AppName是你创建的app名字
    
    code-push deployment ls bwt-android -k
    

    发送更新包流程

    第一步:将工程打包apk,release版本

    1、 android studio 编译成apk,安装到手机上

    2、 调试的时候可以生产离线bundle,命令

    react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试
    

    例如:

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

    第二步:code-push生成包并上传

    打包发布有两种方式

    第一种方式:

    通过code-push release-react发布更新,这种方式将打包与发布两个命令合二为一,简化了操作流程,常用的就是这种方式,可以规避很多问题

    简单的:code-push release-react <appName> <platform>

    例如:

    code-push release-react MyApp-iOS ios
    code-push release-react MyApp-Android android
    

    复杂的:

    第一种:
    code-push release-react MyApp-iOS ios  --t 1.0.0 --dev false --d Production --des "1.优化操作流程" --m true
    
    第二种:
    code-push release-react bwt-android android --bundleName "record.jsbundle" --entryFile index_record.js  --t 6.1.1 --d Production
    

    code-push release-react 该命令可以配置更多的参数,如指定bundle名字,index入口名字等,命令窗口输入:code-push release-react 查看,如指定index入口:

    //entryFile默认未index.js或者index.android.js
    code-push release-react bwt-android android --d Staging --des "基准版本" --t 1.0.0 --entryFile index_record.js
    

    第二种方式

    通过code-push release发布更新,此种方式是先打包后发布,2个步骤,两个命令。

    1、 打包bundle文件,命令:

    单纯打包bundle,如果不打包资源,在更新成功后会加载不到图片资源,所以基本不用此命令
    
    react-native bundle --platform android --entry-file index_message.js --bundle-output ./android/bundles/index.android_message.bundle --dev false
    
    打包bundles + 图片资源
    
    react-native bundle --platform android --entry-file index_message.js --bundle-output ./android/bundles/index.android_message.bundle --assets-dest ./android/bundles/ --dev false
    

    注意路径的文件夹需要自己提前创建好,打包后的目录如下图:

    截图

    2、 codePush发布命令:

    code-push release <appName> <updateContentsPath> <targetBinaryVersion> [options]
    
    例子:
    code-push release bwt-android ./android/bundles 6.1.1 --deploymentName Production  --description "1.测试消" --mandatory true
    

    注意

    1、在发布的时候 指定的路径需要指定文件夹,不能指定到bundle,否则资源文件未上传在热更成功后会找不到图片

    2、在窗口中输入code-push release命令可以看到详细说明,可以自定义配置。

    3、版本号填写的应该是android工程的apk版本号,意思是指定在该版本上热更新,而不是热更的版本。

    第三步 rn工程中添加codepush代码进行检查

    1、导入包 import CodePush from 'react-native-code-push';

    2、自己创建按钮或者在componentDidMount下添加代码:

    //第一个参数是配置(默认{}也可以),第二个是更新包状态回调,第三个参数是更新包下载回调,第二和第三参数不填写也是可以的。
      CodePush.sync(
          {},
          this.codePushStatusDidChange.bind(this),
          this.codePushDownloadDidProgress.bind(this),
        );
    

    codePushStatusDidChange和codePushDownloadDidProgress是自己随便写的,需要查看详细回调的话可以传入。

    调用codepush检查之后会下载更新包,然后重启程序,就能看到更新后的效果

    问题

    问题1:自搭服务器codepush更新检查时报错Network request failed

    解决方法:自搭服务器是http的域名,但android8.0以上只支持https,所以需要降低android版本,tagetSdk改成25即可

    参考资料

    打包相关

    相关文章

      网友评论

          本文标题:Code-Push集成与使用(Android)

          本文链接:https://www.haomeiwen.com/subject/vkxructx.html