在 Android 上找不到 React Native 中的捆绑图像

Bundled image in React Native not found on Android

我正在为 ios 和 android 构建一个 React Native 应用程序。资产(图像、声音等)都存储在本地,并在 App 启动时由管理员预加载以备后用。

在 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' } 但图像仍然没有显示。

项目结构

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

现在一切正常,无需使用以下命令即可生成 apks :

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

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