系统版本:CentOS release 6.7 (Final)。
待打包的APP:原生+ReactNative的混合Android APP。
1. CentOS下安装ReactNative依赖
sudo su
# 安装node环境
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
# 安装React Native CLI
npm install -g react-native-cli
2. 打包流程
若项目根目录下没有node_modules目录,则执行以下命令
# 根据当前目录下的package.json文件安装所需依赖 npm install
打js bundle文件
# 生成inde.android.js、index.android.bundle文件,并复制到相应目录 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/
打apk包
# 与打原生的apk包相同,assembleDebug或assembleRelease gradlew assembleRelease
3. 集成到Jenkins打包流程
根据上一步的打包流程,编写shell脚本,并将其置于Jenkins中项目Job的“构建”环节第一步。
脚本中在项目所在目录的上一级目录新建了default_node_modules目录,用于存放生成的node_modules副本,以便下一次打包时可以直接复制使用而不用执行npm install,以节省打包时间。同时在打包参数中新增了ReinitNodeModules选项,打包时勾选此选项可以强制本次打包重新初始化node_modules。
# 【ReactNative相关】
# 初始化node_modules
# 默认node_modules目录
default_node_modules_dir="${PWD}/../default_node_modules"
# 若打包时勾选了ReinitNodeModules选项,或默认node_modules目录不存在,
# 则需要通过npm重新初始化node_modules
if [ ${ReinitNodeModules} == true ] || [ ! -d $default_node_modules_dir ]
then
# 初始化node_modules。这里使用了taobao的镜像
npm --registry https://registry.npm.taobao.org install
# 若默认node_modules目录存在,则删除之
if [ -d $default_node_modules_dir ]
then
rm -rf $default_node_modules_dir
fi
# 将当前目录下新初始化的node_modules复制到默认node_modules目录
cp -rf ./node_modules $default_node_modules_dir
else
# 若不需要重新初始化node_modules,则检查当前目录下是否存在node_modules目录,
# 若其不存在,则需要从默认node_modules目录下复制过来
if [ ! -d './node_modules' ]
then
cp -rf $default_node_modules_dir ./node_modules
fi
fi
# 打js bundle文件
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/