У нас есть установка, которая кажется похожей на то, что вы описали выше, с отношением «многие к одному» между проектами и активами. Вот потенциальный способ сделать это.
Основная идея:
- Иметь единую авторитетную папку активов
- Попросите отдельные проекты скопировать эту папку в свои выходные данные сборки во время сборки.
- Добейтесь этого, создав задачу компиляции проекта
dependsOn или finalizedBy задачу копирования.
- Убедитесь, что Android и другие проекты довольны, скопировав активы в то место, где внутренние файловые API libgdx ищут этот конкретный тип проекта. (Например, проекты Android автоматически получают
assets/ перед URI, предоставленным Gdx.files.internal(). Этот шаг больше зависит от вашей личной файловой структуры, поэтому может потребоваться небольшая настройка, чтобы получить правильный путь для всех проектов, но не получайте обескуражен!
Примечание: Gradle должен автоматически отслеживать, действительно ли изменился каталог ресурсов. Если ничего не обновлялось, то задачи копирования фактически станут неоперативными, что немного ускорит сборку для не первых запусков. Очевидно, что если вы сделаете cleanAssets, как я упоминаю ниже, это не будет применяться.
Преимущество этого подхода (во всяком случае, для меня) заключается в том, что он больше не полагается на межпроектные ссылки или навороченные манипуляции с путями к классам. Это просто настоящие файлы в реальных каталогах. Недостатком является то, что это увеличивает используемое дисковое пространство, поскольку в разных проектах может быть несколько физических копий ресурсов.
Следующий пример не является полным, но мы надеемся, что он даст вам достаточно информации.
Пример задачи копирования в действии. Этот конкретный пример берет каталог ресурсов из "основного" проекта и копирует его в проект Android.
android/build.gradle
task copyAssets(type: Copy) {
from "../core/assets"
into "./assets"
}
Пример того, как сделать сборку проекта Android зависимой от этой задачи:
android/build.gradle
afterEvaluate { project ->
project.tasks.preDebugBuild {
dependsOn copyAssets
}
project.tasks.preReleaseBuild {
dependsOn cleanAssets
finalizedBy copyAssets
}
}
Вы заметите, что в preReleaseBuild я также добавил задачу cleanAssets. Всегда полезно очистить весь мусор и сделать новую копию во время производственной сборки. cleanAssets — это просто основная задача удаления.
Пример зависимости задачи копирования для проекта, отличного от Android:
build {
finalizedBy copyAssets
}
Если вы все еще застряли, дайте мне знать, где, и я постараюсь помочь.
person
Harvtronix
schedule
04.02.2019