尝试新建一个0.62的RN工程
输入命令:react-native init finereact0622 --version 0.62.2
遇到问题:应该是需要升级node版本,需要大于12,但是当前是11.10.1
使用nvm list命令查看本地node版本
nvm use v12.0.0切换
再次创建仍然提示node版本低,原来default版本还是旧版本,所以执行nvm alias default v12.0.0
发现还是不行,需要重启下电脑才可以
还是node版本问题,再切换一次
这次没问题了,打开工程先执行npm install,再执行react-native run-android,成功运行
用Android Studio打开,打算参考工程最新的脚本配置等内容,提示错误,应该是需要升级Android Studio:
升级后build工程,jdk路径有问题:
原jdk路径是:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home
改成:/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
再去build就好了
如果仍然有问题,就加上这个:
原生遇到的问题
gradle版本不匹配,点击升级:
jvm内存爆了,增加一些配置解决此问题:
编译问题:
这个是在settings.gradle里面引入node_modules的脚本,然后可以传入一些配置运行,具体配置信息不明。
问题可能是node运行时,require('react-native/cli')找不到了,但我在node_modules中手动去找是没有问题的,可能node环境存在一点问题?github上找到了类似的问题,Android和IOS都会出现,暂时没有明确的解决方法,所以先屏蔽掉引入这段脚本。
https://github.com/react-native-community/cli/issues/1119
运行报错:
打详细堆栈发现,可能是和华为推送的AndroidManifest有冲突,所以先屏蔽掉华为推送:
https://stackoverflow.com/questions/58104159/could-not-get-unknown-property-instantrunmanifestoutputdirectory-for-task-ap
找到了类似的问题,解决方案是升级华为推送版本
com.huawei.agconnect:agcp:1.4.1.300
果然可以了
找不到style的AppTheme了,先暂时把style相关的文件移动到demoApp里,之前是在base里面
可能是demoApp依赖base有问题,先换一种依赖方式,直接依赖本地源码:
RN遇到的问题:
创建的0.62工程是给我们升级RN工程做参考的,后面遇到问题可以进行比对,现在直接执行原工程的RN升级。
先把0.62参考工程的package.json的内容拷过来,有的需要升级的,暂时没去动,不知道升级有什么影响,后续再处理。
然后npm install, 发现有些我们patch过的内容,可能需要重新适配一下,我这边就先跳过了。
完成后有一些warning:
resolveAssetSource找不到,好像是老问题了,可能是别名有问题。
我们的别名设置是在babel.config.js,RN的不太清楚,暂时改成引用具体路径:
ColorPropType被移除了,暂时屏蔽掉
findNodeHandle和UIManager引用问题:
报错BlobModule转换有问题,需要原生处理一下
过了一会发现报错没了,变成了
0.62:
ColorPropType:
先把HTMLInject注释掉
react-native有些库被移除了,需要使用第三方库代替,具体包括:
ART、ListView、SwipeableListView、WebView、NetInfo、CameraRoll、ImageStore、ImageEditor、TimePickerAndroid、ViewPagerAndroid等
详见react-native/index
ListView:
引入方式:import ListView from 'deprecated-react-native-listview';
问题:
解决方案
NetInfo:
安装:npm install --save @react-native-community/netinfo
然后要把原生代码放到原生工程,才能运行起来:
这种第三方库我们通常是放到third工程里,为了方便调试和运行,我们暂时放到report工程
问题:
解决:
传参变了
ViewPager:
老办法
原生也需要引入此模块
RNFS报错:
原生需要更新一下版本,后面放到库里面
RNFS的copyFile方法参数变化:
直接参数适配:
FCTTouchableAndroid报错没找到:
确认了一下代码,感觉写的没什么问题,debug调试一下,问题居然没了。原因暂时不明。
换了FCTSafeAreaView没有这个问题,于是对比一下差异,发现原生端这个方法导致的问题,注释掉就好了,原因需要继续研究。
换一下接口就好了,暂时不清楚这两个接口有什么差异,我们两个接口都在用,并且效果是一样的:
又研究了一下不是接口的问题,是实现有问题,改成下面这样就可以了:
SVG报错:
类似的方案
AsyncStorage报错:
npm install @react-native-async-storage/async-storage
升级0.64后登录,viewpager这个三方库报错闪退:
java.lang.IncompatibleClassChangeError: Found interface com.facebook.react.u
原因是third包打包时依赖的是0.62,和0.64冲突了,后面所有third都要基于0.64打一次,避免错误
IFStatusBar.setxxx方法调用报错,好像setXXX方法是undefined,实测也调用不到原生,但我用原本的StatusBarModule就是正常的
原生网络库定制:
可能还有些问题
表单点击文本控件后闪退
原生报错:Unable to find module for UIManager* - react-native
解决方法,升级0.64.2后解决:
https://github.com/facebook/react-native/issues/31245#issuecomment-811587180
原生定位模块
定位功能被RN舍弃了,需要自己开发接口实现
或者使用第三方库:
https://www.npmjs.com/package/@react-native-community/geolocation
原生模块maven地址
http://mvn.finedevelop.com/#browse/browse:android-public
OEM打包问题
1.GenerateAndroidOfflineProject工程打包,报错找不到0.64.2:
可能是因为REACT_ROOT写的相对路径,不知道为什么找不到,写绝对路径就正常了
2.报错本地maven地址找不到,并且无法创建:
实际上这个路径是在的,可能第一次打包有问题,再次打包就好了。
然后再打包有问题,可能是这里面的内容需要手动删除,删掉后就好了。
3.生成离线bundle有问题:
怀疑是node版本的问题,修改node成v12.13.0就好了,可能是这个问题。
4.PublishAndroidOfflineProject报错
执行cp -rf命令报错,应该是把一些内容复制到AndroidOemTest文件夹里面,问题是找不到文件夹。我手动创建了一个AndroidOemTest文件夹,就正常了。