【踩坑】React Native 打包 APK

一开始跟着教程打包并没有成功。大概踩了如下的坑,记录下来希望对后来的人有帮助。

1. android:attr/xxxxxx not found

我的 APP 中用了 react-native-picker 这个插件,在构建 debugger 版本的时候,虽然报错,但不影响运行,所以一直没太在意。直到这次构建 release 版本的时候,直接构建不成功了,才发现这并不是个小问题。

查了网上的相关资料,基原因大概就是 com.android.support:support-v4 升级导致的。解决思路就是将 com.android.support 固定在较低版本,思路大致有两种

方法1:全局固定,在 build.gradle 中添加配置

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-v4:27.1.0'
  }
}

方法2:固定插件的 'com.android.support,不细讲了。

可惜的是,上面两种方法我都没成功,后来看到 StackOverflow 里面的一个回答,倒是解决我的问题:将 node_modules\react-native-picker\android\build.gradle 里面的 compileSdkVersiontargetSdkVersion 从原来的 27 改成 28

2. Release 包闪退

老实说,起初这个问题真是令我很沮丧,由于不是 APP 开发出生,虽然听过 logcat,但压根不知道如何使用。好在现在 Android 技术成熟,文档完善,没折腾多久就上手了。

言归正传,说到这个坑就不得不吐槽上面提到的教程,里面提到:

使用 ./gradlew assembleRelease 会把所有用到的 JavaScript 代码都打包到一起,然后内置到 APK 包中。

事实上,执行指令后这些资源并没有打包到 apk 里,apk 仅仅是个空壳,而这正是导致闪退的原因。最后我是通过在根目录执行下面的命令解决的资源打包问题:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle

然后从根目录进入 android 目录, 执行 ./gradlew assembleRelease

3. Request Fail

debug 环境好好的请求接口,发现在 release 里面就报错了,这个问题 Android 可以通过这个方法解决,iOS 的看这里。

你可能感兴趣的:(【踩坑】React Native 打包 APK)