美文网首页react nativeReact Native
RN升级(安卓8.0系统导致的崩溃)

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

作者: 红尘安乐_si | 来源:发表于2018-10-15 22:33 被阅读213次

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

    1

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

    2

    奔溃日志中写道:

    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源码

    3

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

    升级步骤如下:(RN中api方法)

    基于 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指令(因为项目中用了不同的RN版本) ,如果还有其他情况  ,可以先用rm -rf node_modules/将项目中的node_modules移除后重新npm install 下载。

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

    4

    这是支持库的问题(升级后出现这样的问题),在对应的项目下找到代码将其处理就好。

    5

    相关文章

      网友评论

        本文标题:RN升级(安卓8.0系统导致的崩溃)

        本文链接:https://www.haomeiwen.com/subject/ampgyttx.html