【发布时间】:2019-08-27 11:12:58
【问题描述】:
我正在为 ios 和 android 构建一个 React Native 应用程序。资产(图像、声音等)都存储在本地,并在应用程序启动期间由管理器预加载以供以后使用。
在调试和发布模式下的 ios 和调试模式下的 android 上一切正常,但图像不会在发布模式下显示在 android 上,即使在捆绑它们之后也是如此。
第一个资产从 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' },但图像仍然不显示。
项目结构
【问题讨论】:
标签: android react-native bundle react-native-android assets