React-native: изображения, не отображаемые в устройстве Android; но отлично показывает в эмуляторе
Я работаю над образцом реакции родного проекта. И почти все функции, кроме <Image source=''/>
хорошо работают с ним. Изображение хорошо видно в эмуляторе Android, поставляемом с Android Studio и Genymotion, но не работает ни на каких реальных устройствах (moto G3 turbo, nexus 5, galaxy s4 и т.д...). Я не знаю, что пошло не так с моим кодом. Вот мой код
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Image
} from 'react-native';
class ImageTester extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.android.js
</Text>
<Text style={styles.instructions}>
Double tap R on your keyboard to reload,{'\n'}
Shake or press menu button for dev menu
</Text>
<Image source={require('./img/first_image.png')}></Image>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('ImageTester', () => ImageTester);
структура проекта:
![enter image description here]()
React-native версия: response-native: 0.32.1
Ответы
Ответ 1
Проблема была с моей командой упаковки пакета. Как сказал @luwu в своем комментарии, я проверил это и удивился, что с моей разницы нет. Тогда только я заметил сообщение при запуске команды
"Папка назначения активов не установлена, пропускаем..."
Это сообщение было немного запутанным, так как пакет уже был создан в папке ресурсов. "Активы" в этих сообщениях фактически указывают мои изображения. И я решил проблемы с помощью следующей команды:
react-native bundle --platform android --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --dev false --reset-cache --assets-dest android/app/src/main/res/
Ответ 2
Другое решение для той же проблемы активов, не связанных в разработке.
Добавьте следующую строку в файл app/build.gradle
в разделе project.ext.react
:
project.ext.react = [
... other properties
bundleInDebug: true // <-- add this line
]
Из документов в файле Gradle начального проекта:
По умолчанию bundleDebugJsAndAssets пропускается, так как в режиме отладки/разработки мы предпочитаем загружать пакет непосредственно с сервера разработки.