一开始跟着教程打包并没有成功。大概踩了如下的坑,记录下来希望对后来的人有帮助。
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
里面的 compileSdkVersion
和 targetSdkVersion
从原来的 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 的看这里。
网友评论