为什么libGdx资产位于android子模块中 为什么assets在android项目文件夹中而不在core中?如何更改assets文件夹的位置?

问题描述

我使用libGdx来创建游戏,一切正常,但是在gradle版本中我不了解的东西很少。

其中之一就是为什么所有资产都在android subModule中而不在核心subModule中。

Core是负责所有共享代码的模块,很奇怪没有资产。

这似乎是一个简单的问题,但会使整个构建更加难以理解。

如果您有避免这种情况的解决方案,我欢迎您提出建议。我将尝试改变这种行为,但是我对gradle配置的了解不多

解决方法

为什么assetsandroid项目文件夹中而不在core中?

好吧,因为libGDX团队决定使用Libgdx项目生成器来放置它。您可以 以其他方式设置项目,但是 我会坚持 libGDX提出的项目布局。

请注意,assets不一定总是位于android项目文件夹中,取决于您要定位的平台。例如,如果您不定位Android设备,则将没有android文件夹。随时阅读Structure of LibGDX projects上的更多内容。

如何更改assets文件夹的位置?

您必须编辑:

  • ios/robovm.xml
...
<resources>
  <resource>
    <!-- change this path -->
    <directory>../android/assets</directory>
  </resource>
  ...
  • desktop/build.gradle
// ...
sourceSets.main.resources.srcDirs = ["../android/assets"]
// ...
project.ext.assetsDir = new File("../android/assets")
// ...
  • android/build.gradle
// ...
sourceSets {
    main {
        // ...
        assets.srcDirs = ['assets']
// ...

此列表可能不完整,我认为在线上没有详尽的列表。也许这是拒绝更改assets文件夹位置的另一个原因。

,

我认为在Android项目中拥有assets目录的主要原因只是出于惯例。根据{{​​3}},原因是...

Android项目的根文件夹中确实有一个特定的文件夹。该文件夹必须严格由Android项目强制命名为“资产”。因此,最好在其他项目中也以相同的方式放置文件夹层次结构,这样您就不必为单个平台进行更改。

但是我认为应该可以将assets目录移至核心项目,因为如果您创建的项目没有Android部件,那么它也位于核心程序中。

要将assets目录移至核心项目,您只需要调整build.gradle文件,该文件位于子项目中并更改以下行:

//sourceSets.main.resources.srcDirs = ["../android/assets"]
sourceSets.main.resources.srcDirs = ["../core/assets"]

//project.ext.assetsDir = new File("../android/assets");
project.ext.assetsDir = new File("../core/assets");

在我的项目中,该文件位于桌面子项目中,但其他build.gradle文件中也可能有一些文件。

要在eclipse中运行项目,可能需要在移动资产文件夹后重新链接它。有关如何执行此操作的详细说明,请参见this answer