react native: react-native-cli 创建项目

一、环境配置

node

node下载地址:window选择Windows Installer (.msi)

验证:


C:\Users\able>node -v
v12.18.0

C:\Users\able>npm --version
6.14.4

npm配置
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global


npm install yarn
yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global

python

python下载地址

二、创建项目


npm uninstall -g react-native-cli

npm install -g react-native-cli

#  初始化一个名字为AwesomeApp的RN项目
react-native init AwesomeApp

报错:

Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules

原因:

文件没有root权限,运行语句前面加上sudo

解决:

sudo npm uninstall -g react-native-cli
sudo npm install -g react-native-cli
sudo react-native init rndemo

三、运行

1、在项目根目录执行命令,运行项目

# 已连接真机或开启模拟器前提下,启动项目
react-native run-android 
# 已连接真机或开启模拟器前提下,启动项目
react-native run-ios 

2、Android studio运行项目

用Android studio打开android目录,然后运行

3、启动服务

# 在项目目录下启动 js service
npm start
# 或
react-native start

四、问题

问题一
* What went wrong:
Task 'installDebug' not found in project ':app'.

解决方法: 配置release签名

参考:Task ‘installDebug’ not found in project ‘:app’.

问题二
E/unknown:ReactNative: Exception in native call
    java.lang.RuntimeException: 
    Unable to load script. 
    Make sure you're either running a Metro server (run 'react-native start') or that 
    your bundle 'index.android.bundle' is packaged correctly for release.

解决方法:

1、在Android/app/src/main目录下创建一个空的assets文件夹

2、项目根目录执行以下命令:

根目录有index.js

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/

根目录有index.android.js

react-native bundle --platform android --dev false --entry-file index.android.js  --bundle-output android/app/src/main/assets/index.android.bundle  --assets-dest android/app/src/main/res/  
  • –platform ,平台名称(ios或者android)
  • –dev ,设置为false的时候将会对JavaScript代码进行优化处理。
  • –entry-file ,ios或者android入口的js名称,比如index.js(老版本的RN项目的默认入口文件是index.ios.js , index.android.js)
  • –bundle-output, 生成的jsbundle文件的名称,比如./ios/bundle/index.jsbundle (老版本的RN项目是区分iOS和android的,要改为index.ios.jsbundle)
  • –assets-dest 图片以及其他资源存放的目录,比如./ios/bundle

参考:React Native Android打包详解

执行后效果图:
在这里插入图片描述

问题 : 生成签名警告(可忽略)

Key was created with errors:

Warning:

JKS 密钥库使用专用格式。

建议使用 “keytool -importkeystore -srckeystore C:\Users\able\Desktop\test111.jks -destkeystore C:\Users\able\Desktop\test111.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。

解决方法:

命令行执行即可:

keytool -importkeystore -srckeystore C:\Users\able\Desktop\test111.jks -destkeystore C:\Users\able\Desktop\test111.jks -deststoretype pkcs12

问题:

参考:

React Native : Error: Duplicate resources - Android

react native中一次错误排查 Error:Error: Duplicate resources

配置好release的签名,gradle执行installRelease报错 :

React Native : Error: Duplicate resources - Android

解决方法:
  • 步骤一:

app 的build.gradle中有这行:

apply from: "../../node_modules/react-native/react.gradle"

找到这个文件,并找到文件中的 doFirst ,然后在下边添加以下代码:

doLast {
    def moveFunc = { resSuffix ->
        File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
        if (originalDir.exists()) {
            File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
            ant.move(file: originalDir, tofile: destDir);
        }
    }
    moveFunc.curry("ldpi").call()
    moveFunc.curry("mdpi").call()
    moveFunc.curry("hdpi").call()
    moveFunc.curry("xhdpi").call()
    moveFunc.curry("xxhdpi").call()
    moveFunc.curry("xxxhdpi").call()
}
  • 步骤二:删除以下两个文件夹中的文件
android/app/src/main/res/drawable
android/app/src/main/res/raw

问题:怎么动态运行项目

Android studio安装debug和release都没问题后,用webstrom打开项目,

安装项目:

react-native run-android 

启动服务:

react-native start

然后修改代码了,就按r : app重新加载

To reload the app press “r”

To open developer menu press “d”

查看日志

# 在android studio查看日志
react-native log-android

# 在Xcode查看日志
react-native log-ios
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值