Я создаю приложение React Native для iOS и Android.Активы (изображения, звуки и т. Д.) Хранятся локально и предварительно загружаются во время запуска приложения менеджером для последующего использования.
Все отлично работает на ios в режимах отладки и выпуска и на Android в режиме отладки, но изображения выиграныне отображается на Android в режиме выпуска, даже после их объединения.
Первые ресурсы предварительно загружаются из Asset Manager в src/assets/index.js
import { Image } from 'react-native'
const assets = {
images: {
'icon.png': require('./images/icon.png')
}
}
const preloadedAssets = {}
const getImage = (name, extension = 'png') => {
return getAsset('images', `${name}.${extension}`)
}
const getAsset = (type, name) => {
return preloadedAssets[type][name]
}
const preloadImages = () => {
preloadedAssets.images = {}
return Promise.all(
Object.keys(assets.images).map(name => {
const source = Image.resolveAssetSource(assets.images[name])
return Image
.prefetch(source.uri)
.then(() => {
preloadedAssets.images[name] = {
source: assets.images[name],
...source
}
})
})
)
}
const preload = () => {
return preloadImages()
}
export default {
preload,
getImage
}
Затем изображения отображаются следующим образом
import AssetManager from '../assets'
const asset = AssetManager.getImage('icon.png')
<Image source={asset.source} style={{ width: ..., height: ... }} />
В комплекте со следующей командой
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
Я также попытался скопировать все активы в папку android/app/src/main/assets/
и заменить require('./images/icon.png')
на { uri: 'file:///android_asset/images/icon.png' }
, но изображения по-прежнему не отображаются.
Структура проекта