概要

  • react native
  • 环境搭建
  • hello react native
  • react native 发布

react native

优势

  1. 不用再学习 OC,Swift,Java,Kotlin 等
  2. 复用 react 开发的种种好处
  3. 开发体验好(即时编译)
  4. 编译出来的是原生应用,不是 html5 app,也不是 hybrid app
  5. 可以方便的和原生代码写的控件集成

劣势

  1. 还在发展中,更新频繁,既有可能存在暗坑
  2. 性能调优的方式没有真正的原生开发多

环境搭建

npm install -g react-native-cli
npm install -g create-react-native-app
npm install -g watchman

hello react native

  1. 创建工程

    create-react-native-app sample
  2. 启动工程

    cd sample
    yarn start
  3. 通过 expo 来查看运行结果

发布

android 发布

下载 android 环境

  1. 下载 android sdk(如果不用 android studio 开发,可以只下载 sdk 即可)
  2. 下载地址:https://developer.android.com/studio/index.html

配置 android 环境

解压 sdk 到 opt/android

配置 .zshenv / .bashenv

export ANDROID_HOME=/opt/android
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

安装 platform-tools

cd $ANDROID_HOME
./tools/bin/sdkmanager platform-tools

安装 build-tools

cd $ANDROID_HOME
./tools/bin/sdkmanager "build-tools;23.0.1"

创建签名

yarn eject
cd android
keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

创建签名时,密码用 123456

配置签名

  1. vim ./android/gradle.properties

    MYAPP_RELEASE_STORE_FILE=my-app-key.keystore
    MYAPP_RELEASE_KEY_ALIAS=my-app-alias
    MYAPP_RELEASE_STORE_PASSWORD=123456
    MYAPP_RELEASE_KEY_PASSWORD=123456

    把生成的文件 my-app-key.keystore 放入 android/app 文件夹下

  2. vim ./android/app/build.gradle

    android {
    defaultConfig {... ...}
    signingConfigs {
    release {
    if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
    storeFile file(MYAPP_RELEASE_STORE_FILE)
    storePassword MYAPP_RELEASE_STORE_PASSWORD
    keyAlias MYAPP_RELEASE_KEY_ALIAS
    keyPassword MYAPP_RELEASE_KEY_PASSWORD
    }
    }
    }
    buildTypes {
    release {
    ... ...
    signingConfig signingConfigs.release
    }
    }
    }

发布

cd android
./gradlew assembleRelease

生成的 apk 在 app/build/outputs/apk 下

附录

启动一直卡在 Starting packager…

修改如下内核参数后再启动:

sudo sysctl -w fs.inotify.max_user_watches=1000000

永久修改此参数,可以把这个配置加入到: /etc/sysctl.conf 中

./gradlew assembleRelease 时无法运行 aapt

java.io.IOException: Cannot run program "/opt/android/build-tools/23.0.1/aapt": error=2, No such file or directory

安装 确实的 package

sudo  apt-get install lib32stdc++6 lib32z1

Couldn't find preset "babel-preset-react-native-stage-0/decorator-support"

安装相应的 package

cd ..
yarn add babel-preset-react-native-stage-0
cd android
./gradlew assembleRelease

最新文章

  1. keil uvision3 添加 STC单片机库
  2. 每天一个linux命令(59):rcp命令
  3. SQL数据操作和查询
  4. Atitit.mvc的趋势与未来attilax总结
  5. Android开发权威指南(第2版)新书发布
  6. Delphi指针及其它(转)
  7. 微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone)
  8. 【原创】有关Buffer使用,让你的日志类库解决IO高并发写
  9. 如何让你的.vue在sublime text 3 中变成彩色?
  10. 【LOJ#2402】[THUPC2017]天天爱射击(整体二分)
  11. Java面试题2
  12. 【转】服务化框架技术选型与京东JSF解密
  13. GemFire 入门篇2:GemFire 8.2 在CentOS & Mac OS X的安装步骤
  14. phpstorm+xdebug调试代码
  15. Centos7-kafka-2.12安装验证
  16. Django服务器启动时指定端口和IP方法
  17. 解决sqoop 导入oracle表时 --split-by参数为日期类型时的报错:ORA-01861: literal does not match format string
  18. Latex文件如何拆分进行独立编译?
  19. jquery-修改、回退结果集
  20. Node爬虫之——使用async.mapLimit控制请求并发

热门文章

  1. iOS高效裁剪图片圆角算法
  2. mybatis类型别名
  3. bat文件传递参数
  4. linux 下 ifcfg-ethx配置和解析
  5. 数据库_Redis 入门基础到高级
  6. 查询文章的上下篇Sql语句
  7. Android实现图片的压缩、旋转工具类
  8. js 每到达5次换一行
  9. [jQuery]循环遍历改变a标签的href
  10. 「Android」 Surface分析