#android #android-ndk #crash #react-native
#Android #android-ndk #сбой #react-native
Вопрос:
Недавно мы интегрировали react native в наше приложение с простым просмотром текста. Мы получаем этот сбой на всех типах устройств.
Fatal Exception: com.facebook.react.bridge.JSApplicationIllegalArgumentException: Error while updating property 'flex' in shadow node of type: RCTView
at com.facebook.react.uimanager.ViewManagersPropertyCache$PropSetter.updateShadowNodeProp(ViewManagersPropertyCache.java:109)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater$FallbackShadowNodeSetter.setProperty(ViewManagerPropertyUpdater.java:148)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater.updateProps(ViewManagerPropertyUpdater.java:52)
at com.facebook.react.uimanager.ReactShadowNode.updateProperties(ReactShadowNode.java:222)
at com.facebook.react.uimanager.UIImplementation.createView(UIImplementation.java:177)
at com.facebook.react.uimanager.UIManagerModule.createView(UIManagerModule.java:222)
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.bridge.BaseJavaModule$JavaMethod.invoke(BaseJavaModule.java:318)
at com.facebook.react.cxxbridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:234)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196)
at java.lang.Thread.run(Thread.java:818)
Caused by java.lang.IllegalArgumentException: method com.facebook.react.uimanager.LayoutShadowNode.setFlex argument 1 has type float, got java.lang.String
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.uimanager.ViewManagersPropertyCache$PropSetter.updateShadowNodeProp(ViewManagersPropertyCache.java:99)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater$FallbackShadowNodeSetter.setProperty(ViewManagerPropertyUpdater.java:148)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater.updateProps(ViewManagerPropertyUpdater.java:52)
at com.facebook.react.uimanager.ReactShadowNode.updateProperties(ReactShadowNode.java:222)
at com.facebook.react.uimanager.UIImplementation.createView(UIImplementation.java:177)
at com.facebook.react.uimanager.UIManagerModule.createView(UIManagerModule.java:222)
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.bridge.BaseJavaModule$JavaMethod.invoke(BaseJavaModule.java:318)
at com.facebook.react.cxxbridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:234)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196)
at java.lang.Thread.run(Thread.java:818)
Мы показываем простой текст с помощью React Native
'use strict';
import React from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
class HelloWorld extends React.Component {
render() {
return (
<Text style={{color: 'white'}}>React Native is running</Text>
)
}
}
AppRegistry.registerComponent('8fit', () => HelloWorld);
Мы используем React Native 0.35.0-rc.0
, но мы получаем такой же сбой и со стабильной версией 0.33.1
.
Вы можете найти полный отчет о сбое здесь. https://gist.github.com/sealskej/1e2398ef1cd9dda2d1b2630348fa612a
Любая помощь, ведущая к устранению проблемы, будет высоко оценена!
Комментарии:
1. Эй, вы можете воспроизвести проблему с помощью приведенного выше кода? Я попробовал тот же код, но не получил сбоя.
2. Проверьте в своей кодовой базе react-native, если вы используете ключевое слово flex, и значение является строкой. Ошибка явно указывает, что вместо типа с плавающей точкой передается строковое значение.
3. Вы сказали
integrate
, что это не чистый проект React Native, верно? Код выглядит хорошо, это может быть ошибка установки. Проверьте свою часть настройки, возможно, вы что-то найдете.4. @Jickson Я не могу воспроизвести проблему. Я просто вижу, что это происходит случайным образом для некоторых пользователей.
5. @Jickson Нет, мы вообще не используем ключевое слово flex в файле js.
Ответ №1:
Я не понимаю, почему это не работает, но, возможно, решением было бы обернуть его в a View
и установить flex
там значение. Например:
render() {
return (
<View style={{flex: 1}}>
<Text style={{color: 'white'}}>React Native is running</Text>
</View>
)
}
Комментарии:
1. Я попробую.
Ответ №2:
Версия react в используемом файле package.json может отличаться от версии sdk, используемой в apk.
Это может каждый раз приводить к исключению IllegalArgumentException.
Комментарии:
1. Я использую
maven { url "$rootDir/node_modules/react-native/android" }
иcompile "com.facebook.react:react-native: "
, который должен гарантировать, что версии react native будут одинаковыми послеnpm install
, нет?