RN升级(安卓8.0系统导致的崩溃)

最近在做RN开发中,使用的是0.53.3,数据采集过程中 

 

跟进一步查看奔溃情况后:此类奔溃只发生在安卓8.0系统。

 

 

 

奔溃日志中写道:

atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference

at com.facebook.react.uimanager.NativeViewHierarchyManager.dropView(NativeViewHierarchyManager.java:536)

 

总算是有点儿眉目,只能去看RN源码

  

逻辑上没有处理为null。 只能去gitHub查看情况(https://github.com/facebook/react-native),结果找到0.57.2已解决这个问题 。无奈只好升级 !!!!!!据说升级很多坑。

 

 

升级步骤如下:(RNapi方法)

基于 Git 的自动合并更新

react-native-git-upgrade提供了豪华的一条龙自动合并更新流程,它主要包含两个服务:

  • 首先它会利用 Git 工具计算新旧版本文件间的差异并生成补丁
  • 然后在用户的项目文件上应用补丁

重要提示: 现在你不需要运行 npm install 去下载新版本的 React Native 了,按照下面的步骤即可自动进行更新。

 

1. 安装 Git

你需要安装 Git,但这并不要求你自己使用 Git 去管理项目,只是我们的更新过程会使用到 Git 罢了。你可以在这里下载安装 Git,注意要把 Git 的路径添加到PATH变量中。

 

2. 安装react-native-git-upgrade工具模块

react-native-git-upgrade工具模块提供了命令行命令,因而需要全局安装(-g):

sudo npm install -g react-native-git-upgrade

 

3. 运行更新命令

$ react-native-git-upgrade

# 这样会直接把react native升级到最新版本

 

# 或者是:

 

$ react-native-git-upgrade X.Y.Z

# 这样把react native升级到指定的X.Y.Z版本

升级过程会如丝般顺滑。当然在少数情况下,取决于具体的版本和你修改的程度,Git 的合并算法也可能遭遇失败产生一些冲突,需要你人工介入。

 

4. 解决冲突

文件中的冲突会以分隔线隔开,并清楚的标记出处,例如下面这样:

13B07F951A680F5B00A75B9A /* Release */ = {

  isa = XCBuildConfiguration;

  buildSettings = {

    ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;

<<<<<<< ours

    CODE_SIGN_IDENTITY = "iPhone Developer";

    FRAMEWORK_SEARCH_PATHS = (

      "$(inherited)",

      "$(PROJECT_DIR)/HockeySDK.embeddedframework",

      "$(PROJECT_DIR)/HockeySDK-iOS/HockeySDK.embeddedframework",

    );

=======

    CURRENT_PROJECT_VERSION = 1;

>>>>>>> theirs

    HEADER_SEARCH_PATHS = (

      "$(inherited)",

      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,

      "$(SRCROOT)/../node_modules/react-native/React/**",

      "$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush/**",

    );

上面代码中的"ours"表示你自己的代码,而"theirs"表示 React Native 的官方代码。然后你可以根据实际情况判断,选择某一方晋级,另一方出局。

效果还算不错 ,但因为是针对项目做的版本升级 。所以在每次打开重新运行时需要在项目下执行:react-native start --reset-cache指令 。

 

 

效果还算不错 ,但因为是针对项目做的版本升级 。所以在每次打开重新运行时需要在项目下执行:react-native start --reset-cache指令(因为项目中用了不同的RN版本) , 如果还有其他情况  ,可以先用rm -rf node_modules/将项目中的node_modules移除后重新npm install 下载。

 

以上操作完成后,再次运行报错

 

这是支持库的问题,在对应的项目下找到代码将其处理就好

 

 

posted on 2018-10-15 22:40  眼疼  阅读(733)  评论(0编辑  收藏  举报

导航