最近在做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 下載。
以上操作完成后,再次運行報錯
這是支持庫的問題(升級后出現這樣的問題),在對應的項目下找到代碼將其處理就好。