React-Native开发调试和打包记录

2,364 阅读2分钟

公众号:暮北林
Q Q 群 : 一起学前端
今天的记录一下在工作中使用RN调试时遇到的一些问题(针对Android)

话不多说直接写调试易错点

我的开发环境

// 系统 Ubuntu 19.04
// RN版本 React-native 0.61
// 开发工具 Vscode

1. SDK配置成功,但是create的初始项目如何都运行不起来

// 在android目录下新增一个名为.local.properties的文件
// 具体内容为你本机的SDK位置 有时候是无法找到你的sdk位置
// 例如:
sdk.dir=/home/wangfpp/Android/sdk

2. 真机或者模拟器连接不了本地server无法调试

1. 模拟器是否开启/真机是否已经连接
// 在终端输入 adb devices 查看已经连接的设备
// 如果设备存在那就查看另一个原因

2. 查看机器是否配置调试端口
// 模拟器直接Ctrl + M  真机摇晃手机 或者adb shell input keyevent 82调出Devtools
// Dev Settings -> Debug server host for device选择倒数第二项的设置
// 输入开发机的IP:8081
// 重新reload

3. 如果依然无法调试
// 查看手机和开发机器是否在同一网段内

4. 可能还需要重置调试端口
adb reverse tcp:8081 tcp:8081

以上是调试中我遇到的问题 能调试就能发现问题所在,在去想办法解决问题

如何自定义打包

./gradlew assembleRelease 
// 这条命令在Linux下执行之前需要修改chmod
sudo chmod +x ./gradlew  
// 赋予x可执行权限

React-native打包出的apk名为app-release.apk/但是真实的上线APK的名字一般为${ProjectName}_${VERSION}-${DATE}.apk

如何生成/读取这三个(项目名 版本号 打包日期)变量的值呢?

如何读取版本号

1. 版本号的位置
// 其实版本号就在package.json中
// 在js/jsx中我们可以直接
import packageJson form 'path/package.json'
const { version } = packageJson
// 但是在打包脚本中是无法import这个文件的  但是我们可以找到这个文件

打包脚本的位置在android/app/build.gradle

## 大概在129行的位置
android{
   ....
   defaultConfig {
    applicationId "com.record"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName appVersion //这里修改版本号
   }
   ....
}
### 读取package.json的版本号
### 定义一个读取版本号的函数
def getAppVersion() {
    ## File packageJsonFile这个需要在文件头部引用
    ## 在文件头部引用此包 import groovy.json.JsonSlurper

    File packageJsonFile = new File('../package.json') 

    ## 实例化jsonslurper
    def jsonslurper = new JsonSlurper()

    ## 解析文件内容
    def packageJson = jsonslurper.parseText(packageJsonFile.text)

    ## 读取version字段并return
    return packageJson["version"]
}
## 定义一个变量接收函数返回值
def appVersion = getAppVersion()

如何增加打包时间修改打包文件名称

## 还是android/app/build.gradle 打包184行左右
### 如果是release打包上线包APK则修改apk名称
if (buildName == 'release') {
   ## 获取当前打包的时间
   def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
   
   ## 重新命名APK名称
   def outputFileName = "M2600-${variant.versionName}_${createTime}.apk"
   // println output.getPackageApplicationProvider()
   
   ## 打包输出为新的APK名称
   output.outputFileName = outputFileName
}

重新打包

1. 以上修改完成后重新执行./gradlew assembleRelease 
打包后的APK名称为 M2600-0.0.1_2020-03-07.apk
2. apk的位置在
android/app/build/output/apk/release/...

书写打包脚本

1. 打包命令./gradlew assembleRelease 太长记不住
2. 新建release.sh
3. sudo chmod +x ./release.sh
4. 书写打包脚本

在android目录下建立release.sh文件

#!/bin/bash
### Android打包脚本

APP_HOME="`pwd -P`"
./gradlew assembleRelease
if [ $? != 0 ]; then
    echo '打包失败'
    exit 1
else:
  ## build success do somthing
  ## 移动APK到其他地方  cp M2600-0.0.1_2020-03-07.apk /home/apk/
  ## 或者做一些其他事情
fi

这次只是自己工作的记录

我的公众号和QQ群

公众号
公众号

QQ群
QQ群