CodePush

CodePush是一个微软开发的云服务器。通过它,开发者可以直接在用户的设备上部署手机应用更新。CodePush相当于一个中心仓库,开发者可以推送当前的更新(包括JS/HTML/CSS/IMAGE等)到CoduPush,然后应用将会查询是否有更新。

安装CodePush CLI

控制台输入npm install -g code-push-cli,就可以安装了。
安装完毕后,输入 code-push -v查看版本代表成功。

创建CodePush账号

控制台输入code-push register 后,将会打开一个网页进行注册
账号支持 github和 Microsofe,选其中一个就可以了
成功登陆后,session会写在 ~/.code-push.config文件中。

1
2
3
4
5
 #用户相关命令
code-push login 登陆
code-push logout 注销
code-push access-key ls 列出登陆的token
code-push access-key rm {access-key} 删除某个 access-key

CodePush注册app

控制台输入code-push app add {appName}注册一个app

1
2
3
4
5
6
 #App添加相关命令
add 在账号里面添加一个新的app
remove 或者 rm 在账号里移除一个app
rename 重命名一个存在app
list 或则 ls 列出账号下面的所有app
transfer 把app的所有权转移到另外一个账号

项目配置

  1. 安装rnpm install react-native-code-push
1
2
3
4
5
 #这条命令将会自动帮我们在项目文件中添加好设置
rnpm-link info Linking react-native-code-push android dependency
rnpm-link info Android module react-native-code-push has been successfully linked
rnpm-link info Linking react-native-code-push ios dependency
rnpm-link info iOS module react-native-code-push has been successfully linked
  1. android/app/build.gradle文件里面添加额为的创建任务:
1
2
apply from: "react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
  1. 运行 code-push deployment ls {appName}获取 部署秘钥。默认的部署名是 staging
  2. 更新 MainActivity.java文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.microsoft.codepush.react.CodePush;
public class MainActivity extends ReactActivity {
//覆盖 getJSBundleFile 方法,让CodePush决定当app启动时,去哪里加载 JS bundle
@Override
protected String getJSBundleFile(){
return CodePush.getBundleUrl():
}
@Override
protected List<ReactPackage> getPackages(){
//实例化 CodePush运行时,把它添加到 packages,填写正确的 部署秘钥
return Arrays.<ReactPackage> as List(
new MainReactPackage(),
new CodePush("deployment-key" , this , BuildCofig.DEBUG)
)
}
}
  1. 修改 android/app/build.gradle
1
2
3
4
5
android{
defaultConfig{
versionName "1.0.0"
}
}
  1. 项目应用中部署
1
2
3
4
5
6
import codePush from 'react-native-code-push'
componentDidMount() {
---
codePush.sync( { updateDialog: {title:"中国足球",appendReleaseDescription:true,optionalIgnoreButtonLabel:"忽略",optionalInstallButtonLabel:"安装",optionalUpdateMessage:"有可用的更新,快快更新吧!" }, installMode: codePush.InstallMode.IMMEDIATE }
);
}
  1. code-push 部署APP相关命令
1
2
3
4
5
6
code-push deployment add {appName} 部署
code-push deployment rename {appName} 重命名
code-push deployment rm {appName} 删除部署
code-push deployment ls {appName} 列出应用的部署情况
code-push deployment ls {appName} -k 查看部署的key
code-push deployment history {appName} {deploymentNmae} 查看历史版本
  1. 发布bundles
    1. 在项目中添加 bundles文件夹放置bundle:
    2. 打包react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试
    3. CodePush发布更新了code-push release {appName} {Bundles所在目录} {对应的应用版本} -deploymentName 更新环境 --description 更新描述 --mandatory 是否强制更新

参考引用