Связанное изображение в React Native не найдено на Android - PullRequest
0 голосов
/ 05 апреля 2019

Я создаю приложение 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' }, но изображения по-прежнему не отображаются.

Структура проекта

project

1 Ответ

0 голосов
/ 17 апреля 2019

Я закончил сборку реактивного проекта с нуля в версии 0.59.4 (ранее 0.57.1).

Теперь все работает нормально, apks можно генерировать без объединения с помощью следующих команд:

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

Я также удалил Image.prefetch, так как он не будет работать при выпуске Android.

...