Как я могу исключить / удалить определенные c файлы ресурсов с помощью Gradle? - PullRequest
0 голосов
/ 19 июня 2020

В моем приложении React Native у меня есть два варианта. В каждом варианте есть некоторые изображения и видеоресурсы, которые используются только в этом варианте.

Чтобы уменьшить размер APK, я хотел бы исключить ненужные ресурсы до или во время сборки.

Что было бы наилучшим способом выполнить sh это?

Я пытался использовать aaptOptions в соответствии со строками ниже, но у меня это никогда не сработало:

aaptOptions {
        '/folder:*.jpg:*.png'
        ignoreAssetsPattern "!/"+projectName+":*.mp4:"
}

Раньше у меня была следующая задача внизу моего файла build.gradle:

task deleteOtherFlavourAssets(type: Delete) {
    description = 'Deleting non $projectName assets'
    delete fileTree("src").matching {
        exclude "**/app_assets_$projectName**"
        include "**/app_assets_**"
    }
}

preBuild.dependsOn deleteOtherFlavourAssets

Это работало на некоторое время, но перестало работать через несколько месяцев go. Мне не удалось заставить его снова работать.

Я должен упомянуть, что при запуске вышеуказанной задачи как копии (вместо удаления) нужные файлы дублируются в этом каталоге.

task otherFlavourAssets(type: Copy) {
    description = 'Copying non $projectName assets to temp directory'
    copy {
        from fileTree("src").matching {
            exclude "**/app_assets_$projectName**"
            include "**/app_assets_**"
        }
        into 'tempAssetStore'
    }
}

Других релевантных пользовательских задач нет. Поэтому вполне возможно, что последующая задача сборки React Native будет копировать / объединять лишние ресурсы обратно, или, возможно, это проблема кеша.

1 Ответ

0 голосов
/ 19 июня 2020

Я не знаю, изменился ли Gradle в этом контексте или это вообще может быть проблемой, но ваши шаблоны фильтров кажутся мне немного странными. ** обычно используется для описания нуля или более уровней каталогов, и я никогда не встречал шаблонов, в которых ** используется в сочетании с именем каталога. Не могли бы вы вместо этого попробовать шаблоны ниже?

task deleteOtherFlavourAssets(type: Delete) {
    description = 'Deleting non $projectName assets'
    delete fileTree("src").matching {
        exclude "**/app_assets_$projectName*/**"
        include "**/app_assets_*/**"
    }
}
...