最近在做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已解决这个问题 。无奈只好升级 !!!!!!据说升级很多坑。
升级步骤如下:(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 下载。
以上操作完成后,再次运行报错
这是支持库的问题(升级后出现这样的问题),在对应的项目下找到代码将其处理就好。