解决RN 0.50.3在三星手机上出现的闪退问题

项目使用RN 0.50.3,在测试中发现在三星手机上某个界面的操作会引发闪退,分析及解决步骤如下:

1. 打开手机开发者模式,连接至PC,在android studio的logcat中查找到exception

2. 拿这个exception去google发现,这是RN的一个版本bug

FATAL EXCEPTION: com.facebook.react.uimanager.IllegalViewOperationException:

Trying to set local data for view with unknown tag: 6193

3. 解决办法有2种,一是通过升级版本解决;二是大多数人采用的,通过打补丁的方式,即修改源码,然后重新编译。贸然升级版本显然不合适,而修改源码重新编译的话,又由于当时项目紧张,要求尽快解决问题,重新编译我们没有尝试过,且从教程的步骤来看,比较繁杂,估计比较费时。于是我就想是不是可以直接替换那个出问题的class文件来解决,即用官方修复了bug的class来替换我们项目中那个class,这就省去了自己去编译源码的时间。

4. 按照步骤2的链接的启示找到了app\node_modules\react-native\android\com\facebook\react\react-native\0.50.3\react-native-0.50.3.aar 经过尝试发现,APP在android上run时加载的正是这个aar里面的classes.jar里面的class。于是去官网找到了RN 0.51.1的版本的react-native-0.51.1.aar,先将aar改为zip解压,然后将aar里面的classes.jar改为zip,取出com/facebook/react/uimanager/UIImplementation.class,反编译后与0.50.3的对比发现,51版本的改动正是改了出问题的那块代码,其他地方几乎没改动,于是我就确认这个class可以直接拿来替换掉0.50.3中的class,最后再改回react-native-0.50.3.aar文件,打apk,测试通过,解决了这个issue。


解决RN 0.50.3在三星手机上出现的闪退问题_第1张图片

5. 以上的做法或许不是“规矩的”做法,但解决问题也不能一味的循规蹈矩,特殊情况下需要另辟蹊径。当然,在渡过了项目紧张期后我们还是去掌握了编译RN源码的方法,做好技术积累才能更好地解决问题。

你可能感兴趣的:(解决RN 0.50.3在三星手机上出现的闪退问题)