некоторые изображения загружаются, другие нет - PullRequest
0 голосов
/ 24 октября 2019

Окружающая среда

  • реакция-нативный 0,60

Что происходит:

У меня естькомпонент, который создает вид Image-Buttons с <ImageBackground>.

Если я связываю приложение как debugRelease , оно работает как шарм, и все отображаются изображения каждой кнопки. Если я связываю приложение как releaseBundle , пропускаются 4 из 7 изображений (все время одни и те же изображения).

То, что я пробовал

Кнопка 1 не работает, кнопки 2 - 4 работают, а кнопки 5 - 7 даже не работают. Чтобы убедиться, что файл изображения не поврежден, я скопировал изображение кнопки 2 с новым именем и заменил изображение 1 этим. Изображение все равно не показывалось!

Итак, я запустил Android Studio и открыл apk в debug-APK и release-APS, чтобы проверить файлы внутри. Вот результат: enter image description here

Есть ли у вас какие-либо подсказки, почему только некоторые из файлов изображений не упакованы в Release-APK надлежащим образом (даже если дляНапример, файл spenden.jpg является копией рабочего kontakt.jpg файла, как описано выше)?

И вот как я его реализовал:

...

const getHomeButtonList = (data, dropdowns) => [
  {
    id: 'offer',
    bgImage: { uri: 'erwin' },
    btnText: 'ANGEBOTE \n DER SKG',
    navigateTo: 'Offer',
  },
  {
    id: 'contact',
    bgImage: { uri: 'kontakt' },
    btnText: 'KONTAKTE',
    navigateTo: 'Contact',
    data: {
      data,
      dropdowns,
    },
  },
  {
    id: 'videos',
    bgImage: { uri: 'videos' },
    btnText: 'VIDEOS',
    navigateTo: 'VideoList',
  },
  {
    id: 'innovationen',
    bgImage: { uri: 'innovationen' },
    btnText: 'INNOVATION IN MEDIZIN UND \nGESUNDHEITSWESEN',
    navigateTo: 'CategorizedPage',
    data: {
      headerTitle: 'Innovationen',
      headerImage: 'innovationen',
      data: data.innovations,
    },
  },
  {
    id: 'nebenwirkungen',
    bgImage: { uri: 'nebenwirkungen' },
    btnText: 'HILFE BEI NEBENWIRKUNGEN',
    navigateTo: 'CategorizedPage',
    data: {
      headerTitle: 'Nebenwirkungen',
      headerImage: 'nebenwirkungen',
      data: data.sideeffects,
    },
  },
  {
    id: 'beratung',
    bgImage: { uri: 'consultation' },
    btnText: 'BERATUNG UND BEGLEITUNG',
    navigateTo: 'CategorizedPage',
    data: {
      headerTitle: 'Beratung',
      headerImage: 'consultation',
      data: data.advice,
    },
  },
  {
    id: 'spenden',
    bgImage: { uri: 'spenden' },
    btnText: 'SPENDEN',
    navigateTo: 'Browser',
    navigateUrl: url.donateUrl,
  },

];
...

Grid = (props) => {
    const { columns, orientation } = this.state;
    return (
      <FlatList
        data={props}
        key={orientation}
        keyExtractor={(item) => item.id}
        renderItem={({ item }) => (
          <View style={(orientation === 'portrait') ? [
            styles.btn,
            styles.btnFirst] : [landscape.btn, styles.btnFirst]}
          >
            <TouchableOpacity
              style={[styles.touchBtn, styles[item.id]]}
              onPress={() => this.pressImageButton(item)}
            >
              <ImageBackground
                resizeMode="cover"
                style={styles.imageBackground}
                source={item.bgImage}
              >
                <View style={styles.imageOverlay} />
                <Text style={[styles.btnText]}>
                  {item.btnText}
                </Text>
              </ImageBackground>
            </TouchableOpacity>
          </View>
        )}
        numColumns={columns}
      />
    );
  };

...

        <View style={(orientation === 'portrait')
          ? styles.btnContainer
          : landscape.btnContainer}
        >
          {this.Grid(getHomeButtonList(data, dropdowns))}
        </View>

1 Ответ

0 голосов
/ 24 октября 2019

Я понял, что причиной проблемы является shrinkResources true в build.gradle.

ProGuard не распознает, что мне нужны эти файлы. Чтобы проверить, какие ресурсы удалены, если у вас включено shrinkResources true, проверьте <build-directory>/build/outputs/mapping/release/resources.txt.

В моем случае есть записи, подобные следующим:

Skipped unused resource res/drawable/consultation.jpg: 55893 bytes (replaced with small dummy file of size 0 bytes)
Skipped unused resource res/drawable/angebote.jpg: 71099 bytes (replaced with small dummy file of size 0 bytes)
Skipped unused resource res/drawable/nebenwirkungen.jpg: 57250 bytes (replaced with small dummy file of size 0 bytes)
Skipped unused resource res/drawable/redbox_top_border_background.xml: -1 bytes (replaced with small dummy file of size 104 bytes)
Skipped unused resource res/drawable/signet_sachsen.gif: 1925 bytes (replaced with small dummy file of size 0 bytes)
Skipped unused resource res/drawable/spenden.jpg: 68376 bytes (replaced with small dummy file of size 0 bytes)

Как это исправить

Создайте файл с именем keep.xml и поместите его в каталог /android/app/src/main/res/raw. (Если каталог raw не существует, создайте его.

Поместите это в файл:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
           tools:keep="@drawable/spenden,@drawable/angebote" />

ВАЖНО : Не записывайте тип файла какthis: @drawable/spenden.jpg. Это не будет работать так, как ожидалось. Но вы можете использовать подстановочные знаки для имен файлов, таких как: @ drawable / img_ в качестве небольшого обходного пути к сохранить все изображения одной командой.

Источники информации:

Устранение неполадок shringResources

Настроить, какие ресурсы хранить

...