【问题标题】:Bundled image in React Native not found on Android在 Android 上找不到 React Native 中的捆绑图像
【发布时间】: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


    【解决方案1】:

    我最终在 0.59.4(之前的 0.57.1​​)版本上从头开始构建了一个 react-native 项目。

    现在一切正常,无需捆绑以下命令即可生成 apk:

    cd android && ENVFILE=../.env.production ./gradlew assembleProdRelease && cd ..
    cd android && ENVFILE=../.env.development ./gradlew assembleDevRelease && cd ..
    

    我还删除了Image.prefetch,因为它不适用于 Android 版本。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2016-06-04
      • 1970-01-01
      • 2017-08-14
      • 2017-12-19
      • 2018-06-24
      • 1970-01-01
      • 2020-01-13
      • 2018-02-21
      相关资源
      最近更新 更多